千家信息网

部署LVS-DR与 Keepalived群集(实战!!!)

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,keepalived概述Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该
千家信息网最后更新 2025年01月24日部署LVS-DR与 Keepalived群集(实战!!!)

keepalived概述

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

keepalived工作原理

1、keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。2、虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。3、keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

实验环境

调度服务器DR1(主):     192.168.100.66     centos7-1调度服务器DR2(备):     192.168.100.77     centos7-2节点服务器web1:       192.168.100.88     centos7-3节点服务器web2:       192.168.100.99     centos7-4漂移地址vip:             192.168.100.100客户端client:       192.168.100.200    windows7

第一步配置centos7-1--DR1调度服务器

1、安装ipvsadm、keepalived软件包

[root@dr1 ~]# yum install ipvsadm keepalived -y

2、修改网卡模式为仅主机并固定IP:192.168.100.66

[root@dr1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33BOOTPROTO=staticIPADDR=192.168.100.66NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@dr1 ~]# service network restartRestarting network (via systemctl):                        [  确定  ][root@dr1 ~]# vim /etc/sysctl.conf#添加路由转发功能net.ipv4.ip_forward=1#proc响应关闭重定向功能net.ipv4.conf.all.send_redirects=0net.ipv4.conf.default.send_redirects=0net.ipv4.conf.ens33.send_redirects=0#生效路由转发功能[root@dr1 ~]# sysctl -p             

3、构建虚拟网卡

[root@dr1 ~]# cd /etc/sysconfig/network-scripts/[root@dr1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0[root@dr1 network-scripts]# vim ifcfg-ens33:0#删除原有内容DEVICE=ens33:0ONBOOT=yesIPADDR=192.168.100.100NETWASK=255.255.255.0  #启用虚拟网卡[root@dr1 network-scripts]# ifup ens33:0     

4、添加服务启动脚本

[root@dr1 ~]# cd /etc/init.d/[root@dr1 init.d]# vim dr.sh#!/bin/bashGW=192.168.100.1VIP=192.168.100.100RIP1=192.168.100.88RIP2=192.168.100.99case "$1" instart)        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm        systemctl start ipvsadm        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up        /sbin/route add -host $VIP dev ens33:0        /sbin/ipvsadm -A -t $VIP:80 -s rr        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g        echo "ipvsadm starting------------------[ok]"        ;;        stop)        /sbin/ipvsadm -C        systemctl stop ipvsadm        ifconfig ens33:0 down        route del $VIP        echo "ipvsamd stoped--------------------[ok]"        ;;        status)        if [ ! -e ar/lock/subsys/ipvsadm ];then        echo "ipvsadm stoped--------------------"        exit 1                else                echo "ipvsamd Runing-------------[ok]"        fi        ;;        *)        echo "Usage: $0 {start|stop|status}"        exit 1        esac        exit 0#授予脚本执行权限          [root@dr1 init.d]# chmod +x dr.sh#启动脚本[root@dr1 init.d]# service dr.sh start#查看ipvsadm 状态[root@dr1 init.d]# systemctl status ipvsadm             #查看服务开启状态#关闭防火墙与安全功能[root@dr1 init.d]# systemctl stop firewalld.service[root@dr1 init.d]# setenforce 0

第二步配置centos7-2--DR2调度服务器

1.安装ipvsdam、keepalived软件包

[root@dr2 ~]# yum install ipvsdam keepalived -y

2.修改网卡模式为仅主机并固定IP:192.168.100.77

[root@dr2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33BOOTPROTO=staticIPADDR=192.168.100.77NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@dr2 ~]# service network restartRestarting network (via systemctl):                        [  确定  ][root@dr2 ~]# vim /etc/sysctl.conf#添加路由转发功能net.ipv4.ip_forward=1#proc响应关闭重定向功能net.ipv4.conf.all.send_redirects=0net.ipv4.conf.default.send_redirects=0net.ipv4.conf.ens33.send_redirects=0#生效路由转发功能[root@dr1 ~]# sysctl -p            

3、构建虚拟网卡

