LVS+Keepalived群集
Keepalived
Keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
- 官方网站:http://www.keepalived.org/
Keepalived实现原理剖析
- Keepalived采用VRRP热备份协议,实现Linux服务器的多机热备份功能
- VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
- 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
- 每个热备组内同时只有一台主路由器提供服务,其它路由器处于冗余状态
- 若当前在线的路由器失效,则其它路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。
Keepalived讲解
- Keepalived可实现多机热备,每个热备组可有多台服务器
- 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
- 实现基于Web服务的双机热备
Keepalived安装与启动
- 在LVS群集环境中应用时,也需用到ipvsadm管理工具
- YUM安装Keepalived
- 启用Keepalived服务
配置Keepalived master服务器
- Keepalived配置目录位于/etc/keepalived
- keepalived.conf是主配置文件
- global_defs{…}区段指定全局参数
- vrrp_instance实例名称{…}区段指定VRRP热备参数
- 注释文字以“!”符号开头
- 目录samples,提供了许多配置样例作为参考
常用配置选项
- 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:通告间隔秒数(心跳频率)(1秒)
- auth_type PASS:认证类型
- auth_pass 123456:密码字串
- virtaul_ipaddress{vip}:指定漂移地址(VIP),可以有多个
配置Keepalived slave服务器
Keepalived备份服务器的配置与master的配置有三个选项不同
- router_id:设为自有名称
- state:设为BACKUP
- priority:值低于主服务器
其它选项与master相同
Keepalived双机热备效果测试
设备
192.168.1.13 lvs+keepalived virtual-ip 192.168.100.100
192.168.1.18 lvs02+keepalived virtual-ip 192.168.100.100
192.168.1.50 web1
192.168.1.15 web2
192.168.1.16 nfs
192.168.1.30 client
部署
在nfs上
查看软件安装包
[root@nfs ~]# rpm -qa | grep nfs
[root@nfs ~]# rpm -qa | grep rpcbind
创建网页web1 web2
编辑配置文件
[root@nfs ~]# vi /etc/exports
/web1 192.168.1.50/32 (ro)
/web2 192.168.1.15/32 (ro)
服务启动
在web1上配置
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# mount 192.168.1.16:/web1 /var/www/html
[root@web1 ~]# df -Th
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# curl http://localhost
编辑脚本,配置虚拟接口
[root@web1 ~]# vi web1.sh
[root@web1 ~]# chmod +x web1.sh
[root@web1 ~]# ./web1.sh
[root@web1 ~]# ifconfig 查看虚拟接口
[root@web1 ~]# route -n 查看增加的路由
生成虚拟接口,地址与ens33在同一网段
#!/bin/bash
# lvs web1
ifconfig lo:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up
route add -host 192.168.1.100 dev lo:0 #针对lo:0x虚拟接口生成一个路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null #配置生效并在屏幕中不显示输出
在web2上配置
[root@web2 ~]# yum -y install httpd
[root@web1 ~]# mount 192.168.1.16:/web2 /var/www/html
[root@web1 ~]# df -Th
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# curl http://localhost
编辑脚本,配置虚拟接口
[root@web1 ~]# vi web1.sh
[root@web1 ~]# chmod +x web1.sh
[root@web1 ~]# ./web1.sh
[root@web1 ~]# ifconfig 查看虚拟接口
[root@web1 ~]# route -n 查看增加的路由
生成虚拟接口,地址与ens33在同一网段
#!/bin/bash
# lvs web2
ifconfig lo:0 192.168.1.100 broadcast 192.168.1.200 netmask 255.255.255.255 up
route add -host 192.168.1.100 dev lo:0 # 针对lo:0x虚拟接口生成一个路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null #配置生效并在屏幕中不显示输出
在主lvs上配置
确认内核对LVS的支持
[root@lvs ~]# modprobe ip_vs #手动加载,对ip_vs的探测加载
[root@lvs ~]# cat /proc/net/ip_vs #查看基本信息
[root@lvs ~]# yum -y install ipvsadm #安装软件
先添加keepalived-2.0.13.tar.gz
安装依赖包
[root@lvs01 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
解压缩软件包
[root@lvs01 ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs01 ~]# cd keepalived-2.0.13/ #进入配置编译安装
[root@lvs01 keepalived-2.0.13]# ./configure --prefix=/ #配置
[root@lvs01 keepalived-2.0.13]# make && make install #编译安装
[root@lvs01 keepalived-2.0.13]# ls -lh
[root@lvs01 keepalived-2.0.13]# cd keepalived/
[root@lvs01 keepalived]# cd etc/init.d/
[root@lvs01 init.d]# cp keepalived /etc/init.d/ #复制文件
[root@lvs01 init.d]# cd
[root@lvs01 ~]# systemctl enable keepalived.service #设置开机自启动
编辑配置文件
[root@lvs ~]# vi /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 10
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.1.50 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.15 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@lvs ~]# systemctl start keepalived
[root@lvs ~]# ip addr
在备份lvs上配置
lvs02
先加入软件包
modprobe ip_vs
yum -y install ipvsadm
yum -y install popt-devel kernel-devel openssl-devel.x86_64 #安装编译工具与开发包
tar zxvf keepalived-2.0.13.tar.gz
cd keepalived-2.0.13/
./configure --prefix=/ #配置
make && make install #编译与安装
cp keepalived/etc/init.d/keepalived /etc/init.d #把keepalived加入系统管理服务
systemctl enable keepalived.service #设置开机自启
vim /etc/keepalived/keepalived.conf #删除所有配置,重新添加
! Configuration File for keepalived
global_defs {
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.1.50 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.15 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl restart keepalived.service
访问测试
关闭主lvs
查看备份lvs的调度情况