部署LVS-DR群集

作者 : admin 本文共10577个字,预计阅读时间需要27分钟 发布时间: 2024-06-17 共1人阅读

目录

一、LVS负载均衡的三种工作模式

1)NAT   地址转换

2)TUN   IP隧道   IP Tunnel

3)DR    直接路由  Direct Rounting

二、LVS调度算法

三、LVS-DR模式部署:

四、DR模式 LVS负载均衡群集

(1)数据包流向分析:

(2)DR 模式的特点:

五、 实验

(1)初始化

挂载mnt

 关闭防火墙

 (2)配置NFS共享存储(4号机)

(3)配置节点服务器(2.3号机)

(4)调度器配置(一号机)

六、试验


一、LVS负载均衡的三种工作模式

1)NAT   地址转换

调度器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,所以调度器会承载双向流量的负载压力,可能会成为整个群集的性能瓶颈。
由于节点服务器都会处于内网环境并使用私网IP,所以NAT模式具有一定的安全性。

2)TUN   IP隧道   IP Tunnel

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。
由于节点服务器需要部署在互联网环境中,所以需要有独立的公网IP。
调度器与节点服务器是通过专用的IP隧道相互通信。
因此IP隧道模式的成本较高、网络安全性较低密,且数据在IP隧道传输的过程中需要额外的封装和解封装过程,性能也会受到一定的影响。

3)DR    直接路由  Direct Rounting

调度器也是仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别)
节点服务器与调度器是部署在同一个物理网络中,因此不需要专用的IP隧道。(与IP隧道模式的区别)
DR模式是企业首选的LVS模式。

二、LVS调度算法

rr(轮询)    wrr(加权轮询)    lc(最小连接)    sh(源地址哈希)    dh(目的地址哈希)
wlc(加权最小连接)
:优先分配请求给 / 的值最小的节点服务器
lblc(基于地址的最小连接):如果服务器末超载且可用,则针对相同的目的地址的流量被发送到同一后端服务器;否则,流量被发送到连接数较少的服务器
sed(最短预期延迟)
nq(永不排队) 

三、LVS-DR模式部署:

  1. 部署NFS共享存储
  2. 部署Web服务器,注意:配置lo:0虚接口承载VIP;修改内核参数 arp_ignore=1、arp_announce=2防止网关ARP紊乱问题;添加路由 route add -host dev lo:0
  3. 部署调度器,注意:配置ensXX:0虚接口承载VIP;修改内核参数ip_forward=0、send_redirects=0关闭IP转发和重定向功能;安装ipvsadm工具,添加虚拟服务器和真实服务器的配置,使用-g选项选择LVS-DR模式
  4. 客户端访问VIP进行测试,注意:如何客户端跨网段,则调度器和节点服务器的默认网关要指向网关路由器的地址

 部署LVS-DR群集插图

 部署LVS-DR群集插图(1)

部署LVS-DR群集插图(2)

部署LVS-DR群集插图(3)

部署LVS-DR群集插图(4)

四、DR模式 LVS负载均衡群集

(1)数据包流向分析:

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

(2)DR 模式的特点:

  1. Director Server 和 Real Server 必须在同一个物理网络中。
  2. Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
  3. Director Server作为群集的访问入口,但不作为网关使用。
  4. 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
  5. Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server。
  6. Real Server 上的 lo 接口配置 VIP 的 IP 地址。

部署LVS-DR群集插图(5)

五、 实验

1号机              作为     LVS调度器  192.168.18.10

2号机  3号机   作为    节点服务器   192.168.18.20   192.168.18.30

4号机              作为    NFS共享存储  192.168.18.40

(1)初始化

部署LVS-DR群集插图(6) 部署LVS-DR群集插图(7)

 挂载mnt
