• Keepalived+LVS高可用集群


    一、keepalived介绍:


        keepalived 软件起初是专为 LVS 负载均衡软件设计的,用来管理并监控 LVS集群中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此,keepalived 除了能够管理 LVS集群外,还可以为其他服务(例如:Nginx、Haproxy、MySQL等)实现高可用。

    二、keepalived工具介绍:


    (1)管理 LVS 负载均衡软件:
    Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动,停止功能。

    (2)支持故障自动切换:
    Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器。

    Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。

    (3)实现 LVS 负载调度器、节点服务器的高可用性(HA):
    一般企业集群需要满足的三个特点:负载均衡、健康检查、故障切换,使用 LVS + Keepalived 完全可以满足需求。

    三、Keepalived体系主要模块:


     keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

    core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
    vrrp模块:是来实现VRRP协议的。
    check模块:负责健康检查,常见的方式有端口检查及URL检查。


    四、keepalived脑裂及解决办法:


      1、Keepalive脑裂:
      主备调度器通过内网交换机连接,如果交换机挂了,则此时主调度器仍存活,但备份调度器收不到主调度器的VRRP信息,备调度器就会工作,两台调度器就会同时工作,出现脑裂现象。

      主备调度器同时工作,如果web是无状态应用,那么客户端无论从哪一个调度器进行访问,页面内容相同。但如果是有状态应用,则两台调度器同时工作,会导致客户端显示的页面资源不一致。

      2.脑裂原因:
    高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)
    因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
    因心跳线间连接的设备故障(网卡及交换机)
    因仲裁的机器出问题(采用仲裁的方案)
    高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输
    Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
    vrrp实例名字不一致、优先级一致。
      3.脑裂应对策略:
    主备调度器多连一条线,即使交换机挂了,这两个还可以通信。
    通过第三方监控软件,当发现两台调度器同时工作,则杀掉主调度器。
    自己写一个脚本,例如crontab和while死循环执行,当监控到备调度器工作了,就杀掉主调度器的keepalived服务。


    五、keepalived+LVS 高可用部署示例:


      当主服务器宕机或服务出现问题时,备服务器抢占转发

     1.配置负载调度器(192.168.88.100): 

    1. 1.#关闭防火墙
    2. systemctl disable --now firewalld
    3. setenforce 0
    4. 2.yum安装ipvsadm和keepalived
    5. yum install ipvsadm keepalived.x86_64 -y
    6. 3.加载模块
    7. modprobe ipvsadm
    8. cat /proc/net/ip_vs #查看ip_vs版本信息
    9. 4.调整 proc 响应参数,关闭Linux 内核的重定向参数响应
    10. vim /etc/sysctl.conf
    11. net.ipv4.conf.all.send_redirects = 0
    12. net.ipv4.conf.default.send_redirects = 0
    13. net.ipv4.conf.ens33.send_redirects = 0
    14. sysctl -p #刷新加载
    15. 5.编写keepalived配置文件:
    16. global_defs { #定义全局参数
    17. --10行--修改,邮件服务指向本地
    18. smtp_server 127.0.0.1
    19. --12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
    20. router_id LVS_01
    21. --14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
    22. #vrrp_strict
    23. }
    24. vrrp_instance VI_1 { #定义VRRP热备实例参数
    25. --20行--修改,指定热备状态,主为MASTER,备为BACKUP
    26. state MASTER
    27. --21行--修改,指定承载vip地址的物理接口
    28. interface ens33
    29. --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
    30. virtual_router_id 10
    31. #nopreempt #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
    32. --23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    33. priority 100
    34. advert_int 1 #通告间隔秒数(心跳频率)
    35. authentication { #定义认证信息,每个热备组保持一致
    36. auth_type PASS #认证类型
    37. --27行--修改,指定验证密码,主备服务器保持一致
    38. auth_pass 123456
    39. }
    40. virtual_ipaddress { #指定群集vip地址
    41. 192.168.10.200
    42. }
    43. }
    44. --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    45. virtual_server 192.168.10.200 80 {
    46. delay_loop 6 #健康检查的间隔时间(秒)
    47. lb_algo rr #指定调度算法,轮询(rr)
    48. --39行--修改,指定群集工作模式,直接路由(DR)
    49. lb_kind DR
    50. persistence_timeout 0 #连接保持时间(秒) 修改为0以便查看效果
    51. protocol TCP #应用服务采用的是 TCP协议
    52. --43行--修改,指定第一个Web节点的地址、端口
    53. real_server 192.168.10.133 80 {
    54. weight 1 #节点的权重
    55. --45行--删除,添加以下健康检查方式
    56. TCP_CHECK {
    57. connect_port 80 #添加检查的目标端口
    58. connect_timeout 3 #添加连接超时(秒)
    59. nb_get_retry 3 #添加重试次数
    60. delay_before_retry 3 #添加重试间隔
    61. }
    62. }
    63. real_server 192.168.10.134 80 { #添加第二个 Web节点的地址、端口
    64. weight 1
    65. TCP_CHECK {
    66. connect_port 80
    67. connect_timeout 3
    68. nb_get_retry 3
    69. delay_before_retry 3
    70. }
    71. }
    72. ##删除后面多余的配置##
    73. }
    74. 6.启动服务:
    75. ipvsadm-save >/etc/sysconfig/ipvsadm
    76. systemctl start ipvsadm.service
    77. systemctl restart keepalived

    2.配置负载调度器(192.168.88.100): 

    1. 把keepalived.conf文件远程拷贝过来,更改备服务器参数
    2. scp keepalived.conf 192.168.88.102:`pwd`
    3. ## 在master主机使用scp 注意我这里是相对路径
    4. notification_email_from Alexandre.Cassen@firewall.loc
    5. 10 smtp_server 127.0.0.1
    6. 11 smtp_connect_timeout 30
    7. 12 router_id LVS_02 #更改id
    8. 13 vrrp_skip_check_adv_addr
    9. 14 #vrrp_strict
    10. 15 vrrp_garp_interval 0
    11. 16 vrrp_gna_interval 0
    12. 17 }
    13. 18
    14. 19 vrrp_instance VI_1 {
    15. 20 state BACKUP #备服务器为backup
    16. 21 interface ens33
    17. 22 virtual_router_id 51
    18. 23 priority 90 #优先级90
    19. 24 advert_int 1
    20. 25 authentication {
    21. 26 auth_type PASS
    22. 27 auth_pass 1111
    23. 28 }

    3.配置web服务器: 

    1. 1. #关闭防火墙
    2. systemctl stop firewalld
    3. setenforce 0
    4. 2. #配置web服务器网页,自定
    5. 4. #配置虚拟vip
    6. vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    7. DEVICE=lo:0
    8. ONBOOT=yes
    9. IPADDR=192.168.88.200
    10. NETMASK=255.255.255.255
    11. 5. #重启网络服务,开启虚拟网卡
    12. systemctl restart network
    13. ifup lo:0
    14. ifconfig lo:0
    15. 6. #设置路由
    16. route add -host 192.168.88.200 dev lo:0
    17. route -n
    18. 7. #调整 proc 响应参数
    19. #添加系统只响应目的IP为本地IP的ARP请求
    20. #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
    21. vim /etc/sysctl.conf
    22. net.ipv4.conf.all.arp_ignore = 1
    23. net.ipv4.conf.all.arp_announce = 2
    24. net.ipv4.conf.default.arp_ignore = 1
    25. net.ipv4.conf.default.arp_announce = 2
    26. net.ipv4.conf.lo.arp_ignore = 1
    27. net.ipv4.conf.lo.arp_announce = 2
    28. 8. #刷新proc参数
    29. sysctl -p
    30. 两台配置一样。。。。。。。
    31. 想要快速测试调度结果,需要关闭web服务的长连接

    4.测试:

     

     

  • 相关阅读:
    关于IDEA没有显示日志输出?IDEA控制台没有显示Tomcat Localhost Log和Catalina Log 怎么办?
    【名人】王兴语录
    IDEA下载与安装,保姆级教程
    【数据结构】插入排序:直接插入排序、折半插入排序、希尔排序的学习知识总结
    关于量化系统开发逻辑讲解及合约量化策略系统开发技术方案(详细分析)
    少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2022年6月
    Win10鼠标右键菜单不显示怎么办?
    进一步了解视频美颜SDK:美颜SDK的技术原理
    008 OpenCV matchTemplate 模板匹配
    牛蛙!GoFrame2.7正式版的监控组件真是及时雨
  • 原文地址:https://blog.csdn.net/OuOOutlier_/article/details/133072532