LVS——Keepalived群集理论知识+高可用实验部署(抓包论证和排障)

理解Keepalived实现原理

案件分析

在企业应用中,单台服务器承担应用存在单点故障的危险
在企业应用集群中,存在了至少两处单点故障危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害

在这里插入图片描述
上面拓扑图中,可以看到,在DR群集中,如果调度器down掉,那么整个群集无法正常使用

Keepalived工具介绍

支持故障自动切换(Failover)

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

官方网站:http://www.keepalived.org/

实现原理剖析

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

VRRP ,虚拟路由冗余协议,是针对路由器的一种备份解决方案

1、由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
2、每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态
3、若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

在这里插入图片描述

解决问题拓扑图

在这里插入图片描述

Keepalived配置文件解析

1.漂移地址: 192.168.100.88
主、备服务器: 192.168.100.22、192.168.100.23
提供的应用服务: Web

#########################################################################

2、配置文件keepalived.conf
全局设置: global_defs { … }
热备设置: vrrp_instance 实例名称 { … }
样例文件位于: /etc/keepalived/samples/…

#####################################################################

3、主服务器配置
state: 设置本节点状态,MASTER、BACKUP
priority: 设置竞选优先级,数值越大优先级越高
virtual_ipaddress { … }: 设置漂移IP地址

########################################################################

4、备用服务器配置
router_id设为自有名称
state设为BACKUP
priority值低于主服务器

#########################################################################

5、启用keepalived服务
主、备机中均启用keepalived服务
其中优先级最高的设备将获得VIP的控制权
VIP地址会由keepalived自动设置

高可用LVS+Keepalived部署

网络环境

IP地址规划:

漂移地址(VIP): 192.168.100.88
主调度器: 192.168.100.22 网关: 192.168.100.1
辅调度器: 192.168.100.23 网关: 192.168.100.1
WEB服务器1: 192.168.100.24 网关: 192.168.100.1
WEB服务器2: 192.168.100.25 网关: 192.168.100.1
存储服务器: 192.168.100.21 网关: 192.168.100.1
实验环境
所有系统关闭防火墙,关闭核心防护
系统:Centos7.6

配置主调度器 192.168.100.22

#【1】调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

##生效
[root@localhost network-scripts]# sysctl -p     
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0  
      
#【2】清除负载分配策略
[root@localhost /]# ipvsadm -C

