目录
前言
一、LVS-DR
1、LVS-DR工作特点
2、LVS-DR存在ARP问题以及解决方法
二、LVS-DR部署
1、实验环境
2、实验目的
3、实验过程
3.1 调度器配置
3.2 配置两台节点IP地址绑定VIP
3.3 节点服务器配置抑制ARP响应
3.4 两台节点服务器配置测试网址
3.5 实验验证
三、keepalived实现原理
1、keepalived工具概述
2、原理解析
四、如何部署Keepalievd
1、Keepalievd部署概述
2、Keepalievd安装与启动
3、配置Keepalievd master服务器
4、配置Keepalived slave服务器
5、Keepalived双机热备效果测试
五、双机热备keepalived配置
1、配置
2、实验验证
总结
在这个高度信息化的 IT 时代,企业的生产系统、业务运营、销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,使得对高可用技术的应用需求大量上升,以便提供持续的、不间断的计算机系统或网络服务。
负载均衡调度器和后端真实服务器再同一区域网内。
负载均衡调度器最为群集的访问入口,但不作为网关使用,所有的回复报文不经过负载均衡调度器
Real Server的网关不允许指向Director Server IP,即Real Server发送的数据包不允许经过Director Server。
后端真实服务器上的lo接口配置VIP的IP地址。
在LVS-DR负载均衡集中,在局域网中具有相同的IP地址会造成各服务器ARP通信的紊乱。因为当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同网络上,所以它们都会接收到ARP广播。
解决方法:对节点服务器进行处理,使其不响应针对VIP的ARP请求。 使用虚接口 lo:0 承载VIP地址设置内核参数 arp_ignore=1:系统只响应目的IP为本地 IP 的ARP请求。
Real Server返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址,发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址如:ens33,路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址,路由器根据ARP表项,会将新来的请求报文转发给Realserver,导致Director的VIP失效。
解决方法:对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。
为了进一步提高公司网站的负载能力,公司决定扩展现有的网站平台,基于LVS构筑负载均衡群集。考虑到群集的访问效率,管理员准备采用LVS群集的DR模式,共享存储设备存放在内部专有网络中
LVS1:192.168.100.100
LVS2:192.168.100.110
Web1:192.168.100.200
Web2:192.168.100.222
VIP=192.168.100.10
Win 10 :192.168.100.50
[root@lvs1 ~]# yum install keepalived ipvsadm -y '//keepalived:双机热备要用到的,ipvsadm:调度管理要用'
[root@lvs2 ~]# yum install keepalived ipvsadm -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
[root@lvs1 network-scripts]# vim /etc/init.d/dr.sh
'//编辑以下脚本内容'
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10 ##虚拟ip
RIP1=192.168.100.200 ##真实web服务器ip
RIP2=192.168.100.222
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@lvs1 network-scripts]# chmod +x /etc/init.d/dr.sh
两台LVS服务器都修改网卡为仅主机模式
[root@lvs1 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs1 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs1 network-scripts]# vim ifcfg-ens33:0 '//配置虚拟ip地址'
'//删除原本内容,添加以下配置'
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[root@lvs1 network-scripts]# vim ifcfg-ens33
'//...省略内容,修改为static'
BOOTPROTO=static
'//...省略内容,尾行添加内容'
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@lvs2 network-scripts]# vim ifcfg-ens33
'//注意lvs2的IP地址为192.168.100.110'
IPADDR=192.168.100.110
[root@lvs1 network-scripts]# systemctl restart network
[root@lvs1 network-scripts]# ifup ens33:0
[root@lvs1 network-scripts]# service dr.sh start
ipvsadm starting --------------------[ok]
[root@lvs1 network-scripts]# systemctl stop firewalld.service
[root@lvs1 network-scripts]# setenforce 0
LVS-DR中,两台节点服务器要配置绑定VIP地址
VIP地址仅用作Web响应数据包的源地址,并不监听客户机的访问请求
都修改为仅主机模式
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
[root@web1 network-scripts]# vim ifcfg-ens33
'//...省略内容,修改为static'
BOOTPROTO=static
'//...省略内容,尾行添加内容'
IPADDR=192.168.100.200
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
'//其中web2服务器修改为192.168.100.222'
IPADDR=192.168.100.222
[root@lvs1 network-scripts]# systemctl restart network
[root@lvs1 network-scripts]# ifup ens33:0
[root@lvs1 network-scripts]# service dr.sh start
ipvsadm starting --------------------[ok]
[root@lvs1 network-scripts]# systemctl stop firewalld.service
[root@lvs1 network-scripts]# setenforce 0
配置抑制ARP脚本
[root@web1 network-scripts]# vim /etc/init.d/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 '//arp忽略'
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 '//arp开启'
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@web1 network-scripts]# chmod +x /etc/init.d/web.sh
[root@web1 ~]# yum install httpd -y
[root@web2 ~]# yum install httpd -y
[root@web1 ~]# vim /var/www/html/index.html
this is web1 web
[root@web2 ~]# vim /var/www/html/index.html
this is web2 web
[root@web1 network-scripts]# systemctl restart network
[root@web1 network-scripts]# ifup lo:0
[root@web1 network-scripts]# service web.sh start
RealServer Start OK
[root@web1 network-scripts]# systemctl start httpd
[root@web1 network-scripts]# systemctl stop firewalld.service
[root@web1 network-scripts]# setenforce 0
修改win10主机IP地址
使用win10访问192.168.100.10验证
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP,虚拟路由冗余协议,是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
Keepalived可实现多机热备,每个热备组可有多台服务器,最常用的就是双机热备
双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
本次部署将实现基于web服务的双机热备
Keepalievd配置目录位于/etc/keepalievd/
keepalievd.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:通告间隔秒数(心跳频率)
auth_type PASS:认证类型
auth_pass 123456:密码字串
virtual_ipaddress{vip}:指定漂移地址(VIP),可以有多个,多个漂移地址以逗号分隔
测试双机热备的效果
主、备机均启用Web服务,内容相同
先后禁用、启用主服务器的网卡,执行以下测试
测试1:使用ping检测19216810.72的连通性
测试2:访问htt:/192168.10.72,确认可用性及内容变化
测试3:查看日志文件/var/log/messages中的变化
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
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 '//主服务器为MASTER,备服务器为BACKUP'
interface eth0
virtual_router_id 10 '//主备组号要相同'
priority 100 '//优先级,备服务器的优先级要小于主'
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 '//主备密码要相同'
}
virtual_ipaddress {
192.168.100.10
}
}
virtual_server 192.168.100.10 80 {
delay_loop 6
lb_algo rr '//轮询算法'
lb_kind DR '//修改为DR模式'
persistence_timeout 50
protocol TCP
real_server 192.168.100.200 80 { '//节点1配置'
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.222 80 { '//节点2配置'
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
...省略内容
router_id LVS_02 '//router_id不能相同'
...省略内容
vrrp_instance VI_1 {
state BACKUP '//此处选择为BACKUP备服务器'
interface eth0
virtual_router_id 10
priority 90 '//优先级需要低于主服务器'
...省略内容
'//其他配置都相同'
[root@lvs1 ~]# systemctl start keepalived
[root@lvs2 ~]# systemctl start keepalived
修改win10主机IP地址
使用win10访问192.168.100.10验证
此时可以关闭主服务器的漂移地址 ifdown ens33:0,再次访问页面,发现依然可以访问,双机热备成功
两台服务器多刷新几次会显示另一台web首页
若无法显示网页,尝试重启两台lvs服务器的dr.sh脚本或其他服务
Director Server和Real Server必须在同一个物理网络中
Real Server可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问
Director Server作为群集的访问入口,但不作为网关使用
所有的请求报文经由Director Server,但回复响应报文不能经过Director Server
Real Server的网关不允许指向DIrector Server IP,即Real Server发送的数据包不允许经过Director Server
Real Server上的io接口配置了VIP的IP地址