[root@dr1 ~]# cd /etc/sysconfig/network-scripts/[root@dr1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0[root@dr1 network-scripts]# vim ifcfg-ens33:0#删除原有内容DEVICE=ens33:0ONBOOT=yesIPADDR=192.168.100.100NETWASK=255.255.255.0#启用虚拟网卡[root@dr2 ~]# ifup ens33:0        

4、添加服务启动脚本

[root@dr2 ~]# cd /etc/init.d/[root@dr2 ~]# vim dr.sh#!/bin/bashGW=192.168.100.1VIP=192.168.100.100RIP1=192.168.100.88RIP2=192.168.100.99case "$1" instart)        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm        systemctl start ipvsadm        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up        /sbin/route add -host $VIP dev ens33:0        /sbin/ipvsadm -A -t $VIP:80 -s rr        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g        echo "ipvsadm starting------------------[ok]"        ;;        stop)        /sbin/ipvsadm -C        systemctl stop ipvsadm        ifconfig ens33:0 down        route del $VIP        echo "ipvsamd stoped--------------------[ok]"        ;;stop)       /sbin/ipvsadm -C        systemctl stop ipvsadm        ifconfig ens33:0 down        route del $VIP        echo "ipvsamd stoped--------------------[ok]"        ;;        status)        if [ ! -e ar/lock/subsys/ipvsadm ];then        echo "ipvsadm stoped--------------------"        exit 1                else                echo "ipvsamd Runing-------------[ok]"        fi        ;;        *)        echo "Usage: $0 {start|stop|status}"        exit 1        esac        exit 0[root@dr2 ~]# chmod +x dr.sh[root@dr2 ~]# service dr.sh start[root@dr2 ~]# systemctl status ipvsadm             #查看服务开启状态[root@dr2 ~]# systemctl stop firewalld.service[root@dr2 ~]# setenforce 0

第三步配置centos7-3--web1节点服务器

1.安装httpd软件包

[root@web-1 ~]# yum install httpd -y

2.修改网卡模式:仅主机并固定IP:192.168.100.88

[root@web-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33BOOTPROTO=staticIPADDR=192.168.100.88NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@web-1 ~]# service network restart                    #重启网卡[root@web-1 ~]# systemctl stop firewalld.service        #关闭防火墙[root@web-1 ~]# setenforce 0[root@web-1 ~]# systemctl start httpd.service       #启动网站服务

3.创建网站首页

[root@web-1 ~]# cd /var/www/html/[root@web-1 ~]# echo "this is accp web" > index.html

4.创建虚拟网卡

[root@web-1 ~]# cd /etc/sysconfig/network-scripts/[root@web-1 ~]# cp ifcfg-lo ifcfg-lo:0[root@web-1 ~]# vim ifcfg-lo:0#删除原来所有信息,添加以下内容:DEVICE=Lo:0IPADDR=192.168.100.100NETMASK=255.255.255.0ONBOOT=yes

5.编写服务启动脚本

[root@web-1 ~]# cd /etc/init.d/[root@web-1 ~]# vim web.sh               #控制服务启动脚本#!/bin/bashVIP=192.168.100.100        case "$1" in        start)                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP                /sbin/route add -host $VIP dev lo:0        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce        sysctl -p > /dev/null 2>&1        echo "RealServer Start OK "        ;;        stop)                ifconfig lo:0 down                route del $VIP /dev/null 2>&1                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce                echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore                echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce    echo "RealServer Stoped"                ;;        *)                echo "Usage: $0 {start|stop}"                exit 1        esac        exit 0[root@web-1 ~]# chmod +x web.sh[root@web-1 ~]# service web.sh start[root@web-1 ~]# ifup lo:0      在web2节点服务器上查看IP,可以看到虚拟IP就说明没问题:ifconfigfirefox "http://127.0.0.1/" &         #直接访问网站[root@web-1 ~]# service web.sh stop[root@web-1 ~]# service web.sh start                #建议重启服务

第四步配置centos7-4--web2节点服务器

1.安装httpd软件包

[root@web-2 ~]# yum install httpd -y

2.调整网卡模式为仅主机并固定IP:192.168.100.99