#【3】调整keepalived参数
[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# cd /etc/keepalived/

#备份原配置文件
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vi keepalived.conf

global_defs {
    
    
   router_id HA_TEST_R1
}
vrrp_instance VI_1 {
    
    
   state MASTER
   interface ens33
   virtual_router_id 1
   priority 100
   advert_int 1
   authentication {
    
    
      auth_type PASS
      auth_pass 123456
   }
   virtual_ipaddress {
    
    
      192.168.100.88
   }
}

virtual_server 192.168.100.88 80 {
    
    
    delay_loop 15
    lb_algo rr
    lb_kind DR
    persistence 60
    protocol TCP

    real_server 192.168.100.24 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
    real_server 192.168.100.25 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}
####启动keepalived
[root@localhost keepalived]# systemctl start keepalived      

####开机启动keepalived
[root@localhost keepalived]# systemctl enable keepalived       

####查看主控制IP地址和漂移地址          
[root@localhost keepalived]# ip addr show dev ens33
             
inet 192.168.100.22/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.100.88/32 scope global ens33

配置辅调度器 192.168.100.23

1】调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

#生效
[root@localhost network-scripts]# sysctl -p  
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 02】清除负载分配策略
[root@localhost /]# ipvsadm -C


【3】调整keepalived参数
[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vi keepalived.conf
global_defs {
    
    
   router_id HA_TEST_R2
}
vrrp_instance VI_1 {
    
    
   state BACKUP
   interface ens33
   virtual_router_id 1
   priority 99
   advert_int 1
   authentication {
    
    
      auth_type PASS
      auth_pass 123456
   }
   virtual_ipaddress {
    
    
      192.168.100.88
   }
}

virtual_server 192.168.100.88 80 {
    
    
    delay_loop 15
    lb_algo rr
    lb_kind DR
    persistence 60
    protocol TCP

    real_server 192.168.100.24 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
    real_server 192.168.100.25 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}

####启动keepalived
[root@localhost keepalived]# systemctl start keepalived 

####开机启动keepalived        
[root@localhost keepalived]# systemctl enable keepalived

####查看主控制IP地址和漂移地址,这里是没有虚拟192.168.100.88地址的
[root@localhost keepalived]# ip addr show dev ens33
 inet 192.168.100.23/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe44:b2a/64 scope link 
       valid_lft forever preferred_lft forever   

抓包看一下主/备调度器的VRRP

在这里插入图片描述
这里我们可以看到,现在192.168.100.22为主调度器

配置存储服务器:192.168.100.21

rpm -q nfs-utils    ###如果没装,yum -y install nfs-utils
rpm -q rpcbind      ###如果没装,yum -y install rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind

[root@localhost ~]# vi /etc/exports
/opt/51xit 192.168.100.0/24(rw,sync)
/opt/52xit 192.168.100.0/24(rw,sync)

[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# mkdir /opt/51xit /opt/52xit
[root@localhost ~]# echo "51是我" >/opt/51xit/index.html
[root@localhost ~]# echo "我是52" >/opt/52xit/index.html

配置节点服务器:192.168.100.24

1】配置虚拟IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.88
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.10  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

##这个相当于开机手动添加本地路由
[root@localhost network-scripts]# vi /etc/rc.local 
/sbin/route add -host 192.168.100.88 dev lo:0

##我们需要手动添加本地192.168.100.88的路由,不然本机虚拟IP不能访问
[root@localhost network-scripts]# route add -host 192.168.100.88 dev lo:02】调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p

【2】安装httpd 挂载测试页
[root@localhost ~]# showmount -e 192.168.100.21
Export list for 192.168.100.21:
/opt/51xit 192.168.100.0/24
/opt/52xit 192.168.100.0/24

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.21:/opt/51xit /var/www/html/

##永久挂载
[root@localhost ~]# vi /etc/fstab 
192.168.100.21:/opt/51xit/ /var/www/html/        nfs     rw,tcp,intr     0 1      

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd

#关机重启看一下服务是否会掉
[root@localhost ~]# init6 


##重启好以后,用笔记本的浏览器访问一下是否正常

配置节点服务器:192.168.100.25

1】配置虚拟IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.88
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# ifconfig

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.88  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@localhost network-scripts]# vi /etc/rc.local 
/sbin/route add -host 192.168.100.88 dev lo:0

[root@localhost network-scripts]# route add -host 192.168.100.88 dev lo:02】调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p


【3】安装httpd 挂载测试页
[root@localhost ~]# showmount -e 192.168.100.21 
Export list for 192.168.100.21:
/opt/51xit 192.168.100.0/24
/opt/52xit 192.168.100.0/24

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.21:/opt/52xit /var/www/html/
[root@localhost ~]# vi /etc/fstab 
192.168.100.21:/opt/52xit/ /var/www/html/        nfs     rw,tcp,intr     0 1     

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd

###登录192.168.100.43测试网站是否正常####

验证结果

(1)首先用笔记本浏览器访问192.168.100.88看一下是否轮询:以下为正确结果

在这里插入图片描述
清除浏览器历史记录,关闭再重新打开访问88
在这里插入图片描述

(2)抓包查看谁是主调度器,只需要看谁发VRRP报文即可:以下为正确结果

在这里插入图片描述
这个时候 stop主调度器的Keepalived服务,查看是否自动切换为192.168.100.23备调度器
在这里插入图片描述

(3)再次查看备调度器是否能够轮询:以下为正确结果

在这里插入图片描述
清除浏览器历史记录,关闭再重新打开访问88
在这里插入图片描述

(4)打开笔记本CMD查看192.168.100.88的MAC地址

注意:此时我们在备调度器上,MAC地址应该是备调度器
在这里插入图片描述
在这里插入图片描述
可以看到是192.168.100.23主机的MAC地址,虚拟地址也在,没有问题

(5)CMD一直ping88,stop备调度器Keepalived服务看MAC地址是否切换

在这里插入图片描述
这个超时属于正常现象,因为切换需要时间,掉包正常
在这里插入图片描述
在这里插入图片描述
MAC地址切换成功,虚拟地址切换成功,实验成功

报错集与排障

#(1)如果你之前配置了错误的ipvsadm,重启Keepalived后任然不能生效:
解决:[root@localhost /]# ipvsadm -C

#(2)如果你重启了WEB1或者WEB2的network,那么你的本地192.168.100.88路由也会消失
解决:
手动添加:route add -host 192.168.100.10 dev lo:0

#(3)任何服务搭建完毕后,都应该init6重启,因为生产环境上线的机器是不能重启的
#以后一旦服务器挂掉,开启后服务不能正常运行,你再去排错,还能记得吗?

猜你喜欢

转载自blog.csdn.net/weixin_48190891/article/details/108780760