• LVS keepalived实现高可用负载群集


    目录

    1 Keepalived及其工作原理

    1.1 Keepalived体系主要模块及其作用:

    2 LVS+Keepalived 高可用群集部署

    2.1 配置负载调度器(主、备相同)

    2.1.1 配置keeplived(主、备DR 服务器上都要设置)

    2.1.2 启动 ipvsadm 服务

    2.1.3 调整 proc 响应参数

    2.2 配置节点服务器

    2.3 测试验证

    3 知识点


    1 Keepalived及其工作原理

    Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

    在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

    1.1 Keepalived体系主要模块及其作用:

    keepalived体系架构中主要有三个模块,分别是core、check和vrrp。 ●core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。 ●vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换) ●check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)

    2 LVS+Keepalived 高可用群集部署

    服务器规划:

    主DR 服务器:192.168.30.105

    备DR 服务器:192.168.30.102

    Web 服务器1:192.168.30.107

    Web 服务器2:192.168.30.108

    vip:192.168.30.188

    客户端:192.168.30.115

    2.1 配置负载调度器(主、备相同)

    1. systemctl stop firewalld.service
    2. setenforce 0
    3. yum -y install ipvsadm keepalived
    4. modprobe ip_vs
    5. cat /proc/net/ip_vs

    2.1.1 配置keeplived(主、备DR 服务器上都要设置)

    1. vim keepalived.conf
    2. ......
    3. global_defs { #定义全局参数
    4. --10行--修改,邮件服务指向本地
    5. smtp_server 127.0.0.1
    6. --12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
    7. router_id LVS_01
    8. --14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
    9. #vrrp_strict
    10. }
    11. vrrp_instance VI_1 { #定义VRRP热备实例参数
    12. --20行--修改,指定热备状态,主为MASTER,备为BACKUP
    13. state MASTER
    14. --21行--修改,指定承载vip地址的物理接口
    15. interface ens33
    16. --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
    17. virtual_router_id 10
    18. #nopreempt #如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreempt
    19. --23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    20. priority 100
    21. advert_int 1 #通告间隔秒数(心跳频率)
    22. authentication { #定义认证信息,每个热备组保持一致
    23. auth_type PASS #认证类型
    24. --27行--修改,指定验证密码,主备服务器保持一致
    25. auth_pass abc123
    26. }
    27. virtual_ipaddress { #指定群集vip地址
    28. 192.168.80.188
    29. }
    30. }
    31. --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    32. virtual_server 192.168.80.188 80 {
    33. delay_loop 6 #健康检查的间隔时间(秒)
    34. lb_algo rr #指定调度算法,轮询(rr)
    35. --39行--修改,指定群集工作模式,直接路由(DR)
    36. lb_kind DR
    37. persistence_timeout 0 #连接保持时间(秒)
    38. protocol TCP #应用服务采用的是 TCP协议
    39. --43行--修改,指定第一个Web节点的地址、端口
    40. real_server 192.168.80.12 80 {
    41. weight 1 #节点的权重
    42. --45行--删除,添加以下健康检查方式
    43. TCP_CHECK {
    44. connect_port 80 #添加检查的目标端口
    45. connect_timeout 3 #添加连接超时(秒)
    46. nb_get_retry 3 #添加重试次数
    47. delay_before_retry 3 #添加重试间隔
    48. }
    49. }
    50. real_server 192.168.80.13 80 { #添加第二个 Web节点的地址、端口
    51. weight 1
    52. TCP_CHECK {
    53. connect_port 80
    54. connect_timeout 3
    55. nb_get_retry 3
    56. delay_before_retry 3
    57. }
    58. }
    59. ##删除后面多余的配置##
    60. }

    1. systemctl start keepalived
    2. ip addr #查看虚拟网卡vip

    2.1.2 启动 ipvsadm 服务

                                                            ---192.168.30.105---

    1. ipvsadm-save > /etc/sysconfig/ipvsadm
    2. systemctl start ipvsadm
    3. ipvsadm -ln
    4. #如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

                                                            ---192.168.30.105---

    ​​​​​​​

    2.1.3 调整 proc 响应参数

    关闭Linux 内核的重定向参数响应 v

    1. vim /etc/sysctl.conf
    2. net.ipv4.conf.all.send_redirects = 0
    3. net.ipv4.conf.default.send_redirects = 0
    4. net.ipv4.conf.ens33.send_redirects = 0
    5. sysctl -p

    2.2 配置节点服务器

    1. systemctl stop firewalld
    2. setenforce 0
    3. --192.168.30.107---
    4. echo 'yuan shen !' > /apps/nginx/html/index.html
    5. --192.168.30.109---
    6. echo 'this is benet web!' > /apps/nginx/html/index.html
    7. vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    8. DEVICE=lo:0
    9. ONBOOT=yes
    10. IPADDR=192.168.30.188
    11. NETMASK=255.255.255.255
    12. service network restart 或 systemctl restart network
    13. ifup lo:0
    14. ifconfig lo:0
    15. route add -host 192.168.30.188 dev lo:0
    16. vim /etc/sysctl.conf
    17. net.ipv4.conf.lo.arp_ignore = 1
    18. net.ipv4.conf.lo.arp_announce = 2
    19. net.ipv4.conf.all.arp_ignore = 1
    20. net.ipv4.conf.all.arp_announce = 2
    21. sysctl -p

    2.3 测试验证

    在客户端访问 http://192.168.30.188/

    再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived

    配备成功

    3 知识点

    Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP? 答案: Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。 然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。 优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。

    keepalived的抢占与非抢占模式: 抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP 非抢占式俩节点state必须为bakcup,且必须配置nopreempt。 注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

  • 相关阅读:
    企业应用架构研究系列二:MSF&Scrum 项目管理
    Chip and Ribbon(Round 158)
    java-php-python-ssm研究生入学考试备考辅助系统计算机毕业设计
    redis设计规范
    0050__Linux系统之VNC工具安装及远程连接
    Sentinel控制台配置 持久化到nacos
    Verilog实现SPI通信协议驱动设计
    JavaScript高级
    嵌入式Linux应用开发基础知识(三)——Makefile入门
    QT mqtt 在子线程中使用
  • 原文地址:https://blog.csdn.net/2302_78835233/article/details/132803792