LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。
LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,DirectorServer 与 RealServer 都需要配置 VIP 地址。
Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换 (Failover)和健康检查(Health Checking)功能——判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到 backup 节点保证业务正常,当 master 故障主 机恢复后将其重新加入群集并且业务重新切换回 master 节点。
Keepalived 的官方网站位于 http://www.keepalived.org/,在非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用。
Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 热备份协议,以软件的方式实现 Linux 服务器的多机热备功能。
VRRP 是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟 IP 地址对外提供服务; 每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。
若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟 IP 地址,以继续提供服务。 热备组内的每台路由器都可能成为主路由器,虚拟路由器的 IP 地址(VIP)可以在热备 组内的路由器之间进行转移,所以也称为漂移 IP 地址。使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33∶0),而是由 Keepalived 根据配置文件自动管理。
部署LVS-DR负载均衡+Keepalived双机热备高可用群集、实现Keepalived双机热备功能
VMware虚拟机中四台centos7.6虚拟机
两台centos7.6虚拟机做双机热备
两台centos7.6虚拟机做节点服务器
一台win10虚拟机作为客户机,验证成果
master服务器IP为192.168.100.129
backup服务器IP为192.168.100.128
节点1服务器的IP为192.168.100.201
节点2服务器的IP为192.168.100.202
虚拟IP(VIP)为192.168.100.10
这里的群集调度器既是Keepalievd master服务器也是DR调度器
Keepalievd master服务器
[root@localhost ~]# yum install keepalived ipvsadm -y
Keepalievd backup服务器
[root@localhost ~]# yum install keepalived ipvsadm -y
节点1服务器
[root@localhost ~]# yum install httpd -y
节点2服务器
[root@localhost ~]# yum install httpd -y
然后将所有的服务器主机都设置为仅主机模式
以下配置默认是主、备调度服务器都要进行配置,单独操作会单独说。
[root@lvs1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 ##开启路由转发功能
以下为关闭重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@lvs1 ~]# sysctl -p ##重载加载配置
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
两台调度服务器IP与VIP进行相同的设置,VIP全局都相同
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# vim ifcfg-ens33:0 ##vip配置
将原来的文件全部删除,写入下面四句
DEVEICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[root@localhost network-scripts]# cd /etc/init.d/
ot@localhost init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10 ##虚拟ip
RIP1=192.168.100.201 ##真实web服务器ip
RIP2=192.168.100.202
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm ##保存配置
systemctl start ipvsadm ##启动服务
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
##设置ens33:0地址,广播地址,子网掩码,并开启
/sbin/route add -host $VIP dev ens33:0 ##添加路由网段信息
/sbin/ipvsadm -A -t $VIP:80 -s rr ##指定虚拟服务访问入口,指定轮询算法
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g ##指定真实服务器,dr模式
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting --------------------[ok]"
;;
stop)
/sbin/ipvsadm -C ##清空缓存
systemctl stop ipvsadm ##关闭服务
ifconfig ens33:0 down ##关闭接口
route del $VIP ##删除路由信息
echo "ipvsamd stoped----------------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then ##判断文件存在与否决定状态
echo "ipvsadm stoped---------------"
exit 1
else
echo "ipvsamd Runing ---------[ok]"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
[root@localhost init.d]# chmod +x dr.sh
这时候使用ifconfig命令还不能查看到IP与VIP
重启网卡服务
[root@localhost init.d]# service network restart
Restarting network (via systemctl): [ 确定 ]
[root@localhost init.d]# ifconfig
执行脚本
[root@localhost init.d]# service dr.sh start
ipvsadm starting --------------------[ok]
[root@localhost init.d]# systemctl stop firewalld.service
[root@localhost init.d]# setenforce 0
这里的VIP需要绑定在回环网卡上,使回环网卡可以屏蔽arp广播请求,避免和虚拟服务器上的VIP产生混乱。
两个服务器配置基本一致,以节点服务器1(192.168.100.201)为例。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVEICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[root@localhost network-scripts]# vim ifcfg-ens33
arp过滤脚本
[root@localhost network-scripts]# cd /etc/init.d/
[root@localhost init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $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 $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 Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
[root@localhost init.d]# chmod +x web.sh
[root@localhost init.d]# systemctl stop firewalld.service
[root@localhost init.d]# setenforce 0
[root@localhost init.d]# service network restart
Restarting network (via systemctl): [ 确定 ]
[root@localhost init.d]# ifconfig
[root@localhost init.d]# service web.sh start
RealServer Start OK
节点1服务器
[root@localhost init.d]# systemctl start httpd
[root@localhost init.d]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is Hello web</h1>
节点2服务器
[root@localhost init.d]# systemctl start httpd
[root@localhost init.d]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is world web</h1>
[root@localhost init.d]# cd /etc/keepalived/
[root@localhost keepalived]# ls
keepalived.conf
[root@localhost keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 ##邮件服务指向本地
smtp_connect_timeout 30 ##超时连接
router_id LVS_01 ##router_id不能相同
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER ##keepalived主服务器设置MASTER,备服务器为BACKUP
interface ens33 ##网络接口一定要与自己的接口名称相同,centos6的是eth0
virtual_router_id 51 ##主备组号要相同
priority 100 ##优先级
advert_int 1
authentication {
##加密认证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.10 ##虚拟IP
}
}
virtual_server 192.168.100.10 80 {
delay_loop 6
lb_algo rr ##轮询算法
lb_kind DR ##LVS-DR模式
persistence_timeout 50
protocol TCP ##tcp协议
real_server 192.168.100.201 80 {
##真实节点服务器IP与端口
weight 1 ##权重为1
TCP_CHECK{
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.202 80 {
weight 1
TCP_CHECK{
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
因为两个服务器的配置文件大致相同,直接使用scp服务将配置文件传输过去,进行部分修改
在master服务器上操作
[root@localhost keepalived]# scp keepalived.conf root@192.168.100.128:/etc/keepalived/
The authenticity of host '192.168.100.128 (192.168.100.128)' can't be established.
ECDSA key fingerprint is SHA256:sWKQiGLxIkZB0eRDa5cJpygOXtCmJKqdaa99GVj6viI.
ECDSA key fingerprint is MD5:36:ae:96:cf:f6:56:40:ee:42:37:12:73:73:6a:53:81.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.128' (ECDSA) to the list of known hosts.
root@192.168.100.128's password:
keepalived.conf 100% 1151 1.4MB/s 00:00
修改backup配置文件,以下只是写出与master不同的部分
[root@localhost init.d]# cd /etc/keepalived/
[root@localhost keepalived]# vim keepalived.conf
router_id LVS_02 ##router——id不能与master相同
state BACKUP ##设置为BACKUP
priority 90 ##优先级比master低
最后在两台服务器上开启keepalived服务
[root@localhost keepalived]# systemctl start keepalived.service
win10 虚拟机要设置为仅主机模式,IP在192.168.100.0网段
在win10虚拟机中ping虚拟IP
因为arp广播的原因,在实验测试阶段可能要多次的重启网卡服务,这是VMware软件的原因。