文章目录
一、 LVS-DR 集群
LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。
1.1 LVS-DR 工作原理
LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,DirectorServer 与 RealServer 都需要配置 VIP 地址。
LVS-DR工作原理图如下:
1.2 数据包流向分析
- 客户端发送请求到 Director Server,请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP) 到达内核空间(包含上图的1、2、3步)。
- Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
- 内核空间判断数据包的目标 IP 是本机 VIP,此时 IP_VS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server(包含图中的第4、5步)。
- 到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。
- Real Server 直接将响应报文传送到客户端(包含图中的第6步)。
1.3 LVS-DR 模式特点
- Director Server 和 Real Server 必须在同一个物理网络中。
- Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过 互联网对 RIP 进行直接访问。
- 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
- Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。
- Real Server 上的 lo 接口配置 VIP 的 IP 地址。
二、 Keepalived 双机热备基础知识
Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换 (Failover)和健康检查(Health Checking)功能——判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到 backup 节点保证业务正常,当 master 故障主 机恢复后将其重新加入群集并且业务重新切换回 master 节点。
2.1 Keepalived 概述及安装
Keepalived 的官方网站位于 http://www.keepalived.org/,在非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用。
1.Keepalived 的热备方式
Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 热备份协议,以软件的方式实现 Linux 服务器的多机热备功能。
VRRP 是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟 IP 地址对外提供服务; 每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。
若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟 IP 地址,以继续提供服务。 热备组内的每台路由器都可能成为主路由器,虚拟路由器的 IP 地址(VIP)可以在热备 组内的路由器之间进行转移,所以也称为漂移 IP 地址。使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33∶0),而是由 Keepalived 根据配置文件自动管理。
2. Keepalievd安装与启动
- 在LVS群集环境中应用时,也需用到 ipvsadm管理工具
- YUM安装 Keepalived
- 启用 Keepalived服务
三、 部署LVS-DR负载均衡+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
实验过程
1. 联网环境下先装软件包
这里的群集调度器既是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
然后将所有的服务器主机都设置为仅主机模式
2. 调度服务器配置
以下配置默认是主、备调度服务器都要进行配置,单独操作会单独说。
[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
3. 配置服务器网卡
两台调度服务器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
master调度服务器IP
backup调度服务器IP
4. 两台LVS服务器都创建脚本便于service管理
[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
5. 两台节点服务器IP与VIP配置
这里的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>
6. 在节点服务器自测网页是否成功被访问
7. keepalived部署(调度服务器上部署)
[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
}
}
- 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),可以有多个,多个漂移地址以逗号分隔
因为两个服务器的配置文件大致相同,直接使用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
8. 验证服务
win10 虚拟机要设置为仅主机模式,IP在192.168.100.0网段
在win10虚拟机中ping虚拟IP
实验中需要注意的点
因为arp广播的原因,在实验测试阶段可能要多次的重启网卡服务,这是VMware软件的原因。