Bootstrap

LVS-DR 集群

一、LVS-DR 集群

  • LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式。

1、LVS-DR 工作原理

  • LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。
  • 为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址

2、数据包流向分析

  • 以下为数据包流向分析步骤
      1. 客户端发送请求到 Director Server,请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP) 到达内核空间。
      1. Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
      1. 内核空间判断数据包的目标 IP 是本机 VIP,此时 IPVS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。
      1. 到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。
      1. Real Server 直接将响应报文传送到客户端。

3、LVS-DR 模式特点

  • 下面是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 地址。

二、案例:直接路由模式(LVS-DR)

1、准备案例环境

在这里插入图片描述

LVS-DR 群集

资源列表

主机操作系统IP配置
lvsCentOS7192.168.72.1312C4G
web01CentOS7192.168.72.1322C4G
web02CentOS7192.168.72.1332C4G
web03CentOS7192.168.72.1342C4G
nfsCentOS7192.168.72.1352C4G

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname lvs
hostnamectl set-hostname web01
hostnamectl set-hostname web02
hostnamectl set-hostname web03
hostnamectl set-hostname nfs

一、部署 LVS

[root@lvs ~]# cd /etc/sysconfig/network-scripts
[root@lvs network-scripts]# ls
[root@lvs network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@lvs network-scripts]# vi ifcfg-ens33:0
[root@lvs network-scripts]# cat ifcfg-ens33:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.72.200
NETMASK=255.255.255.255
# 启动网卡
[root@lvs network-scripts]# ifup ens33:0
[root@lvs network-scripts]# ifconfig ens33:0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.72.200  netmask 255.255.255.255  broadcast 192.168.72.200
        ether 00:0c:29:c9:ff:b1  txqueuelen 1000  (Ethernet)


# 调整 proc 响应参数
# 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应
# 数据包的入接口和路由后的指定的出接口是同一个接口,所以需要关闭重定向
echo 'net.ipv4.conf.all.send_redirects = 0' >> /etc/sysctl.conf 
echo 'net.ipv4.conf.default.send_redirects = 0' >> /etc/sysctl.conf 
echo 'net.ipv4.conf.ens33.send_redirects = 0' >> /etc/sysctl.conf 
sysctl -p

1、配置负载分配策略
# 加载 ip_vs 模块
modprobe ip_vs

# 查看 ip_vs 版本信息
cat /proc/net/ip_vs

yum -y install ipvsadm
ipvsadm -v

ipvsadm -A -t 192.168.72.200:80 -s rr
ipvsadm -a -t 192.168.72.200:80 -r 192.168.72.132 -g -w 1
ipvsadm -a -t 192.168.72.200:80 -r 192.168.72.133 -g -w 1
ipvsadm -a -t 192.168.72.200:80 -r 192.168.72.134 -g -w 1
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.72.200:80 rr
  -> 192.168.72.132:80            Route   1      0          0         
  -> 192.168.72.133:80            Route   1      0          0         
  -> 192.168.72.134:80            Route   1      0          0         


2、配置节点服务器
cat > /etc/sysconfig/network-scripts/ifcfg-lo:0 << EOF
DEVICE=lo:0
IPADDR=192.168.72.200
NETMASK=255.255.255.255
ONBOOT=yes
EOF
# 启动网卡
ifup lo:0
ifconfig lo:0

# 添加 VIP 本地访问路由
route add -host 192.168.72.200 dev lo:0
echo 'route add -host 192.168.72.200 dev lo:0' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local


3、调整 proc 响应参数
cat >> /etc/sysctl.conf << EOF
# 忽略arp广播
net.ipv4.conf.all.arp_ignore = 1
# 匹配精确IP地址回包
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl -p

# web 节点
yum -y install httpd
systemctl start httpd
systemctl enable httpd
echo 'This is web01' > /var/www/html/index.html
echo 'This is web02' > /var/www/html/index.html
echo 'This is web03' > /var/www/html/index.html

三、部署 NFS

1.安装 nfs-utils、rpcbind 软件包
yum -y install nfs-utils rpcbind
systemctl enable nfs
systemctl enable rpcbind
2.设置共享目录
mkdir -p /opt/wwwroot
# rw 表示允许读写(ro 为只读),
# sync 表示同步写入,
# no_root_squash 表示当客户机以 root 身份访问时赋予本地 root 权限
#(默认是 root_squash,将作为 nfsnobody 用户降权对 待)。
echo '/opt/wwwroot 192.168.72.0/24(rw,sync,no_root_squash)' > /etc/exports
3.启动 NFS 服务程序
systemctl start rpcbind nfs

# 查看本机发布的 NFS 共享目录
showmount -e
4.在客户机中访问 NFS 共享资源,所有web节点操作
yum -y install rpcbind nfs-utils
systemctl enable rpcbind
systemctl start rpcbind

# fstab 自动挂载设置
echo '192.168.72.135:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0' >> /etc/fstab
mount -a
# 查看是否挂载成功
df -Th

# 挂载完以后修改文件
echo 'This is NFS' >> /var/www/html/index.html
# 挂载完以后在 nfs 节点写一个网页
echo 'This is NFS' >> /opt/wwwroot/index.html
# 在哪里写都可以,最后都会实现网页共享

# 最后测试,实现网页共享
[root@client ~]# curl 192.168.72.200
This is NFS
;