概述
目录
keepalived双机热备基础知识
keepalived概述及安装
使用keepalived实现双机热备
主服务器的配置
备用服务器的配置
测试双机热备功能
LVS+Keepalived高可用群集
实验准备
配置主调度器
配置备调度器
配置web
测试负载均衡功能
搭建NFS服务器
测试负载均衡功能
本章将实现如何使用keepalived实现双机热备,包括针对IP地址的故障切换,以及在LVS高可用群集中的热备应用。
keepalived双机热备基础知识
keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。
keepalived概述及安装
keepalived的官方网站位于Keepalived for Linux。在非LVS群集环境中使用时,keepalived也可以作为热备份软件使用。
-
keepalived的热备方式
keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。
一主 + 多备,共用同一个IP地址,但优先级不同。
热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件(如 ens33:0),而是由keepalived根据配置文件自动管理。
-
keepalived的安装与服务控制
(1)安装keepalived
在安装方式中选择YUM安装,会自动安装keepalived所需的软件包,除此之外,在LVS群集环境中也会用到ipvsadm管理工具。
[root@localhost ~]# yum -y install keepalived ipvsadm
(2)控制keepalived服务
[root@localhost ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
使用keepalived实现双机热备
主、备服务器中都需要安装keepalived。
主服务器的配置
keepalived服务的配置目录位于/etc/keepalived/。其中,keepalived.conf是主配置文件;另外包括一个子目录samples/,提供了许多配置样例作为参考。在keepalived的配置文件中,使用“global_defs {...}”区段指定全局参数,使用“vrrp_instance 实例名称 {...}”区段指定VRRP热备参数,注释文字以“!”符号开头。
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak //备份主配文件
[root@localhost keepalived]# vim keepalived.conf
global_defs {
......//省略部分内容
router_id LVS_DEVEL //路由器(服务器)名称(建议指定不同的名称区分路由)
}
vrrp_instance VI_1 { //定义VRRP热备实例
state MASTER //热备状态,MASTER表示主服务器
interface ens33 //承载VIP地址的物理接口
virtual_router_id 51 //虚拟路由器的ID号,每个热备组保持一致
priority 100 //优先级,数值越大优先级越高
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //认证信息,每个热备组保持一致
auth_type PASS //认证类型
auth_pass 1111 //密码字串
}
virtual_ipaddress { //指定漂移地址(VIP),可以是多个
200.0.0.100
}
}
确认上述配置无误,然后启动keepalived服务。实际状态为MASTER的主服务器将为ens33接口自动添加VIP地址,通过IP命令可以查看(注意:ifconfig命令看不到)。
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip a show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:af:af:9d brd ff:ff:ff:ff:ff:ff
inet 200.0.0.1/24 brd 200.0.0.255 scope global ens33
valid_lft forever preferred_lft forever
inet 200.0.0.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::5f65:9c3d:d218:7cea/64 scope link
valid_lft forever preferred_lft forever
备用服务器的配置
在同一个keepalived热备组内,所有服务器的keepalived配置文件基本相同,包括虚拟路由器的ID号、认证信息、漂移地址、心跳频率等。不同之处主要在于路由器名称、热备状态、优先级。
- 路由器名称(router_id):建议为每个参与热备的服务器指定不同的名称。
- 热备状态(state):至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP。
- 优先级(proiority):数值越大则取得VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突。
配置备用服务器(可以有多台)时,可以参考主服务器的keepalived.conf配置文件内容,只要修改路由器名称、热备状态、优先级就可以了。
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
global_defs {
......//省略部分内容
router_id LVS_DEVEL2 //修改备份路由名称
}
vrrp_instance VI_1 {
state BACKUP //修改热备状态(备份)
interface ens33 //修改承载VIP地址的物理接口
virtual_router_id 51
priority 90 //优先级,数值应低于主服务器
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
200.0.0.100 //漂移地址
}
}
确认配置无误,一样需要启动keepalived服务。此时主服务器仍然在线,VIP地址实际上任然由主服务器控制,其他服务器处于备份状态,因此在备份服务器中将不会为ens33接口添加VIP地址。
[root@localhost keepalived]# ip a show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:3c:d0:8b brd ff:ff:ff:ff:ff:ff
inet 200.0.0.2/24 brd 200.0.0.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::595f:84d:a379:7b6e/64 scope link
valid_lft forever preferred_lft forever
测试双机热备功能
keepalived的日志消息保存在/var/log/messages文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。
-
连通性测试
客户机中执行"ping -t 200.0.0.10"命令,能够正常、持续ping通,根据一下操作继续观察测试结果。
- 停止主服务器的keepalived服务,发现ping测试只中断了1或2个包即恢复正常,说明已有其他服务器接替VIP地址,并及时响应客户机请求。
- 启动主服务器的keepalived服务,发现ping测试只中断了1或2个包即恢复正常,说明主服务器已回复正常,并夺回VIP地址的控制权。
-
查看日志记录
在执行主、备服务器故障切换时的过程中,分别观察各自的/var/log/messages日志文件,可以看到MASTER、SLAVE状态的迁移记录。
通过上述测试过程,可以发现双机热备已经正常。客户机只要通过VIP地址就可以访问服务器所提供的Web等应用,其中任何一台服务器失效,另一台服务器将会立即接替服务,从而实现高可用性。实际应用中,注意主、备服务器所提供的Web服务内容要保持一致。
LVS+Keepalived高可用群集
keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。使用keepalived构建LVS群集更加简便易用,主要有事体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后在重新加入。
实验准备
根据下图配置IP,关闭防火墙,实现keepalived+LVS-DR高可用的负载均衡web群集。
配置主调度器
-
安装ipvsadm和keepalived包。
[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
-
修改内核参数文件,关闭ICMP重定向。
[root@localhost ~]# vim /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 ~]# sysctl -p //设置参数立即生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
-
keepalived.conf配置
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
......//省略部分内容
router_id R1 //修改名称
}
vrrp_instance VI_1 {
state MASTER //配置热备状态
interface ens33 //设置承载VIP的物理接口
virtual_router_id 51
priority 100 //主服务器优先级设为100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
200.0.0.100 //设置群集VIP地址
}
}
virtual_server 200.0.0.100 80 { //配置虚拟服务器地址(VIP)、端口
delay_loop 15 //配置健康检查的间隔时间(秒)
lb_algo rr
lb_kind DR //配置直接路由模式
nat_mask 255.255.255.0
! persistence_timeout 50 //连接保持时间(秒),若启用去掉!号
protocol TCP
real_server 200.0.0.3 80 { //第一个web节点的地址、端口
weight 1
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 200.0.0.4 80 { //第二个web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# systemctl enable keepalived
配置备调度器
-
安装ipvsadm和keepalived包。
[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
-
修改内核参数文件,关闭ICMP重定向。
[root@localhost ~]# vim /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 ~]# sysctl -p //设置参数立即生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
-
keepalived.conf配置
备份调度器的配置和主调度器的配置基本相同,重点需要修改的有路由器名称、热备状态、优先级。
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
......//省略部分内容
router_id R2 //修改名称
}
vrrp_instance VI_1 {
state BACKUP //配置热备状态
interface ens33 //设置承载VIP的物理接口
virtual_router_id 51
priority 90 //备调度器优先级设为90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
200.0.0.100 //设置群集VIP地址
}
}
virtual_server 200.0.0.100 80 { //配置虚拟服务器地址(VIP)、端口
delay_loop 15 //配置健康检查的间隔时间(秒)
lb_algo rr
lb_kind DR //配置直接路由模式
nat_mask 255.255.255.0
! persistence_timeout 50 //连接保持时间(秒),若启用去掉!号
protocol TCP
real_server 200.0.0.3 80 { //第一个web节点的地址、端口
weight 1
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 200.0.0.4 80 { //第二个web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# systemctl enable keepalived
配置web
-
配置ifcfg-lo:0群集IP。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=200.0.0.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 200.0.0.100 netmask 255.255.255.255
loop txqueuelen 1 (Local Loopback)
-
修改内核文件,关闭ARP应答。
[root@localhost ~]# 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@localhost ~]# sysctl -p
-
添加一条VIP本地访问路由。
[root@localhost ~]# vim /etc/rc.local
/sbin/route add -host 200.0.0.100 dev lo:0
[root@localhost ~]# route add -host 200.0.0.100 dev lo:0
-
启动httpd服务,创建测试网页。
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo 1111111 > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
web2配置和web1相同,重复操作即可,测试网页可以改成222222用来区分web1和2。
测试负载均衡功能
客户机访问200.0.0.100,断开主调度器的网卡,再次访问查看是否正常
搭建NFS服务器
在nfs主机配置共享存储服务器,提供给两台web服务器的后台网页存储。详情参考LVS。LVS负载均衡群集_大虾好吃吗的博客-CSDN博客LVS(Linux Virtual Server,Linux虚拟服务器)https://blog.csdn.net/qq_61116007/article/details/125894261
-
启动nfs-utils、rpcbind软件包
[root@localhost ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@localhost ~]# systemctl enable rpcbind
-
设置共享目录
[root@localhost ~]# mkdir -p /opt/wwwroot
[root@localhost ~]# vim /etc/exports
/opt/wwwroot 200.0.0.0/24(rw,sync,no_root_squash)
-
启动服务并查看本机发布的NFS共享目录。
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/wwwroot 200.0.0.0/24
[root@localhost ~]# echo 666 > /opt/wwwroot/index.html
-
两台web挂载共享目录
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# mount 200.0.0.5:/opt/wwwroot /var/www/html
测试负载均衡功能
客户机访问200.0.0.100,查看网页是否为共享内容。
关闭主调度器和web1的网卡,访问网页是否依然为共享内容,访问成功,实验完成。
最后
以上就是爱笑铃铛为你收集整理的keepalived双机热备keepalived双机热备基础知识使用keepalived实现双机热备LVS+Keepalived高可用群集的全部内容,希望文章能够帮你解决keepalived双机热备keepalived双机热备基础知识使用keepalived实现双机热备LVS+Keepalived高可用群集所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复