【实战演练】Linux操作系统16-keepalived实现LV
2020-05-24 本文已影响0人
工程师Waiting
本文欢迎转载,转载请注明出处和作者。
理论部分,在之前的文章已经说明过了,详见《【理论研究】业务系统高可用及负载均衡》。
上一篇已经讲述通过增加1台LVS服务器,对2台Nginx服务器做负载均衡,但是LVS服务器存在单点隐患,所以需要对LVS服务器通过Keepalived做HA。
但是Keepalived本身是内嵌了lvs的模块的,因此其实LVS01、02两台服务器,是可以直接安装Keepalivde,而不做上一篇的ipvsadm安装与lvsdr配置的。
手动增加安装一台LVS02,并且将LVS01、02的lvsdr服务停止,避免上一篇的VIP配置影响本篇实验。(nginx01、02的lvsdrf服务不需要停止)
service lvsdr stop
1、安装Keepalived
1.1 安装keepalived
yum install keepalived -y
1.2 修改配置文件
cd /etc/keepalived
rm keepalived.conf
#原有的配置文件
vi keepalived.conf
#创建新的配置文件
注意配置文件只有一些关键参数必须修改,其他都是默认的。
Master(主)服务器配置
! Configuration File for keepalived
global_defs {
notification_email {
#xxxx@xxx.com # 发生故障时发送的邮箱
}
#notification_email_from xxxx@xxx.com # 使用哪个邮箱发送
#smtp_server xxx.com # 发件服务器
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER # 标示为主lvs
interface eth1 # HA检测端口,按照实际网卡填写
virtual_router_id 51 # 主备的virtual_router_id 必须相同
priority 100 # 优先级,备lvs要比主lvs稍小
advert_int 1 # VRRP Multicast 广播周期秒数
authentication { # 定义认证
auth_type PASS # 认证方式为口令认证
auth_pass 1111 # 定义口令
}
virtual_ipaddress { # 定义vip
10.1.30.31 # 多个vip可换行添加
}
}
virtual_server 10.1.30.31 80 {
delay_loop 6 # 每隔6秒查看realserver状态
lb_algo wlc # 调度算法为加权最小连接数
lb_kind DR # lvs工作模式为DR(直接路由)模式
nat_mask 255.255.255.0
persistence_timeout 0 # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
protocol TCP # 用TCP监测realserver的状态
real_server 10.1.30.26 80 { # 定义realserver
weight 3 # 定义权重
TCP_CHECK { # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
connect_timeout 3 # 三秒无响应超时
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.30.27 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
Slave(从)服务器配置
! Configuration File for keepalived
global_defs {
notification_email {
#xxxx@xxx.com # 发生故障时发送的邮箱
}
#notification_email_from xxxx@xxx.com # 使用哪个邮箱发送
#smtp_server xxx.com # 发件服务器
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP # 标示为主lvs
interface eth1 # HA检测端口
virtual_router_id 51 # 主备的virtual_router_id 必须相同
priority 99 # 优先级,备lvs要比主lvs稍小
advert_int 1 # VRRP Multicast 广播周期秒数
authentication { # 定义认证
auth_type PASS # 认证方式为口令认证
auth_pass 1111 # 定义口令
}
virtual_ipaddress { # 定义vip
10.1.30.31 # 多个vip可换行添加
}
}
virtual_server 10.1.30.31 80 {
delay_loop 6 # 每隔6秒查看realserver状态
lb_algo wlc # 调度算法为加权最小连接数
lb_kind DR # lvs工作模式为DR(直接路由)模式
nat_mask 255.255.255.0
persistence_timeout 0 # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
protocol TCP # 用TCP监测realserver的状态
real_server 10.1.30.26 80 { # 定义realserver
weight 3 # 定义权重
TCP_CHECK { # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
connect_timeout 3 # 三秒无响应超时
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.30.27 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
1.3 启动服务
service keepalived start
2、Realserver配置(2台Nginx服务器)
2.1 脚本自动配置
vi /etc/init.d/lvsdr
内容如下:
#!/bin/sh
VIP=10.1.30.31 #虚拟ip,根据需求修改
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "lo:0 port starting"
# 为了相应lvs调度器转发过来的包,需在本地lo接口上绑定vip
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
# 限制arp请求
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)
echo "lo:0 port closing"
ifconfig lo:0 down
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 777 /etc/init.d/lvsdr
然后可以直接使用service lvsdr start/stop进行启停。
service lvsdr start
3、测试
测试业务前,ip a s 先查看VIP在LVS01还是LVS02上面。


确认VIP在LVS01上面,通过VIP访问业务,并且不断刷新,发现业务能够正常分发。


手动将LVS01关机或者停止keepalived服务。
service keepalived stop
查看VIP是否成功切换到LVS02,
然后再次通过VIP测试业务,发现分发正常,证明LVS的HA功能也设置成功。

