1 、Keepalived 概述
keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层
和第 5 层交换。 Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工
作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正
常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需
要人工做的只是修复故障的 web 服务器。
OSI七层
OSI 七层相关协议
2、Keepalived 工作原理
Layer3,4&5 工作在 IP/TCP 协议栈的 IP 层, TCP 层,及应用层,。
Layer3: Keepalived 使用 Layer3 的方式工作式时, Keepalived 会定期向服务器群中的服务器
发送一个 ICMP 的数据包(既我们平时用的 Ping 程序) , 如果发现某台服务的 IP 地址没有激活,
Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非
法关机。 Layer3 的方式是以服务器的 IP 地址是否有效作为服务器工作正常与否的标准。
Layer4: 主要以 TCP 端口的状态来决定服务器工作正常与否。如 web server 的服务端口一般是
80,如果 Keepalived 检测到 80 端口没有启动,则 Keepalived 将把这台服务器从服务器群中删除。
Layer5: Layer5 就是工作在具体的应用层了,比 Layer3,Layer4 要复杂一点,在网络上占用的带
宽也要大一些。 Keepalived 将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相
符,则 Keepalived 将把服务器从服务器群中剔除。
3、 Keepalived 的作用与构建
1.管理 VIP,VIP 会在 LVS 之间漂移
2.监控 LVS 分发器
运行在主分发的 Keepalived 会以组播的形式向网络中宣告自己,即主分发器还活着,备用节点能收
到。当备用节点,在一个时间单位中收不到组播,备用节点会认为主 LVS 挂了,开始接手主分发器工作,
把 VIP 配给自己。
使用 Keepalived 构建 LVS-DR 模式的高可用集群,实验环境如下:
名称 | IP地址 | 网关 | 作用 | 备注 |
---|---|---|---|---|
hf120 | DIP : 192.168.1.120/24 VIP : 192.168.1.111 |
192.168.1.1 | 主LVS |
|
| hf121 | DIP : 192.168.1.121/24
VIP : 192.168.1.111 | 192.168.1.1 | 副LVS |
| | hf122 | 192.168.1.122/24 | 192.168.1.1 | RS1 web1 |
| | hf123 | 192.168.1.123/24 | 192.168.1.1 | RS2 web2 |
|
网络拓扑:
4、hf-120安装ipvsadm
yum install ipvsadm -y
5: hf-120安装keepalved
wget http://www.keepalived.org/software/keepalived-1.2.16.tar.gz
tar -xvf keepalived-1.2.16.tar.gz
cd keepalived-1.2.16/
#解决依赖
yum -y install gcc openssl-devel libnfnetlink-devel
./configure —prefix=/usr/local/keepalived
make && make install
6:建立启动脚本
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
#不知道脚本位置,搜索 chkconfig 字段的文件可以找到!
grep “chkconfig” /usr/local/keepalived/etc/ -R
chmod +x /etc/init.d/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
vim /etc/sysconfig/keepalived
改:14 KEEPALIVED_OPTIONS=”-D”
为:14 KEEPALIVED_OPTIONS=”-D -f /etc/keepalived/keepalived.conf
*KEEPALIVED_OPTIONS=”-D -f /etc/keepalived/keepalived.conf”
#修改指定 keepalived 要加载的配置文件,设置正确的服务启动参数
7: 配置 Keepalived+LVS-DR 模式
在这种模式下,虚拟 IP 在某时刻只能属于某一个节点,另一个节点作为备用节点存在。当主节点不
可用时,备用节点接管虚拟 IP,提供正常服务。
配置参数:
节点 hf-120(主节点);
节点 hf-121(备用节点) ; 虚拟 IP 192.168.1.111
对外提供服务的 IP。 要求默认情况下由节点 hf-120 提供服务,当节点 hf-120 不可用时,由
节点 hf-121提供服务(即虚拟 IP 漂移至节点 hf-121)**
主节点 hf-121配置:
cp /etc/keepalived/keepalived.conf{,.bak}
cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id hf-120
}
vrrp_instance apache {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.111
}
}
virtual_server 192.168.1.111 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.1.122 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.123 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
systemctl restart keepalived
systemctl enable keepalived
ipvsadm -L -n
**
备用节点hf-121的配置
编译安装,如同 hf-120 安装一样的步骤。(两台主机上的 keepalived 建议使用同一种安装方法
进行安装,以方便后期维护)
cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id hf-121
}
vrrp_instance apache {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.111
}
}
virtual_server 192.168.1.111 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.1.122 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.123 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
启动
systemctl restart keepalived
systemctl enable keepalived
配置RS1
vim /etc/init.d/lvsrsdr
#写一个配置 RS 的脚本
cat /etc/init.d/lvsrsdr
#!/bin/bash
#description:start relserver
VIP=192.168.1.111
source /etc/init.d/functions #加载环境变量(可以加载所有的环境变量)
case $1 in
start)
echo ‘start LVS of Realserver DR’
/sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:1
echo ‘1’ > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo ‘2’ > /proc/sys/net/ipv4/conf/lo/arp_announce
echo ‘1’ > /proc/sys/net/ipv4/conf/all/arp_ignore
echo ‘2’ > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:1 down
echo ‘Close LVS of Realserver DR’
echo ‘0’ > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo ‘0’ > /proc/sys/net/ipv4/conf/lo/arp_announce
echo ‘0’ > /proc/sys/net/ipv4/conf/all/arp_ignore
echo ‘0’ > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo “Usage:$0 (start|stop)”
exit 1
esac
chmod +x /etc/init.d/lvsrsdr
/etc/init.d/lvsrsdr start
echo “/etc/init.d/lvsrsdr start” >> /etc/rc.local
ifconfig -a
yum install -y httpd
echo 192.168.1.122 > /var/www/html/index.html
systemctl restart httpd
配置RS2(hf-123)
从hf-122上拷贝脚本
scp /etc/init.d/lvsrsdr root@192.168.1.65:/etc/init.d/
再就到RS2(hf-123)执行
chmod +x /etc/init.d/lvsrsdr
/etc/init.d/lvsrsdr start
echo “/etc/init.d/lvsrsdr start “ >> /etc/rc.local
ifconfig -a
yum install -y httpd
echo 192.168.1.65 > /var/www/html/index.html
systemctl restart httpd
测试:
http://192.168.1.111
#一直显示 192.168.1.64 的内容,等待 50s 之后,查看
50s 之前图
50s之后图
测试主备切换,首选在主上 hf-120上查看状态
在hf-120 上停掉 keepalived, 模拟故障,在查看 hf-121
**[root@hf-120 ~]# systemctl stop keepalived
[root@hf-121 keepalived]# ipvsadm -L -n
[root@hf-121 keepalived]# ip addr **
从日志看:
[root@hf121 keepalived]# tailf /var/log/messages
当重启了主上的 keepalived,自动从备分发器转到主分发器上。因为备的优先级低。
[root@hf-120 ~]# systemctl restart keepalived
测试 RS 容错,停掉 hf-123 的 httpd 之后 hf-120 查看
[root@hf-123 ~]# systemctl stop httpd
[root@hf-120 keepalived]# ipvsadm -L -n
打开主 LVS 的日志(/var/log/message),看到滚动从 LVS 中移除 192.168.1.65。
[root@hf-120 ~]# tail /var/log/messages
使用 ipvsadm -Ln 可以看到刚才关闭的那台机器的 IP 不在列表中了。
当 keepalived 主从优先级一样时,当主恢复后,还是要回切资源的。第一次建立主从关系时,需要 10s 左右的认证时间。