• LVS-DR-Keepalived


    LVS-DR-Keepalived

    简介

    keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4层和第 5 层交换。 Keepalived 的作用是检测服务器的状态,如果有一台 服务器死机,或工作出现故障, Keepalived 将检测到,并将有故障的服务器从系统中剔除,当服务器工作正常后Keepalived 自动将 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

    原理

    Layer3,4&5 工作在 IP/TCP 协议栈的 IP 层, TCP 层,及应用层,。

    Layer3: Keepalived 使用 Layer3 的方式工作式时, Keepalived 会定期向服务器群中的服务器发送一个 ICMP 的数据包(既我们平时用的 Ping 程序) , 如果发现某台服务的 IP 地址没有激活, Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。 Layer3 的方式是以服务器的 IP 地址是否有效作为服务器工作正常与否的标准。

    Layer4: 主要以 TCP 端口的状态来决定服务器工作正常与否。如 web server 的服务端口一般是80,如果 Keepalived 检测到 80 端口没有启动,则 Keepalived 将把这台服务器从服务器群中删除。

    Layer5: Layer5 就是工作在具体的应用层了,比 Layer3,Layer4 要复杂一点,在网络上占用的带宽也要大一些。 Keepalived 将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则 Keepalived 将把服务器从服务器群中剔除

    keepalived作用

    • 管理VIP VIP地址会在分发器之间切换

    • 监控 LVS 分发器

    • 管理后端节点

      运行在主分发的 Keepalived 会以组播的形式向网络中宣告自己,即主分发器还活着,备用节点能收到。当备用节点,在一个时间单位中收不到组播,备用节点会认为主 LVS 挂了,开始接手主分发器工作,把 VIP 配给自己。

      Keepalived 会每隔一个时间段去做一次类似于访问的操作如:探针: elinks http://192.168.1.1 –dump

    下载链接

    搭建Keepalived

    网络拓扑

    Master配置

    安装keepalived

    [root@LVS-Master ~]# yum install -y keepalived
    
    [root@LVS-Master ~]# systemctl start keepalived.service  && systemctl enable keepalived.servic
    
    

    修改配置文件

    [root@LVS-Master ~]# cd /etc/keepalived/
    
    [root@LVS-Master keepalived]# cp keepalived.conf keepalived.conf.bak	# 文件备份
    
    [root@LVS-Master keepalived]# vim keepalived.conf
    	
        global_defs {          ##全局定义块
           notification_email {     ##邮件通知
           root@localhost   
        }
           #设置邮件的发送地址
           notification_email_from root@localhost 
           smtp_server 127.0.01           #设置 smtp server 地址
           smtp_connect_timeout 30        #设置连接 smtp 服务器超时时间
           router_id LVS_Master           #load balancer 的标识 ID,用于 email 警报
    
        }
    
        #配置实例
        vrrp_instance apache {
            state MASTER    
            interface eth33           #生成VIP地址的接口
            virtual_router_id 10      #主、备机的 virtual_router_id 必须相同,取值 0-255
            priority 100             #主机的优先级,备份机改为 50,主机优先级一定要大于备机
            advert_int 1            #主备之间的通告间隔秒数
            authentication {
                auth_type PASS       #设置验证类型,主要有 PASS 和 AH 两种
                auth_pass root      
            }
    
            virtual_ipaddress {
                192.168.1.111  
            }
        }
    
        ## 虚拟服务配置
        virtual_server 	192.168.1.111 80 {   
            delay_loop 6       #Keepalived 多长时间监测一次 RS
            lb_algo rr        #lvs 调度算法,这里使用轮叫
            lb_kind DR        #LVS 是用 DR 模式
            #persistence_timeout 50         #同一 IP 50 秒内的请求都发到同个 real server 超过50S 发到另外一个节点
            protocol TCP     #指定转发协议类型,有 tcp 和 udp 两种
    
            real_server 192.168.1.109 80 {    #配置服务节点
                weight 1      ##默认为1,0为失效
            TCP_CHECK{       ##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒
                    connect_timeout 3     #10 秒无响应超时
                    retry 3               #重试次数
                    delay_before_retry 3    #重试间隔
                    connect_port 80		# 连接端口
                }
            }
    
            real_server 192.168.1.110 80 {
                weight 1
            TCP_CHECK{
                    connect_timeout 3
                    retry 3
                    delay_before_retry 3
                    connect_port 80
                }
            }
        }
    
    

    Slave配置

    安装keepalived

    [root@LVS-Slave ~]# yum install -y keepalived
    
    [root@LVS-Slave ~]# systemctl start keepalived.service  && systemctl enable keepalived.servic
    

    修改配置文件

    [root@LVS-Slave ~]# cd /etc/keepalived/
    
    [root@LVS-Slave keepalived]# cp keepalived.conf keepalived.conf.bak	# 文件备份
    
    [root@LVS-Slave keepalived]# vim keepalived.conf
    	
        global_defs {          ##全局定义块
           notification_email {     ##邮件通知
           root@localhost   
        }
           #设置邮件的发送地址
           notification_email_from root@localhost 
           smtp_server 127.0.01           #设置 smtp server 地址
           smtp_connect_timeout 30        #设置连接 smtp 服务器超时时间
           router_id LVS_Slave           #load balancer 的标识 ID,用于 email 警报
    
        }
    
        #配置实例
        vrrp_instance apache {
            state BACKUP			# 大写    
            interface eth33           # 生成VIP的接口
            virtual_router_id 10      #主、备机的 virtual_router_id 必须相同,取值 0-255
            priority 90             #主机的优先级,备份机改为 90,主机优先级一定要大于备机
            advert_int 1            #主备之间的通告间隔秒数
            authentication {
                auth_type PASS       #设置验证类型,主要有 PASS 和 AH 两种
                auth_pass root      
            }
    
            virtual_ipaddress {
                192.168.1.111    
            }
        }
    
        ## 虚拟服务配置
        virtual_server 	192.168.1.111 80 {   
            delay_loop 6       #Keepalived 多长时间监测一次 RS
            lb_algo rr        #lvs 调度算法,这里使用轮叫
            lb_kind DR        #LVS 是用 DR 模式
            #persistence_timeout 50         #同一 IP 50 秒内的请求都发到同个 real server 超过50S 发到另外一个节点
            protocol TCP     #指定转发协议类型,有 tcp 和 udp 两种
    
            real_server 192.168.1.109 80 {    #配置服务节点
                weight 1      ##默认为1,0为失效
            TCP_CHECK{       ##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒
                    connect_timeout 3     #10 秒无响应超时
                    retry 3               #重试次数
                    delay_before_retry 3    #重试间隔
                    connect_port 80		# 连接端口
                }
            }
    
            real_server 192.168.1.110 80 {
                weight 1
            TCP_CHECK{
                    connect_timeout 3
                    retry 3
                    delay_before_retry 3
                    connect_port 80
                }
            }
        }
    

    测试VIP地址切换

    # 在master关闭服务
    [root@LVS-Master ~]# systemctl stop keepalived.service
    

    节点配置

    Node1与Node2配置一样
    #  抑制ARP
    [root@Node1 ~]# yum -y install httpd
    [root@Node1 ~]# systemctl start httpd && systemctl enable httpd
    
    [root@Node1 ~]# vim /etc/sysctl.conf 
    
        net.ipv4.conf.ens33.arp_ignore = 1
        net.ipv4.conf.ens33.arp_announce = 2
        net.ipv4.conf.all.arp_ignore = 1
        net.ipv4.conf.all.arp_announce = 2
        
    [root@Node1 ~]# sysctl -p
    
    # 添加VIP路由
    [root@Node1 ~]# ifconfig lo:1 192.168.1.111 netmask 255.255.255.255 broadcast 192.168.1.111 up
    [root@Node1 ~]# route add -host 192.168.1.111 dev lo
    
    [root@Node1 ~]# echo "Node1 test page" > /var/www/html/index.htnl
    
    [root@Node2 ~]# echo "Node2 test page" > /var/www/html/index.htnl
    

    客户端进行测试

    节点全部正常运行

    [root@client ~]# curl 192.168.1.111
    
    [root@client ~]# curl 192.168.1.111
    
    [root@client ~]# curl 192.168.1.111
    
    

    Node1节点损坏

    [root@Node1 ~]# systemctl stop httpd
    
    
    在这里插入图片描述

    Node1节点恢复正常

    [root@Node1 ~]# systemctl start httpd
    

    在这里插入图片描述

    在这里插入图片描述

    Keepavlied双向主从

    master配置

    [root@LVS-Master ~]# cd /etc/keepalived/
    
    [root@LVS-Master keepalived]# cp keepalived.conf keepalived.conf.bak	# 文件备份
    
    [root@LVS-Master keepalived]# vim keepalived.conf
        global_defs {
        notification_email {
            root@localhost
        }
                notification_email_from root@localhost 
                smtp_server 127.0.0.1
                smtp_connect_timeout 30
                router_id DR2
        }
        vrrp_instance apache {
                state MASTER 
                interface ens33
                virtual_router_id 51
                priority 100 
                advert_int 1
                authentication {
                auth_type PASS
                auth_pass root
        }
        virtual_ipaddress {
                192.168.1.111
        }
        }
        vrrp_instance mysql {
                state BACKUP 
                interface ens33
                virtual_router_id 53
                priority 100 
                advert_int 1
                authentication {
                auth_type PASS
                auth_pass root
        }
        virtual_ipaddress {
                192.168.1.112
        }
        }
        virtual_server 192.168.1.111 80 {
                delay_loop 6
                lb_algo rr
                lb_kind DR
                #persistence_timeout 50
                protocol TCP
        real_server 192.168.1.109 80 {
                weight 1
                TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
        }
        real_server 192.168.1.110 80 {
                weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
            }
        }
        virtual_server 192.168.1.112 80 {
                delay_loop 6
                lb_algo rr
                lb_kind DR
                #persistence_timeout 50
                protocol TCP
        real_server 192.168.1.109 80 {
                weight 1
                TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
        }
        real_server 192.168.1.110 80 {
                weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
        }
        }
    
    

    slave配置

    [root@LVS-Slave ~]# cd /etc/keepalived/
    
    [root@LVS-Slave keepalived]# cp keepalived.conf keepalived.conf.bak	# 文件备份
    
    [root@LVS-Slave keepalived]# vim keepalived.conf
    
        global_defs {
        notification_email {
            root@localhost
        }
                notification_email_from root@localhost 
                smtp_server 127.0.0.1
                smtp_connect_timeout 30
                router_id DR2
        }
        vrrp_instance apache {
                state BACKUP 
                interface ens33
                virtual_router_id 51
                priority 90 
                advert_int 1
                authentication {
                auth_type PASS
                auth_pass root
        }
        virtual_ipaddress {
                192.168.1.111
        }
        }
        vrrp_instance mysql {
                state MASTER 
                virtual_router_id 53
                priority 150 
                advert_int 1
                authentication {
                auth_type PASS
                auth_pass root
        }
        virtual_ipaddress {
                192.168.1.112
        }
        }
        virtual_server 192.168.1.111 80 {
                delay_loop 6
                lb_algo rr
                lb_kind DR
                #persistence_timeout 50
                protocol TCP
        real_server 192.168.1.109 80 {
                weight 1
                TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
        }
        real_server 192.168.1.110 80 {
                weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
        }
        }
        virtual_server 192.168.1.112 80 {
                delay_loop 6
                lb_algo rr
                lb_kind DR
                #persistence_timeout 50
                protocol TCP
        real_server 192.168.1.109 80 {
                weight 1
                TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
        }
        real_server 192.168.1.110 80 {
                weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
        }
        }
        }
    
    

    master查看VIP地址

    [root@LVS-Master keepalived]# ip a show ens33
    
    

    在这里插入图片描述

    slave查看VIP地址

    [root@LVS-Slave keepalived]# ip a show ens33
    
    

    在这里插入图片描述

    客户端测试

    访问apache实例

    [root@client ~]# curl 192.168.1.111
    
    [root@client ~]# curl 192.168.1.111
    
    
    
    在这里插入图片描述

    访问mysql实例

    [root@client ~]# curl 192.168.1.112
    
    [root@client ~]# curl 192.168.1.112
    
    在这里插入图片描述
  • 相关阅读:
    蟠桃记
    考新郎
    有假币
    年会抽奖
    发邮件
    进制回文数
    数位和
    外星人的语言
    一的个数
    继承
  • 原文地址:https://www.cnblogs.com/SR-Program/p/13557332.html
Copyright © 2020-2023  润新知