[root@web-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33BOOTPROTO=staticIPADDR=192.168.100.99NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@web-2 ~]# service network restart                    #重启网卡[root@web-2 ~]# systemctl stop firewalld.service        #关闭防火墙[root@web-2 ~]# setenforce 0[root@web-2 ~]# systemctl start httpd.service[root@web-2 ~]# systemctl status httpd.service[root@web-2 ~]# cd /var/www/html/[root@web-2 ~]# echo "this is benet web" > index.html[root@web-2 ~]# cd /etc/sysconfig/network-scripts/[root@web-2 ~]# cp ifcfg-lo ifcfg-lo:0[root@web-2 ~]# vim ifcfg-lo:0DEVICE=Lo:0IPADDR=192.168.100.100NETMASK=255.255.255.0ONBOOT=yes[root@web-2 ~]# cd /etc/init.d/[root@web-2 ~]# vim web.sh               #控制服务启动脚本#!/bin/bashVIP=192.168.100.100        case "$1" in        start)                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP                /sbin/route add -host $VIP dev lo:0        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce        sysctl -p > /dev/null 2>&1        echo "RealServer Start OK "        ;;        stop)                ifconfig lo:0 down                route del $VIP /dev/null 2>&1                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce                echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore                echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce    echo "RealServer Stoped"                ;;        *)                echo "Usage: $0 {start|stop}"                exit 1        esac        exit 0[root@web-2 ~]# chmod +x web.sh[root@web-2 ~]# service web.sh start#开启虚拟网卡[root@web-2 ~]# ifup lo:0      firefox "http://127.0.0.1/" &         #直接访问网站#关闭并重启服务[root@web-2 ~]# service web.sh stop[root@web-2 ~]# service web.sh start      

第五步:使用Win7客户端测试

1.使用win7,调整网卡为仅主机模式

2.使用客户机尝试联通服务器

C:\Users\czt>ping 192.168.100.100正在 Ping 192.168.100.100具有 32 字节的数据:来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64192.168.100.100 的 Ping 统计信息:    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位):    最短 = 0ms,最长 = 0ms,平均 = 0ms

3.使用客户机浏览网页,输入http://192.168.100.100/


第六步:keepalived部署(两台调度服务器上配置一样)

[root@dr1 ~]# cd /etc/keepalived/[root@dr1 ~]# vim keepalived.confglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 127.0.0.1                         #指向本地   smtp_connect_timeout 30   router_id LVS_01                    #指定名称,备份服务器不同名称,另一台为02   vrrp_skip_check_adv_addr   vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}vrrp_instance VI_1 {    state MASTER                     #备份服务器将MASTER换为BACKUP      interface eth0    virtual_router_id 10              #组号相同    priority 100                          #优先级,备小于主    advert_int 1    authentication {        auth_type PASS        auth_pass abc123              #验证密码    }    virtual_ipaddress {        192.168.100.100               #虚拟IP    }}virtual_server 192.168.100.100 80 {          #虚拟IP及端口号    delay_loop 6    lb_algo rr    lb_kind DR                   #改为DR    persistence_timeout 50    protocol TCP    real_server 192.168.100.88 80 {              #节点服务器1        weight 1        TCP_CHECK {            connect_port 80            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }    real_server 192.168.100.99 80 {              #节点服务器2        weight 1        TCP_CHECK {                     #修改为TCP_CHECK            connect_port 80              #添加端口            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}#启动keepalived服务[root@dr1 ~]# systemctl start keepalived.service

第七步:使用客户端测试

1.模拟down掉一台调度服务器

[root@dr1 init.d]# ifdown ens33:0

2.在win7上尝试互联服务器,如果在win7上还能ping通,就说明另一台调度服务器已经接替并开始工作

C:\Users\czt>ping 192.168.100.100正在 Ping 192.168.100.66 具有 32 字节的数据:来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64192.168.100.100 的 Ping 统计信息:    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位):    最短 = 0ms,最长 = 0ms,平均 = 0ms

至此,实验已验证成功!

谢谢阅读!!!

0