本文主要是介绍七章——Keepalived双机热备(应用——linux防护与群集),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
三期总目录链接
目录
一、Keepalived双机热备
(一)Keepalived概述
(二)Keepalived实现双机热备
1、主服务器配置
2、备用服务器
3、验证
二、LVS+Keepalived高可用群集
1、ip分配
2、在上次实验中进行修改(c-12主调度器)
3、c-13备用调度器
4、web1服务器
5、web2服务器同上面步骤
6、测试lvs+Keepalived高可用集群
问题:遇到漂移地址在slave上,但开启master服务器也没有回到master服务器
复习题
一、Keepalived双机热备
Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。
(一)Keepalived概述
Keepalived的热备方式
Keepalived:采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)以软件方式实现Linux服务器的多机热备功能
VRRP:是针对路由器的一种备份解决方案:一主 + 多备 共用同一个IP地址,但优先级不同(优先级决定接替顺序),其他路由器处于冗余状态;如使用多台备用服务器,state均设为BACKUP,但各自的优先级priority不要相同
热备组内每台都有可能成为主路由,虚拟路由器的ip地址(VIP)可以在热备组内的路由器之间进行转移,也被称为:漂移ip地址,漂移地址不需要手动建立虚拟接口配置文件
(二)Keepalived实现双机热备
VRRP的热备方式,Keepalived可以用做服务器故障切换,常用于双机热备,在双机热备的方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(如:web、ftp、fail、还是ssh、dns等)
案例:
主服务器地址:192.168.1.12/24 网关地址192.168.1.12
备用服务器地址:192.168.1.13/24 网关地址192.168.1.12
漂移集群vip地址:192.168.1.87/24
1、主服务器配置
网卡配置(略)防火墙关闭(略)selinux关闭(略)
Keepalived 服务的配置目录位于/etc/keepalived/
keepalived.conf:主配置文件
另外包括一个子目录samples/,提供了许多配置样例作为参考。
在配置文件中,使用 global_defs{...} 区段指定全局参数,使用 vrp_instancc 实例名称 区段指定VRRP热备参数
[root@C-12 ~]# yum -y install keepalived ipvsadm httpd #安装
......
...
[root@C-12 ~]# systemctl enable keepalived #设置为开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@C-12 ~]# vim /var/www/html/index.html<h1>192.168.1.12今天星期日休息<h1/>
[root@C-12 ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #修改配置文件名称进行备份
[root@C-12 ~]# vim /etc/keepalived/keepalived.conf #新建配置文件global_defs {router_id HA_TEST_R1 #本路由器的名称
}vrrp_instance VI_1 { #定义VRRP热备实例state MASTER #MASTER表示主服务器interface ens33 #承载VIP地址的物理接口virtual_router_id 1 #虚拟路由器的ID号,每个热备组保持一致priority 100 #优先级,数值越大优先级越高advert_int 1 #通告间隔秒数(心跳频率)authentication { #认证信息,每个热备组保持一致auth_type PASS #认证类型auth_pass 123.com #密码字串}virtual_ipaddress {192.168.1.87 #指定漂移地址(VIP)可以有多个}
}
[root@C-12 ~]# systemctl start keepalived #启动
[root@C-12 ~]# systemctl start httpd #启动
[root@C-12 ~]# ip addr show dev ens33 #使用ip命令进行查看
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:20:f8:34 brd ff:ff:ff:ff:ff:ffinet 192.168.1.12/24 brd 192.168.1.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.1.87/32 scope global ens33 #自动设置的VIP地址
2、备用服务器
在同一个Keepalived热备组内,所有配置文件基本相同,包括虚拟路由器的ID号、认证信息、漂移地址、心跳频率等。不同之处在于路由器名称,热备状态、优先级
路由器名称(router_id):建议为每个参与热备的服务器指定不同的名称
热备状态(state):至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP
优先级(priority):数值越大则取得 VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突
[root@C-13 ~]# yum -y install keepalived ipvasdm httpd
.......
...
[root@C-13 ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.[root@C-13 ~]# echo "<h1>192.168.1.13今天是阴天</h1>" >/var/www/html/index.html #测试首页
[root@C-13 ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@C-13 ~]# echo ' #编辑内容global_defs {router_id HA_TEST_R2 #修改本路由器名称}vrrp_instance VI_1 {state BACKUPinterface ens33 virtual_router_id 1 priority 90 #修改优先级advert_int 1 authentication { auth_type PASS auth_pass 123.com}virtual_ipaddress { 192.168.1.87}}' > /etc/keepalived/keepalived.conf[root@C-13 ~]# cat /etc/keepalived/keepalived.conf #查看global_defs {router_id HA_TEST_R2
}vrrp_instance VI_1 {state BACKUP interface ens33 virtual_router_id 1priority 90 advert_int 1 authentication { auth_type PASS auth_pass 123.com}virtual_ipaddress { 192.168.1.87}
}[root@C-13 ~]# ip addr show dev ens33 #查看
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ef:19:34 brd ff:ff:ff:ff:ff:ffinet 192.168.1.13/24 brd 192.168.1.255 scope global ens33valid_lft forever preferred_lft forever
配置没有错误后启动,这时候主服务器仍然在线,VIP地址实际上仍然由主服务器控制,其他服务器处于备用状态,因此备用服务器中不会为ens33接口添加VIP地址
3、验证
连通性测试 :停止 主服务器keepalived服务器,发现ping测试只中断1到2个包即恢复正常,说明已有其他服务器接替VIP地址及时响应客户机请求
C:\Users\wrzs0>ping -t 192.168.1.87正在 Ping 192.168.1.87 具有 32 字节的数据:
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间=1ms TTL=64
请求超时。
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间=1ms TTL=64
请求超时。
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.87 的回复: 字节=32 时间<1ms TTL=64
web访问测试:http://192.168.1.87 会看到主服务器192.168.1.12提供的网页
停止主服务器的keepalived服务器,再次访问web服务
systemctl stop keepalived
停止主服务后可以看到由备用服务器192.168.1.13提供的网页,说明VIP地址已切换至备用服务器
启动主服务
systemctl start keepalived
查看日志记录:/var/log/messages,可以看到MASTER,SLAVE状态的迁移记录
主服务器:关闭服务器后,移除VIP地址,恢复后重新变为MASTER
[root@C-12 ~]# less /var/log/messages
.......
...
Sep 5 18:22:01 C-12 Keepalived_vrrp[15399]: VRRP_Instance(VI_1) Transition to MASTER STATE #转换到主状态
Sep 5 18:22:02 C-12 Keepalived_vrrp[15399]: VRRP_Instance(VI_1) Entering MASTER STATE #进入主状态
Sep 5 18:22:02 C-12 Keepalived_vrrp[15399]: VRRP_Instance(VI_1) setting protocol VIPs. #设置VIP协议
备用服务器:状态切换为MASTER,等主服务器恢复后再交回控制器
[root@C-13 ~]# less /var/log/messages
......
....
Sep 5 18:04:39 C-13 Keepalived_vrrp[1939]: VRRP_Instance(VI_1) Received advert with higher priority 100, ours 90 #收到优先级更高的通知100,本服务器优先级90
Sep 5 18:04:39 C-13 Keepalived_vrrp[1939]: VRRP_Instance(VI_1) Entering BACKUP STATE #进入BACKUP STATE状态
Sep 5 18:04:39 C-13 Keepalived_vrrp[1939]: VRRP_Instance(VI_1) removing protocol VIPs. #删除VIP协议
Sep 5 18:13:57 C-13 Keepalived_vrrp[1939]: VRRP_Instance(VI_1) Transition to MASTER STATE #转换到主状态
Sep 5 18:13:58 C-13 Keepalived_vrrp[1939]: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 5 18:13:58 C-13 Keepalived_vrrp[1939]: VRRP_Instance(VI_1) setting protocol VIPs.
二、LVS+Keepalived高可用群集
Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。
使用Keepalived构建LVS群集更加简便易用,主要优势:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查自动移除失效节点,恢复后再重新加入
使用Keepalived来实现主、从调度器的热备,从而构建兼有负载均衡,高可用两种能力的LVS 网站群集平台
案例:
1、ip分配
ens33接口 | lo:0接口 | |
c-12主 | 192.168.1.12 | 无 |
c-13备 | 192.168.1.13 | 无 |
web1 | 192.168.1.9 | 192.168.1.87 |
web2 | 192.168.1.11 | 192.168.1.87 |
2、在上次实验中进行修改(c-12主调度器)
[root@C-12 ~]# systemctl stop httpd
[root@C-12 ~]# systemctl disable httpd
[root@C-12 ~]# yum -y remove httpd #卸载httpd
......
..
[root@C-12 ~]# netstat -anput | grep httpd
[root@C-12 ~]#[root@C-12 ~]# vim /etc/keepalived/keepalived.conf #进入配置文件global_defs {router_id HA_TEST_R1
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 1priority 100advert_int 1authentication {auth_type PASSauth_pass 123.com}virtual_ipaddress {192.168.1.87}
}virtual_server 192.168.1.87 80 { #虚拟服务器地址VIP、端口delay_loop 15 #健康检查间隔时间(秒)lb_algo rr #轮系(rr)调度算法lb_kind DR #直接路由(DR)群集工作模式protocol TCP #应用服务采用的TCP协议
real_server 192.168.1.9 80 { #第一个web服务节点ip地址、端口weight 1 #节点的权重TCP_CHECK { #健康检查方式connect_port 80 #检查的目标端口connect_timeout 3 #连接超时(秒)nb_get_retry 3 #重试次数delay_before_retry 4 #重试间隔(秒)}}
real_server 192.168.1.11 80 { #第二个web服务节点ip地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 4}}
}保存退出
[root@C-12 ~]# modprobe ip_vs #加载系统内核的服务模块
[root@C-12 ~]# lsmod | grep ip_vs #查看系统模块运行状态
ip_vs 141092 0
nf_conntrack 133387 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack[root@C-12 ~]# echo "modprobe ip_vs" >>/etc/rc.local #开机启动时加载ip_vs模块
[root@C-12 ~]# systemctl restart keepalived #重启服务
3、c-13备用调度器
[root@C-13 ~]# systemctl stop httpd
[root@C-13 ~]# systemctl disable httpd
[root@C-13 ~]# yum -y remove httpd
.......
....
[root@C-13 ~]# netstat -anput | grep httpd
[root@C-13 ~]#
[root@C-13 ~]# vim /etc/keepalived/keepalived.confglobal_defs {router_id HA_TEST_R2
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 1priority 90advert_int 1authentication {auth_type PASSauth_pass 123.com}virtual_ipaddress {192.168.1.87}
}virtual_server 192.168.1.87 80 {delay_loop 15lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.1.9 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 4}}real_server 192.168.1.11 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 4}}
}保存退出
[root@C-13 ~]# modprobe ip_vs
[root@C-13 ~]# lsmod | grep ip_vs
ip_vs 141092 0
nf_conntrack 133387 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack[root@C-13 ~]# echo "modprobe ip_vs" >>/etc/rc.local
[root@C-13 ~]# systemctl restart keepalived
4、web1服务器
[root@C-09 ~]# cd /etc/sysconfig/network-scripts/
[root@C-09 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@C-09 network-scripts]# vim ifcfg-lo:0DEVICE=lo:0
IPADDR=192.168.1.87
NETMASK=255.255.255.255
ONBOOT=yes保存退出[root@C-09 network-scripts]# systemctl restart network
[root@C-09 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.1.87/32 brd 192.168.1.87 scope global lo:0valid_lft forever preferred_lft forever[root@C-09 ~]# echo "route add -host 192.168.1.87 dev lo:0" >>/etc/rc.local
[root@C-09 ~]# route add -host 192.168.1.87 dev lo:0
[root@C-09 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.20 0.0.0.0 UG 100 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.1.87 0.0.0.0 255.255.255.255 UH 0 0 0 lo[root@C-09 ~]# vim /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@C-09 ~]# sysctl -p
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@C-09 ~]# yum -y install httpd
[root@C-09 ~]# echo "<h1>web1 192.168.1.9 999感冒灵</h1>" >/var/www/html/index.html
[root@C-09 ~]# systemctl start httpd
[root@C-09 ~]# netstat -anput | grep httpd
tcp6 0 0 :::80 :::* LISTEN 1459/httpd
5、web2服务器同上面步骤
6、测试lvs+Keepalived高可用集群
没有关闭主调度器 使用命令 ipvsadm -ln 查看负载分配情况
[root@C-12 ~]# ip a
........
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:20:f8:34 brd ff:ff:ff:ff:ff:ffinet 192.168.1.12/24 brd 192.168.1.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.1.87/32 scope global ens33[root@C-13 ~]# ip a
......
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ef:19:34 brd ff:ff:ff:ff:ff:ffinet 192.168.1.13/24 brd 192.168.1.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::30f8:ec67:f2c5:e4e4/64 scope link valid_lft forever preferred_lft forever
关闭主调度器,可以从调度器的/var/log/messages日志文件进行查看
[root@C-12 ~]# ip a
.......
..
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:20:f8:34 brd ff:ff:ff:ff:ff:ffinet 192.168.1.12/24 brd 192.168.1.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::f14f:51db:5266:8ff8/64 scope link valid_lft forever preferred_lft forever[root@C-13 ~]# ip a
......
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ef:19:34 brd ff:ff:ff:ff:ff:ffinet 192.168.1.13/24 brd 192.168.1.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.1.87/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::30f8:ec67:f2c5:e4e4/64 scope link valid_lft forever preferred_lft forever
问题:遇到漂移地址在slave上,但开启master服务器也没有回到master服务器
目录
方法一:把两个服务器全部关闭,先开启master服务器,再开启slave服务器
如上述方法没有效果那么使用下面的方法试一下
方法二:把两个服务器上的Keepalived卸载,重新安装一下配置一下配置文件
yum -y remove keepalived
复习题
1. 简述Keepalived的主要功能、应用场合
主要功能:提供提高可用性,故障切换和健康检查功能
应用场合:双机热备、LVS群集
2. 简述虚拟路由冗余协议的工作原理
工作原理 :由一台或多台路由器组成一个热备组,通过共用虚拟IP地址对外提供服务;每个热备组同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务
3. 在Keepalived的配置文件中,”vrrp_instance 实例名称 {…}”区段的作用是什么?
作用:指定VRRP热备参数
4. 使用Keepalived实现双机热备时,主、备服务器的配置存在哪些区别?
所有配置文件基本相同
区别在于:路由器名称,热备状态、优先级
5. 在Keepalived服务器上如何查看添加的VIP地址?
使用 ip a 命令可以查看
6. 当存在多台从调度器时优先级(priority)的配置规则是什么?
配置规则:数值越大取得VIP控制权的优先级越高
7. 在Keepalived的配置文件中,”virtual_server VIP 端口 { ... }”区段的作用是什么?
作用:配置虚拟服务器
8. 在Keepalived的配置文件中,通过什么配置项指定群集工作模式?
使用 lb_kind 工作模式 配置项进行指定 如:lb_kind DR
9. 在Keepalived的配置文件中real_server IP地址 {...}区段的作用是什么?
作用:配置真实服务器地址等参数
例:real_server 192.168.1.1:80 说明:web节点的地址:端口
10. 在Linux系统中执行”ipvsadm –ln”、”ipvsadm –lnc”等操作命令的作用是什么?
ipvsadm –ln:查看节点的状态负载分配情况
ipvsadm –lnc:查看当前ipvs模块中记录的连接
这篇关于七章——Keepalived双机热备(应用——linux防护与群集)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!