在这个高度信息化的IT时代,企业的生产系统、业务运营、销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,对高可用(HA)技术的应用需求不断提高,以便提供持续的、不间断的计算机系统或网络服务。
Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。
Keepalived的官方网站:http://www.keepalived.org/ 虽然说主要是用于LVS群集环境,但是在非LVS群集环境中,也可以作为热备软件使用。
Keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一个路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(根据优先级)虚拟IP地址,以继续提供服务。
VRRP(虚拟路由冗余协议)和HSRP(热备份路由协议)原理几乎一样,只不过VRRP是公有协议;HSRP是Cisco的私有协议。对于VRRP(虚拟路由冗余协议)原理不太明白,可以参考博文:HSRP(热备份路由协议)详解 博文中有详细的解释。
热备组内的每台路由器都可能称为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址,如图:
使用Keepalived时,漂移地址的实现不需要手动建立虚接口配置文件(比如:ens33:0);而是由Keepalived根据配置文件自动管理的。
安装Keepalived服务特别简单,Centos 7系统盘中都有相应的软件包,通过YUM安装即可!除此之外,在LVS群集环境中应用时,也需要用到ipvsadm管理工具(查看负载分配情况时使用)。
[root@localhost ~]# yum -y install keepalived ipvsadm
//安装Keepalived和ipvsadm
[root@localhost ~]# systemctl start keepalived
//启动Keepalived服务
基于VRRP的热备方式,Keepalived可以用作服务器的故障切换,每个热备组可以有多台服务器——当然,最常用的应该就是双机热备了。在这种双机热备方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(比如:Web、FTP、Mail、SSH、DNS等)。
通过一个示例来了解Keepalived双机热备的配置方法,如图:
主、备服务器中都需要安装Keepalived。(httpd服务最好也都安上,用于测试!)详细步骤如下:
Keepalived服务的配置文件是/etc/keepalived//keepalived.conf。具体操作如下:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install keepalived ipvsadm httpd
//安装相应的服务、关闭防火墙和SELinux
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
//编辑Keepalived服务的配置文件
global_defs {
notification_email {
[email protected] //收件人地址
}
notification_email_from root [email protected] //发件人姓名、地址
smtp_server 127.0.0.1
smtp_connect_timeout 30 //以上信息是关于发送邮件的内容,根据实际情况填写就好
router_id HA_TEST_R1 //本路由器(服务器)的名称
}
vrrp_instance VI_1 { //定义VRRP热备实例
state MASTER //热备状态,MASTER表示为主服务器
interface ens33 //承载VIP的物理网卡接口
virtual_router_id 1 //虚拟路由器的ID,每个热备组保持一致
priority 100 //优先级100,数值越大优先级越高(最大255)
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //认证信息,每个热备组要保持一致
auth_type PASS //认证类型
auth_pass 1111 //密码字串
}
virtual_ipaddress {
192.168.1.254 //指定漂移地址(VIP),可以有多个(但必须跟物理接口是同网段的)
}
}
确认配置信息没有错误后,启动Keepalived服务。实际状态为MASTER的主服务器将为ens33接口自动添加VIP地址,通过ip命令查看(ifconfig命令看不到)。
[root@localhost ~]# systemctl restart keepalived
//重启服务
[root@localhost ~]# ip addr show dev ens33
//查看漂移IP地址是否存在
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:00:11:89 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.1.254/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::c4bc:2e5a:89b:8729/64 scope link
valid_lft forever preferred_lft foreve
[root@localhost ~]# echo “aaaaaaaaa” > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
//修改httpd服务的主页文件,用于测试!
在同一个Keepalived热备组内,所有服务器的Keepalived配置文件基本相同,包括虚拟路由器的ID、认证信息、漂移地址、心跳频率等(必须一样);不同之处主要在于路由器名称、热备状态、优先级。
- 路由器名称:建议为每个参与热备的服务器指定不同的名称;
- 热备状态:至少应有一个主服务器,将状态设置为MASTER;可以有多台备用服务器,将状态设置为BACKUP;
- 优先级:数值越大则会取得VIP控制权的优先级越高,因此主服务器的优先级应为热备组中的最高;其他备用服务器的优先级可依次递减,但不要相同,以免争夺VIP控制权时发生冲突;
配置备用服务器(可以有多台)时,可参考主服务器的keepa.conf配置文件内容,只需修改路由器名称、热备状态、优先级即可!如下:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install keepalived ipvsadm httpd
//安装相应的服务、关闭防火墙和SELinux
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
//编辑Keepalived服务的配置文件
global_defs {
notification_email {
[email protected]
}
notification_email_from root [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id HA_TEST_R2 //本路由器(服务器)名称(修改)
}
vrrp_instance VI_1 {
state BACKUP //热备状态,BACKUP表示备用服务器(修改)
interface ens33
virtual_router_id 1
priority 99 //优先级(修改)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.254
}
}
确认配置无误,启动Keepalived服务,此时主服务器在线。VIP仍然由主服务器控制,而其他服务器处于备用状态。
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# ip addr show ens33
//启动Keepalived服务、确认VIP地址(没有VIP地址)
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:2b:56:b5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::aa26:7be4:3379:130f/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# echo "qqqqqqqqqqq" > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
//启动http服务,设置不一样的主页(用于测试!)
在客户机上执行“ping -t 192.168.1.254”(VIP地址),能够正常通信,持续测试!
[root@localhost ~]# systemctl stop keepalived
//主服务器故意停止Keepalived服务
查看客户机测试效果,如图:
切换时客户机会有延迟,也可能丢一两个包。
[root@localhost ~]# ip addr show ens33
//备用服务器查看VIP地址(发现VIP已经自动转移到备用服务器上)
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:2b:56:b5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.1.254/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::aa26:7be4:3379:130f/64 scope link
valid_lft forever preferred_lft forever
客户机访问测试,如图:
当原来优先级为100的服务器开启Keepalived服务时,客户机再次访问,将会改变网页内容。
[root@localhost ~]# systemctl start keepalived
//主服务器启动Keepalived服务
客户机访问测试,如图:
也可查看系统日志(/var/log/messages),来获取详细信息!
通过Keepalived服务搭建的是高可用群集,跟通过LVS搭建的负载均衡群集,不一样。关于群集类型的信息介绍可以参考博文:LVS负载均衡群集详解
———————— 本文至此结束,感谢阅读 ————————