[root@l1 ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913544       0  1913544    0% /dev
tmpfs                    1930624       0  1930624    0% /dev/shm
tmpfs                    1930624   12560  1918064    1% /run
tmpfs                    1930624       0  1930624    0% /sys/fs/cgroup
/dev/mapper/centos-root 38770180 5434724 33335456   15% /
/dev/sda1                1038336  191104   847232   19% /boot
tmpfs                     386128      12   386116    1% /run/user/42
tmpfs                     386128       0   386128    0% /run/user/0
[root@l1 ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@l1 ~]# 
 关闭防火墙
[root@l1 ~]# systemctl disable --now firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@l1 ~]# setenforce 0
[root@l1 ~]# vim /etc/selinux/config
[root@l1 ~]# 

部署LVS-DR群集插图(8)

关闭同步

 (2)配置NFS共享存储(4号机)

[root@localhost ~]# yum install -y nfs-utils rpcbind

部署LVS-DR群集插图(9)

[root@localhost ~]# mkdir /share/{xy101,xy102} -p  
                   //创建共享目录  添加节点,分别是xy101和xy102两个目录
[root@localhost ~]# ls /share/
xy101  xy102
[root@localhost ~]# echo '

this is xy101 test web page!

' > /share/xy101/test.html [root@localhost ~]# echo '

this is xy102 test web page!

' > /share/xy102/test.html [root@localhost ~]# vim /etc/exports

 部署LVS-DR群集插图(10)

/share/xy101 192.168.18.0/24(ro)
/share/xy102 192.168.18.0/24(ro)
[root@localhost ~]# systemctl enable --now rpcbind nfs   //启动rpcbind 和 nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@localhost ~]# showmount -e   //检查一下有没有问题
Export list for localhost.localdomain:
/share/xy102 192.168.18.0/24
/share/xy101 192.168.18.0/24
[root@localhost ~]# 

(3)配置节点服务器(2.3号机)

[root@l2 ~]# systemctl start rpcbind    //两台机都得启动远程调用
[root@l2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@l2 ~]# 

部署LVS-DR群集插图(11)

[root@l2 ~]# showmount -e 192.168.18.40
Export list for 192.168.18.40:
/share/xy102 192.168.18.0/24
/share/xy101 192.168.18.0/24
[root@l2 ~]# 
[root@l2 ~]# cd /etc/yum.repos.d/
[root@l2 yum.repos.d]# ls
local.repo  repo.bak
[root@l2 yum.repos.d]# 
[root@l2 yum.repos.d]# yum install -y nginx    (两台机都)

如果下载不了,传输进去 (两台机都)部署LVS-DR群集插图(12)

部署LVS-DR群集插图(13)

[root@l2 yum.repos.d]# yum install -y nginx

也可以直接尝试下载安装包,我这里就不使用了

部署LVS-DR群集插图(14)

安装好了后 (二号机)

部署LVS-DR群集插图(15)

[root@l2 yum.repos.d]# systemctl start nginx   //启动nginx
[root@l2 yum.repos.d]# mount 192.168.18.40:/share/xy101 /usr/share/nginx/html   //挂载
[root@l2 yum.repos.d]# ls !$
ls /usr/share/nginx/html
test.html
[root@l2 yum.repos.d]# cd /etc/sysconfig/network-scripts/
[root@l2 network-scripts]# ls
ifcfg-ens33  ifdown-ppp       ifup-ib      ifup-Team
ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
ifdown       ifdown-sit       ifup-ipv6    ifup-tunnel
ifdown-bnep  ifdown-Team      ifup-isdn    ifup-wireless
ifdown-eth   ifdown-TeamPort  ifup-plip    init.ipv6-global
ifdown-ib    ifdown-tunnel    ifup-plusb   network-functions
ifdown-ippp  ifup             ifup-post    network-functions-ipv6
ifdown-ipv6  ifup-aliases     ifup-ppp
ifdown-isdn  ifup-bnep        ifup-routes
ifdown-post  ifup-eth         ifup-sit
[root@l2 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@l2 network-scripts]# vim ifcfg-lo:0
[root@l2 network-scripts]# 

部署LVS-DR群集插图(16)

DEVICE=lo:0
IPADDR=192.168.18.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@l2 network-scripts]# systemctl restart network   //重启网卡

部署LVS-DR群集插图(17)

[root@l2 network-scripts]# systemctl restart nginx  //重启nginx
[root@l2 network-scripts]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@l2 network-scripts]# 

部署LVS-DR群集插图(18)

[root@l2 network-scripts]# vim /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore =1
net.ipv4.conf.all.arp_ignore =1
net.ipv4.conf.lo.arp_announce =2
net.ipv4.conf.all.arp_announce =2

部署LVS-DR群集插图(19)

[root@l2 network-scripts]# sysctl -p   //加载一下
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@l2 network-scripts]# 
[root@l2 network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.18.2    0.0.0.0         UG    100    0        0 ens33
192.168.18.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@l2 network-scripts]# 
[root@l2 network-scripts]# route add -host 192.168.18.100 lo:0   //添加路由

部署LVS-DR群集插图(20)

三号机 

[root@l3 yum.repos.d]# cd /etc/sysconfig/network-scripts/
[root@l3 network-scripts]# ls
ifcfg-ens33  ifdown-ppp       ifup-ib      ifup-Team
ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
ifdown       ifdown-sit       ifup-ipv6    ifup-tunnel
ifdown-bnep  ifdown-Team      ifup-isdn    ifup-wireless
ifdown-eth   ifdown-TeamPort  ifup-plip    init.ipv6-global
ifdown-ib    ifdown-tunnel    ifup-plusb   network-functions
ifdown-ippp  ifup             ifup-post    network-functions-ipv6
ifdown-ipv6  ifup-aliases     ifup-ppp
ifdown-isdn  ifup-bnep        ifup-routes
ifdown-post  ifup-eth         ifup-sit
[root@l3 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@l3 network-scripts]# vim !$

 部署LVS-DR群集插图(21)

DEVICE=lo:0
IPADDR=192.168.18.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@l3 network-scripts]# systemctl restart network nginx
[root@l3 network-scripts]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@l3 network-scripts]# 
[root@l3 network-scripts]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2

部署LVS-DR群集插图(22)

