前面讲了怎么搭建nat模式和dr模式,但是负载均衡器如果只有一个的话,那么负载均衡器就成了瓶颈,当这一个负载均衡器挂掉以后,那整个网络就瘫痪了,所以要保持lvs的高可用,需要搭配keepalived来实现lvs的高可用,也就是主备负载均衡器,当两个负载均衡器都正常的时候那么主负载均衡器工作,而当主负载均衡器挂掉以后那么就从负载均衡器工作。当再把主负载均衡器开启以后那么,在回归主负载均衡器工作。下面是搭建步骤,由于前面讲了通过命令配置负载均衡器,那样太麻放了,现在讲解怎么把命令写成服务让后直接通过一句命令去部署完成。
一、两台real Server的部署脚本
1、首先需要在/etc/init.d 下新建一个目录 realServer 文件,里面的内容如下
#!/bin/bash
#chkconfig: 2345 30 90
#description: myservice testd...
#test initd
SNS_VIP=192.168.30.98
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
注意:这个地方 #chkconfig: 2345 30 90 这一句还必须要有,不然的话通过 systemctl enable realServer ,会报错,
2、修改这个文件的权限为 755 可以执行
chmod 755 realServer
3、通过systemctl enable realServer 命令启用该服务
然后通过systemctl start realServer 启动服务
4、通过 more /proc/sys/net/ipv4/conf/lo/arp_ignore 查看文件是否已经修改为了1 , 如果是1说明服务起作用了
二、两台Lvs的部署脚本
1、首先安装 keepalive,这里需要联网安装
yum install keepalived -y
2、安装完以后去到 /etc/keepalived 目录下,然后将keepalived.conf 文件改名位 keepalived.conf.bak
cd /etc/keepalived
mv keepalived.conf keepalived.conf.bak
3、然后再新建 keepalived.conf 文件,将下面的配置加入进去,这一台服务器是主lvs服务器。
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.30.1
smtp_connection_timeout 30
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备
interface ens37 #指定接口
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.30.98 #定义虚拟IP(VIP)为192.168.80.200,可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.30.98 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo wrr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.30.100 80 { # 指定real server1的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.30.101 80 { # 指定real server2的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK { 2
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
4、从lvs服务器配置文件一样,但是需要修改两处
(1)将state由MASTER改为BACKUP
(2)将priority由100改为99
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.30.1
smtp_connection_timeout 30
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state BACKUP #指定Keepalived的角色,MASTER为主,BACKUP为备
interface ens37 #指定接口
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 99 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.30.98 #定义虚拟IP(VIP)为192.168.80.200,可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.30.98 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo wrr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.30.100 80 { # 指定real server1的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.30.101 80 { # 指定real server2的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK { 2
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
注意:如果在centos7中开启了防火墙,那么需要加下面的几条语句
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens37 --destination 192.168.30.98 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens37 --destination 192.168.30.98 --protocol vrrp -j ACCEPT
firewall-cmd --zone=public --add-port=36160/tcp --permanent
firewall-cmd --reload
后端服务器的虚拟IP必须绑定到lo:0上,同时指定子网掩码是255.255.255.255,否则ARP禁用会出现异常。
然后 通过 systemctl start keepalived.service 启动服务。
抓包命令
tcpdump -i ens37 -nn tcp port 443 -vv -XX
最后测试是否好使,