• LVS+Keepalived 高可用集群


    一、Keepalived工具介绍

    支持故障自动切换(Failover)

    支持节点健康状态检查(Health Checking)

    基于vrrp协议完成地址流动

    为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)

    为ipvs集群的各RS做健康状态检测

    基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务 

    官方网站:https://keepalived.org/

    用户空间核心组件:

    vrrp stack:VIP消息通告

    checkers:监测real server(简单来说 就是监控后端真实服务器的服务)

    system call:实现 vrrp 协议状态转换时调用脚本的功能

    SMTP:邮件组件(报警邮件)

    IPVS wrapper:生成IPVS规则(直接生成ipvsadm)

    Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)

    WatchDog:监控进程(整个架构是否有问题)

    控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

    IO复用器:针对网络目的而优化的自己的线程抽象

    内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

    二.vrrp协议(虚拟路由冗余协议)

    Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

    2.1 vrrrp是什么?

    是针对路由器的一种备份解决方案

    由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务

    每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态

    若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

    2.2 vrrp工作过程

            选举Master,比较优先级,高的为Master,若优先级相同无Master时,比较接口IP地址,大的为Master,Master设备发送ARP报文,承担报文转发工作;
    状态维持,Master设备周期发送通告报文,公布配置信息和工作状态;
    Backup设备根据收到的通告报文判断Master设备是否工作正常,如果Master设备主动放弃Master地位时,会发送优先级为0的通告报文,Backup设备收到后会快速切换成Master设备或者定时器超时后Backup设备认为Master设备无法正常工作,会切换状态为Master。

    2.3 Keeplived、VRRP及其工作原理

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

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

    2.4.Keepalived体系主要模块

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

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

    三.实验:搭建LVS+Keepalived 高可用集群

    实验环境:

    主keepalived服务器:192.168.200.12
    备keepalived服务器:192.168.200.13

    web1服务器:192.168.200.14
    web2服务器:192.168.200.15

    vip:192.168.200.200
    客户机:192.168.200.17

    配置负载调度器(主keepalived服务器:192.168.200.12)

    ############################ 配置Keepalived master服务器 #############
     
    1. #关闭防火墙
    systemctl stop firewalld.service
    setenforce 0
     
    2. #安装服务
    yum install ipvsadm keepalived -y 
     
    3. #修改配置文件keeplived.conf
    cd /etc/keepalived/
    cp keepalived.conf keepalived.conf.bak
    vim keepalived.conf
     
    ......
    global_defs {                        #定义全局参数
    --10行--修改,邮件服务指向本地
        smtp_server 127.0.0.1
    --12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_1,备为LVS_2
        router_id LVS_1
    }
     
    vrrp_instance VI_1 {                #定义VRRP热备实例参数
    --20行--修改,指定热备状态,主为MASTER,备为BACKUP
        state MASTER
    --21行--修改,指定承载vip地址的物理接口
        interface ens33
    --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致    
        virtual_router_id 10
    --23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
        priority 100
        advert_int 1                    #通告间隔秒数(心跳频率)
        authentication {                #定义认证信息,每个热备组保持一致
            auth_type PASS                #认证类型
    --27行--修改,指定验证密码,主备服务器保持一致
            auth_pass 123
        }
        virtual_ipaddress {                #指定群集vip地址
            192.168.79.25
        }
    }
    --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    virtual_server 192.168.200.200 80 {
        delay_loop 6                    #健康检查的间隔时间(秒)
        lb_algo rr                        #指定调度算法,轮询(rr)
    --39行--修改,指定群集工作模式,直接路由(DR)
        lb_kind DR
        persistence_timeout 50            #连接保持时间(秒)
        protocol TCP                    #应用服务采用的是 TCP协议
    --43行--修改,指定第一个Web节点的地址、端口
        real_server 192.168.200.14 80 {
            weight 1                    #节点的权重
    --45行--删除,添加以下健康检查方式        
            TCP_CHECK {
                connect_port 80            #添加检查的目标端口
                connect_timeout 3        #添加连接超时(秒)
                nb_get_retry 3            #添加重试次数
                delay_before_retry 3    #添加重试间隔
            }
        }
     
        real_server 192.168.200.15 80 {        #添加第二个 Web节点的地址、端口
            weight 1
            TCP_CHECK {
                connect_port 80
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    ##删除后面多余的配置##
     
    4. #启动服务、查看虚拟网卡vip
    systemctl start keepalived
    ip addr show dev ens33    
     
    5. #调整proc响应参数,关闭Linux内核的重定向参数响应
    vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens33.send_redirects = 0
     
    6. #刷新一下
    sysctl -p
     
    ############################# 配置ipvsadm #######################
     
    7. #配置负载分配策略,并启动服务
    ipvsadm-save >/etc/sysconfig/ipvsadm
    systemctl start ipvsadm.service
     
    8. 
    #清空ipvsadm,并做策略
    ipvsadm -C
    ipvsadm -A -t 192.168.200.200:80 -s rr
    ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.14:80 -g
    ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.15:80 -g
     
    9. #保存设置
    ipvsadm
    ipvsadm -ln
    ipvsadm-save >/etc/sysconfig/ipvsadm

    配置负载调度器(备keepalived服务器:192.168.200.13)

    1. ############################ 配置Keepalived master服务器 ######################
    2. 1. #关闭防火墙
    3. systemctl stop firewalld.service
    4. setenforce 0
    5. 2. #安装服务
    6. yum -y install ipvsadm keepalived
    7. 3. #修改配置文件keeplived.conf
    8. cd /etc/keepalived/
    9. cp keepalived.conf keepalived.conf.bak
    10. vim keepalived.conf
    11. ......
    12. global_defs { #定义全局参数
    13. --10行--修改,邮件服务指向本地
    14. smtp_server 127.0.0.1
    15. --12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_1,备为LVS_2
    16. router_id LVS_1
    17. }
    18. vrrp_instance VI_1 { #定义VRRP热备实例参数
    19. --20行--修改,指定热备状态,主为MASTER,备为BACKUP
    20. state BACKUP
    21. --21行--修改,指定承载vip地址的物理接口
    22. interface ens33
    23. --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
    24. virtual_router_id 10
    25. --23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
    26. priority 99
    27. advert_int 1 #通告间隔秒数(心跳频率)
    28. authentication { #定义认证信息,每个热备组保持一致
    29. auth_type PASS #认证类型
    30. --27行--修改,指定验证密码,主备服务器保持一致
    31. auth_pass 123
    32. }
    33. virtual_ipaddress { #指定群集vip地址
    34. 192.168.200.200
    35. }
    36. }
    37. --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    38. virtual_server 192.168.200.200 80 {
    39. delay_loop 6 #健康检查的间隔时间(秒)
    40. lb_algo rr #指定调度算法,轮询(rr)
    41. --39行--修改,指定群集工作模式,直接路由(DR)
    42. lb_kind DR
    43. persistence_timeout 50 #连接保持时间(秒)
    44. protocol TCP #应用服务采用的是 TCP协议
    45. --43行--修改,指定第一个Web节点的地址、端口
    46. real_server 192.168.200.14 80 {
    47. weight 1 #节点的权重
    48. --45行--删除,添加以下健康检查方式
    49. TCP_CHECK {
    50. connect_port 80 #添加检查的目标端口
    51. connect_timeout 3 #添加连接超时(秒)
    52. nb_get_retry 3 #添加重试次数
    53. delay_before_retry 3 #添加重试间隔
    54. }
    55. }
    56. real_server 192.168.200.15 80 { #添加第二个 Web节点的地址、端口
    57. weight 1
    58. TCP_CHECK {
    59. connect_port 80
    60. connect_timeout 3
    61. nb_get_retry 3
    62. delay_before_retry 3
    63. }
    64. }
    65. }
    66. ##删除后面多余的配置##
    67. 4. #启动服务、查看虚拟网卡vip
    68. systemctl start keepalived
    69. ip addr show dev ens33
    70. 5. #调整proce响应参数,关闭Linux内核的重定向参数响应
    71. vim /etc/sysctl.conf
    72. net.ipv4.ip_forward = 1
    73. net.ipv4.conf.all.send_redirects = 0
    74. net.ipv4.conf.default.send_redirects = 0
    75. net.ipv4.conf.ens33.send_redirects = 0
    76. 6. #刷新一下
    77. sysctl -p
    78. ############################# 配置ipvsadm #################################
    79. 7. #配置负载分配策略,并启动服务
    80. ipvsadm-save >/etc/sysconfig/ipvsadm
    81. systemctl start ipvsadm.service
    82. 8. #清空ipvsadm,并做策略
    83. ipvsadm -C
    84. ipvsadm -A -t 192.168.200.200:80 -s rr
    85. ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.14:80 -g
    86. ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.15:80 -g
    87. 9. #保存设置
    88. ipvsadm
    89. ipvsadm -ln
    90. ipvsadm-save >/etc/sysconfig/ipvsadm

     

     

    配置节点服务器(web1服务器:192.168.200.14)

    1. 1. #关闭防火墙
    2. systemctl stop firewalld
    3. setenforce 0
    4. 2. #安装并开启httpd服务
    5. yum -y install httpd
    6. systemctl start httpd
    7. 3. #配置站点文件
    8. vim /var/www/html/index.html
    9. this is 123 web1!
    10. 4. #配置虚拟vip
    11. vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    12. DEVICE=lo:0
    13. ONBOOT=yes
    14. IPADDR=192.168.200.200
    15. NETMASK=255.255.255.255
    16. 5. #重启网络服务,开启虚拟网卡
    17. systemctl restart network
    18. ifup lo:0
    19. ifconfig lo:0
    20. 6. #设置路由
    21. route add -host 192.168.200.200 dev lo:0
    22. route -n
    23. 7. #调整 proc 响应参数
    24. #添加系统只响应目的IP为本地IP的ARP请求
    25. #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
    26. vim /etc/sysctl.conf
    27. net.ipv4.conf.all.arp_ignore = 1
    28. net.ipv4.conf.all.arp_announce = 2
    29. net.ipv4.conf.default.arp_ignore = 1
    30. net.ipv4.conf.default.arp_announce = 2
    31. net.ipv4.conf.lo.arp_ignore = 1
    32. net.ipv4.conf.lo.arp_announce = 2
    33. 8. #刷新proc参数
    34. sysctl -p

     

    配置节点服务器(web2服务器:192.168.200.15)

    1. 1. #关闭防火墙
    2. systemctl stop firewalld
    3. setenforce 0
    4. 2. #安装并开启httpd服务
    5. yum -y install httpd
    6. systemctl start httpd
    7. 3. #配置站点文件
    8. vim /var/www/html/index.html
    9. this is lmz web2!
    10. 4. #配置虚拟vip
    11. vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    12. DEVICE=lo:0
    13. ONBOOT=yes
    14. IPADDR=192.168.200.200
    15. NETMASK=255.255.255.255
    16. 5. #重启网络服务,开启虚拟网卡
    17. systemctl restart network
    18. ifup lo:0
    19. ifconfig lo:0
    20. 6. #设置路由
    21. route add -host 192.168.200.200 dev lo:0
    22. route -n
    23. 7. #调整 proc 响应参数
    24. #添加系统只响应目的IP为本地IP的ARP请求
    25. #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
    26. vim /etc/sysctl.conf
    27. net.ipv4.conf.all.arp_ignore = 1
    28. net.ipv4.conf.all.arp_announce = 2
    29. net.ipv4.conf.default.arp_ignore = 1
    30. net.ipv4.conf.default.arp_announce = 2
    31. net.ipv4.conf.lo.arp_ignore = 1
    32. net.ipv4.conf.lo.arp_announce = 2
    33. 8. #刷新proc参数
    34. sysctl -p

    测试验证:

    在客户机上测试(客户机:192.168.200.16)

    主keepalived服务器:192.168.200.12

    备keepalived服务器:192.168.200.13  备份服务器中没有VIP

    断开主keepalived服务器:192.168.200.12

    备keepalived服务器:192.168.79.220 

  • 相关阅读:
    公司招了个五年经验的测试员,见识到了真正的测试天花板
    Docker基本管理
    [附源码]java毕业设计同德佳苑物业管理系统论文
    geoserver2.18系列(6):使用ImageMosaic发布时间序列栅格
    QGIS003:【03捕捉工具栏】-点、线、面图层的捕捉操作
    Java设计模式:fly weight 享元模式
    [附源码]SSM计算机毕业设计视屏网站论文JAVA
    python系列教程215——列表解析与矩阵
    Matlab唱歌?尊嘟假嘟?
    Java面试题:Redis分片集群结构
  • 原文地址:https://blog.csdn.net/mikechen1/article/details/136532594