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