[root@l3 network-scripts]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@l3 network-scripts]# route add -host 192.168.18.100 dev lo:0
[root@l3 network-scripts]# 
[root@l3 network-scripts]# mount 192.168.18.40:/share/xy102 /usr/share/nginx/html
[root@l3 network-scripts]# df
文件系统                      1K-块    已用     可用 已用% 挂载点
devtmpfs                    1913544       0  1913544    0% /dev
tmpfs                       1930624       0  1930624    0% /dev/shm
tmpfs                       1930624   12568  1918056    1% /run
tmpfs                       1930624       0  1930624    0% /sys/fs/cgroup
/dev/mapper/centos-root    38770180 5441936 33328244   15% /
/dev/sda1                   1038336  191104   847232   19% /boot
tmpfs                        386128      12   386116    1% /run/user/42
tmpfs                        386128       0   386128    0% /run/user/0
/dev/sr0                    4635056 4635056        0  100% /mnt
192.168.18.40:/share/xy102 38770688 4584960 34185728   12% /usr/share/nginx/html
[root@l3 network-scripts]#
[root@l3 network-scripts]# ls /usr/share/nginx/html
test.html
[root@l3 network-scripts]# 

(4)调度器配置(一号机)

[root@l1 ~]# yum install -y ipvsadm
[root@l1 ~]# touch /etc/sysconfig/ipvsadm
[root@l1 ~]# systemctl start ipvsadm
[root@l1 ~]# systemctl status ipvsadm

部署LVS-DR群集插图(23)

[root@l1 ~]# systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@l1 ~]# 
[root@l1 ~]# modprobe ip_vs    //添加ip_vs模块
[root@l1 ~]# lsmod             //检查

部署LVS-DR群集插图(24)

[root@l1 ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@l1 ~]# 
[root@l1 ~]# ls
anaconda-ks.cfg       公共  视频  文档  音乐
initial-setup-ks.cfg  模板  图片  下载  桌面
[root@l1 ~]# ifconfig 
[root@l1 ~]# cd /etc/sysconfig/network-scripts/
[root@l1 network-scripts]# ls
ifcfg-ens33  ifdown-ppp       ifup-ib      ifup-Team
ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
ifdown       ifdown-sit       ifup-ipv6    ifup-tunnel
ifdown-bnep  ifdown-Team      ifup-isdn    ifup-wireless
ifdown-eth   ifdown-TeamPort  ifup-plip    init.ipv6-global
ifdown-ib    ifdown-tunnel    ifup-plusb   network-functions
ifdown-ippp  ifup             ifup-post    network-functions-ipv6
ifdown-ipv6  ifup-aliases     ifup-ppp
ifdown-isdn  ifup-bnep        ifup-routes
ifdown-post  ifup-eth         ifup-sit
[root@l1 network-scripts]# cp ifcfg-lo ifcfg-ens33:0
[root@l1 network-scripts]# vim !$
vim ifcfg-ens33:0

 部署LVS-DR群集插图(25)

DEVICE=ens33:0
IPADDR=192.168.18.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@l1 network-scripts]# systemctl restart network

部署LVS-DR群集插图(26)

[root@l1 network-scripts]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

部署LVS-DR群集插图(27)

[root@l1 network-scripts]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@l1 network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@l1 network-scripts]# 
[root@l1 network-scripts]# ipvsadm -C   //清空规则
[root@l1 network-scripts]# ipvsadm -A -t 192.168.18.100:80 -s rr   //添加规则指定调度算法
[root@l1 network-scripts]# ipvsadm -a -t 192.168.18.100:80 -r 192.168.18.20:80 -g   //-r 指定真实服务器
[root@l1 network-scripts]# ipvsadm -a -t 192.168.18.100:80 -r 192.168.18.30:80 -g
[root@l1 network-scripts]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  l1:http rr
  -> 192.168.18.20:http           Route   1      0          0         
  -> 192.168.18.30:http           Route   1      0          0         
[root@l1 network-scripts]# 
[root@l1 network-scripts]# ipvsadm-save -n > /opt/ipvsadm.bak   //保存规则
[root@l1 network-scripts]# 
[root@l1 network-scripts]# cat !$
cat /opt/ipvsadm.bak
-A -t 192.168.18.100:80 -s rr
-a -t 192.168.18.100:80 -r 192.168.18.20:80 -g -w 1
-a -t 192.168.18.100:80 -r 192.168.18.30:80 -g -w 1
[root@l1 network-scripts]# 

六、试验

为了防止试验结果有误,关闭nginx里面的长连接给关闭 (节点服务器 2.3号机)

[root@l2 network-scripts]# vim /etc/nginx/nginx.conf 
[root@l2 network-scripts]# systemctl restart nginx
[root@l2 network-scripts]# 

部署LVS-DR群集插图(28)

3号机如上 

一号机

[root@l1 network-scripts]# 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.18.100:80 rr
  -> 192.168.18.20:80             Route   1      0          0         
  -> 192.168.18.30:80             Route   1      0          0         
[root@l1 network-scripts]# 

部署LVS-DR群集插图(29)

 部署LVS-DR群集插图(30)

本站无任何商业行为
个人在线分享 » 部署LVS-DR群集
E-->