• LVS-RD和keepalived集群服务


    目录

    一、keepalived介绍

    1、keepalived功能

    2、VRRP通信原理

    3、keepalived服务的工作原理

    4、保证高可用性

    二、LVS-RD和keepalived集群配置


    一、keepalived介绍

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

    keepalived 软件主要是通过 VRRP 协议 实现高可用的功能。VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的速写,VRRP出现的目的就是为了解决静态路由单点故障的问题,它能保证当个别节点出现问题时,整个网络可以不间断的运行。
     

    1、keepalived功能

    ①Keepalived是一款专为LVS 和HA 设计的一款健康检查工具

    ②支持故障自动切换、支持节点健康状态检查

    健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。

    2、VRRP通信原理

    1、在网络中,主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,服务就会中断,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

    2、VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时进行设备切换而不影响主机之间的数据通信。

    3、VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。

    4、工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对

    5、VRRP路由器在运行过程中有三种状态:①Initialize状态:系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理;② Master状态;③ Backup状态;一般主路由器处于Master状态,备份路由器处于Backup状态。

    6、VRRP选举机制

    ①VRRP组中IP拥有者。如果虚拟IP地址与VRRP组中的某台VRRP路由器IP地址相同,则此路由器为IP地址拥有者,这台路由器将被定位主路由器。

    ②比较优先级。如果没有IP地址拥有者,则比较路由器的优先级,优先级的范围是0~255,优先级大的作为主路由器

    ③比较IP地址。在没有Ip地址拥有者和优先级相同的情况下,IP地址大的作为主路由器。

    7、VRRP通过一竞选协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

    3、keepalived服务的工作原理

    1、Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

    2、在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。

    4、保证高可用性

    一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

    二、LVS-RD和keepalived集群配置

    在LVS-RD实验的基础上增加一台虚拟机 作为zwb_dr2

    1、LVS-RD以之前的博客作为基础

    2、配置zwb_dr2(主)

    1. ##关闭防火墙及安全信息中心
    2. [root@zwb_rd2 ~]# systemctl stop firewalld
    3. [root@zwb_rd2 ~]# systemctl disable firewalld
    4. [root@zwb_rd2 ~]# setenforce 0
    5. setenforce: SELinux is disabled
    6. ###编译安装 nginx,前面博客有
    7. ###安装ipvsadm
    8. [root@zwb_rd2 ~]# yum -y install ipvsadm keepalived
    9. [root@zwb_rd2 ~]# modprobe ip_vs ## 加载模块信息
    10. [root@zwb_rd2 ~]# cat /proc/net/ip_vs ## 查看ipvs 版本信息
    11. IP Virtual Server version 1.2.1 (size=4096)
    12. Prot LocalAddress:Port Scheduler Flags
    13. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    14. [root@zwb_rd2 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm ## 创建一个ipvsadm的一个配置文件
    15. [root@zwb_rd2 ~]# systemctl start ipvsadm ## 启动
    16. [root@zwb_rd2 ~]# systemctl enable ipvsadm ##设置开机启动
    17. ### 配置负载均衡策略
    18. [root@zwb_rd2 ~]# ipvsadm -C #### 清空原有配置
    19. [root@zwb_rd2 ~]# ipvsadm -A -t 192.168.159.100:80 -s rr ### 添加一台虚拟主机,设置IP及端口
    20. [root@zwb_rd2 ~]# ipvsadm -a -t 192.168.159.100:80 -r 192.168.159.10:80 -g ## 添加真实主机
    21. [root@zwb_rd2 ~]# ipvsadm -a -t 192.168.159.100:80 -r 192.168.159.11:80 -g ## 添加真实主机
    22. ## 添加虚拟子接口ens33:0
    23. [root@zwb_rd2 ~]# cd /etc/sysconfig/network-scripts/
    24. [root@zwb_rd2 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
    25. [root@zwb_rd2 network-scripts]# vim ifcfg-ens33:0
    26. TYPE=Ethernet
    27. PROXY_METHOD=none
    28. BROWSER_ONLY=no
    29. BOOTPROTO=static
    30. DEFROUTE=yes
    31. IPV4_FAILURE_FATAL=no
    32. IPV6INIT=yes
    33. IPV6_AUTOCONF=yes
    34. IPV6_DEFROUTE=yes
    35. IPV6_FAILURE_FATAL=no
    36. IPV6_ADDR_GEN_MODE=stable-privacy
    37. NAME=ens33:0
    38. DEVICE=ens33:0
    39. ONBOOT=yes
    40. IPADDR=192.168.159.100 ###修改为VIP
    41. PREFIX=24
    42. #GATEWAY=192.168.159.2
    43. #DNS1=114.114.114.114
    44. IPV6_PRIVACY=no
    45. [root@zwb_rd2 network-scripts]# systemctl restart network ##重启网络服务
    46. ## 配置sysctl.conf 文件
    47. [root@zwb_rd2 ~]# vim /etc/sysctl.conf
    48. net.ipv4.ip_forward = 0
    49. net.ipv4.conf.all.send_redirects = 0
    50. net.ipv4.conf.default.send_redirects = 0
    51. net.ipv4.conf.ens33.send_redirects = 0
    52. [root@zwb_rd2 ~]# sysctl -p ## 刷新生效
    53. net.ipv4.ip_forward = 0
    54. net.ipv4.conf.all.send_redirects = 0
    55. net.ipv4.conf.default.send_redirects = 0
    56. net.ipv4.conf.ens33.send_redirects = 0
    57. ##配置keepalived.conf文件,清空原先配置
    58. [root@zwb_rd2 ~]# vim /etc/keepalived/keepalived.conf
    59. global_defs { # 定义全局参数
    60. router_id lvs_01 # 定义热备组角色(每个节点不能一样)
    61. }
    62. vrrp_instance vi_1 { ## 定义VRRP的实例配置
    63. state MASTER # 指定热备状态,主为master,备为backup
    64. interface ens33 # 指定承载vip地址的物理接口
    65. virtual_router_id 51 # 指定虚拟路由器的ID号,每个热备组保持一致
    66. priority 110 # 7指定优先级,数值越大越优先
    67. advert_int 1
    68. authentication {
    69. auth_type PASS
    70. auth_pass 6666
    71. }
    72. virtual_ipaddress { ## 定义VIP地址
    73. 192.168.159.100
    74. }
    75. }
    76. virtual_server 192.168.159.100 80 { #指定虚拟服务器地址vip,端口,定义虚拟服务器和web服务器池参数
    77. lb_algo rr #定义轮询规则
    78. lb_kind DR #指定集群工作模式,直接路由DR
    79. persistence_timeout 6 #健康检查的间隔时间
    80. protocol TCP #应用服务采用的是TCP协议
    81. real_server 192.168.159.10 80 { #定义后端真实服务器的参数
    82. weight 1 #节点权重
    83. TCP_CHECK {
    84. connect_port 80 #添加检查的目标端口
    85. connect_timeout 3 #添加连接超时
    86. nb_get_retry 3 #添加重试次数
    87. delay_before_retry 3 #添加重试间隔
    88. }
    89. }
    90. real_server 192.168.159.11 80 { #指定第二个web节点的地址,端口
    91. weight 1
    92. TCP_CHECK {
    93. connect_port 80
    94. connect_timeout 3
    95. nb_get_retry 3
    96. delay_before_retry 3
    97. }
    98. }
    99. }
    100. [root@zwb_dr2 ~]# systemctl start keepalived.service ##启动

    2、配置zwb_dr1(增加配置)(备)

    1. [root@zwb_dr1 ~]# yum -y install keepalived.x86_64 ##安装
    2. [root@zwb_rd2 ~]# vim /etc/keepalived/keepalived.conf
    3. global_defs {
    4. router_id lvs_02 ##定义热备组
    5. }
    6. vrrp_instance vi_1 {
    7. state BACKUP ##定义BACKUP
    8. interface ens33
    9. virtual_router_id 51
    10. priority 105 ##优先级低于master
    11. advert_int 1
    12. authentication {
    13. auth_type PASS
    14. auth_pass 6666
    15. }
    16. virtual_ipaddress {
    17. 192.168.159.100
    18. }
    19. }
    20. virtual_server 192.168.159.100 80 {
    21. lb_algo rr
    22. lb_kind DR
    23. persistence_timeout 6
    24. protocol TCP
    25. real_server 192.168.159.10 80 {
    26. weight 1
    27. TCP_CHECK {
    28. connect_port 80
    29. connect_timeout 3
    30. nb_get_retry 3
    31. delay_before_retry 3
    32. }
    33. }
    34. real_server 192.168.159.11 80 {
    35. weight 1
    36. TCP_CHECK {
    37. connect_port 80
    38. connect_timeout 3
    39. nb_get_retry 3
    40. delay_before_retry 3
    41. }
    42. }
    43. }
    44. [root@zwb_dr1 ~]# systemctl start keepalived.service ##启动

    3、查看VIP飘在那个服务器上

    ①查看keepalived(主)

    主机名:[root@zwb_rd2 ~]# hostname
                   zwb_rd2

    ②查看keepalived(备)

    主机名:[root@zwb_rd1 ~]# hostname
                   zwb_rd21

     

    验证:

    查看LVS-DR是否工作正常,正常情况下均工作在主设备master上,主机名zwb_rd2

    模拟master宕机了。看VIP是否漂移

    查看keepalived(备)的ip,发现VIP已经漂移成功

    打开浏览器实验

     

     

     

  • 相关阅读:
    22.Laravel集合的使用
    【全网最细致】SpringBoot整合Spring Security + JWT实现用户认证
    【运维】永久关闭selinux不当,导致无法启动
    Vue学习(二十二)路由器钩子和两种工作模式
    Redis高效点赞与取消功能
    【Leetcode】204. 计数质数
    【7.21-26】代码源 - 【平方计数】【字典序最小】【“Z”型矩阵】
    OnlyOffice集成Springboot以及web端
    如何优雅的比较两个对象是否相等
    Set集合
  • 原文地址:https://blog.csdn.net/m0_62948770/article/details/126834588