什么是LVS以及搭建LVS负载均衡群集(下)

简介: 什么是LVS以及搭建LVS负载均衡群集(下)

NFS共享存储配置


—————————————————————————————————————华丽分割线————————————————————————————————————
NFS简介:
NFS即Network File System,网络文件系统
安装使用前提:(1)依赖于RPC(远程过程调用)
             (2)需要安装nfs-utils(NFS共享发布和访问)、rpcbind(rpc支持)软件包
             (3)系统服务:nfs、rpcbind
             (4)共享配置文件:/etc/exports
——————————————————————————————————————————————————————————————————————————————————
******(1)使用yum安装nfs-utils、rpcbind软件包
[root@nfs ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@nfs ~]# yum -y install nfs-utils rpcbind
。。。。。。
完毕!
******(2)设置为开机自启
[root@nfs ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs ~]# systemctl enable rpcbind
******(3)设置共享目录(配置文件为/etc/exports)
[root@nfs ~]# mkdir -p /opt/web1 /opt/web2(创建共享目录)
[root@nfs ~]# vim /etc/exports (编写配置文件)
————————————————————————————————————————
语法结构为:目录位置 客户机地址(权限操作)
权限操作有:(1)rw 读写
           (2)sync 同步写入
           (3)no_用户名_squash 客户机以指定用户访问时赋予本地root权限
————————————————————————————————————————
写入:
/opt/web1 192.168.100.2(rw,sync,no_root_squash)
/opt/web2 192.168.100.3(rw,sync,no_root_squash)
保存退出
******(4)启动nfs和rpcbind服务(要注意要先启动rpcbind在启动nfs)
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# netstat -anpt | grep rpcbind (查看端口)
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      16313/rpcbind       
tcp6       0      0 :::111                  :::*                    LISTEN      16313/rpcbind       
******(5)查看本机发布的NFS共享目录
[root@nfs ~]# showmount -e  (查看本机发布的共享目录)
Export list for nfs:
/opt/web2 192.168.100.3
/opt/web1 192.168.100.2
————————————————————————————————————————
showmount -e 服务器ip地址    (从客户机上查看NFS服务器的共享情况,是从客户机上打的)
————————————————————————————————————————

Web1配置


******(1)安装httpd、nfs、rpcbind
[root@web1 ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@web1 ~]# yum -y install httpd nfs-utils rpcbind
。。。。。。
完毕!
******(2)查看nfs服务器的共享情况
[root@web1 ~]# systemctl enable rpcbind (设置为开机自启)
[root@web1 ~]# systemctl start rpcbind  (开启rpcbind服务)
[root@web1 ~]# showmount -e 192.168.100.4  (查看nfs共享服务器的共享情况)
Export list for 192.168.100.4:
/opt/web2 192.168.100.3
/opt/web1 192.168.100.2
******(3)挂载nfs服务器的共享目录到本地的网页目录
[root@web1 ~]# mount 192.168.100.4:/opt/web1 /var/www/html/
[root@web1 ~]# df -hT  (查看挂载情况)
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.7G   16G   10% /
/dev/sda1               xfs      1014M  137M  878M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /media/cdrom
192.168.100.4:/opt/web1 nfs4       17G  1.7G   16G   10% /var/www/html
******(4)编写网页、配置自动挂载
[root@web1 ~]# echo "11111111111111111111" > /var/www/html/index.html (编写网页)
[root@web1 ~]# echo "192.168.100.4:/opt/web1 /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab  (配置自动挂载)
******(5)配置httpd开机自启并启动
[root@web1 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# curl 127.0.0.1 (本地测试)
11111111111111111111

Web2配置


与Web1相同,网页编写不同即可,这里就不写步骤了
[root@web2 ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@web2 ~]# yum -y install httpd nfs-utils rpcbind
。。。。。。
完毕!
[root@web2 ~]# systemctl enable rpcbind
[root@web2 ~]# systemctl start rpcbind
[root@web2 ~]# showmount -e 192.168.100.4
Export list for 192.168.100.4:
/opt/web2 192.168.100.3
/opt/web1 192.168.100.2
[root@web2 ~]# mount 192.168.100.4:/opt/web2 /var/www/html/
[root@web2 ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.7G   16G   10% /
/dev/sda1               xfs      1014M  137M  878M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /media/cdrom
192.168.100.4:/opt/web2 nfs4       17G  1.7G   16G   10% /var/www/html
[root@web2 ~]# echo "2222222222222222" > /var/www/html/index.html
[root@web2 ~]# echo "192.168.100.4:/opt/web2 /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab 
[root@web2 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# curl 127.0.0.1
2222222222222222


测试

这个时候可以先看一下nfs共享存储中是否共享成功
[root@nfs ~]# cat /opt/web1/index.html 
11111111111111111111
[root@nfs ~]# cat /opt/web2/index.html 
2222222222222222
发现已经共享成功

打开客户机win7,访问200.0.0.1调度器的外网网址


20210205185512164.png

2021020518552852.png

如果做到最后,win7测试无法访问,那么要看一下调度器的配置是不是错了,使用ipvsadm -ln 查看TCP的那一行是否是外网地址,我的外网地址是200.0.0.1:80


20210205185758765.png


三、搭建LVS负载均衡群集(DR模式)


因为net模式是把调度器当作网关,所以当数据量大的时候容易造成网络瓶颈,而TUN模式浪费了太多的公网ip资源,工作中很少使用TUN模式的,所以在工作中最常用的是DR模式


这里的基础配置和NAT模式是相同的,所以就不做解释了


(1)环境修改


名称 ip地址 扮演角色 网卡
LVS 192.168.100.1 200.0.0.1 LVS负载调度器 ens33(VM1网卡) ens37(VM2网卡)
Web1 192.168.100.2 200.0.0.10 web服务器 ens33(VM1网卡)ens37(VM2网卡)
Web2 192.168.100.3 200.0.0.20 web服务器 ens33(VM1网卡)ens37(VM2网卡)
NFS 192.168.100.4 nfs共享存储 ens33(VM1网卡)
win7 200.0.0.2 客户机 VM2网卡


Web群集ip为200.0.0.100,可以多加几台节点服务器,但是都必须是双网卡


(2)实验步骤(NAT模式的基础上)


LVS调度器配置

做完NAT模式的配置即可,然后配置群集接口(即安装ipvsadm等软件)
******(1)配置群集接口(虚拟接口)
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp ifcfg-ens37 ifcfg-ens37:0 (复制外网网卡配置到群集接口)
[root@lvs network-scripts]# vim ifcfg-ens37: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=ens37:0
DEVICE=ens37:0
ONBOOT=yes
IPADDR=200.0.0.100
PREFIX=24
IPV6_PRIVACY=no
保存退出
[root@lvs network-scripts]# ifup ens37:0   (开启新编写的群集接口)
[root@lvs network-scripts]# ifconfig ens37:0  (查看是否配置成功)
ens37:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 200.0.0.100  netmask 255.255.255.0  broadcast 200.0.0.255
        ether 00:0c:29:44:ad:e5  txqueuelen 1000  (Ethernet)
[root@lvs network-scripts]# cd
******(2)调整/proc内核参数,关闭重定向响应
[root@lvs ~]# vim /etc/sysctl.conf 
修改为:
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens37.send_redirects = 0
保存退出
[root@lvs ~]# sysctl -p (立即应用策略)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens37.send_redirects = 0
******(3)配置LVS-DR的配置策略
[root@lvs ~]# ipvsadm -C  (清空策略)
[root@lvs ~]# ipvsadm -ln (查看策略,确认已经成功清空)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs ~]# ipvsadm -A -t 200.0.0.100:80 -s rr    (编写策略)
[root@lvs ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.10:80 -g -w 1[root@lvs ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.20:80 -g -w 1 
[root@lvs ~]# ipvsadm-save >/etc/sysconfig/ipvsadm  (保存策略)
[root@lvs ~]# cat /etc/sysconfig/ipvsadm     (确认无误)
-A -t lvs:http -s rr
-a -t lvs:http -r 200.0.0.10:http -g -w 1
-a -t lvs:http -r 200.0.0.20:http -g -w 1
[root@lvs ~]# systemctl enable ipvsadm
[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  200.0.0.100:80 rr
  -> 200.0.0.10:80                Route   1      0          0         
  -> 200.0.0.20:80                Route   1      0          0    

Web1配置

******(1)配置新添加的网卡
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@web1 network-scripts]# vim ifcfg-ens37
[root@web1 network-scripts]# systemctl restart network
[root@web1 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bc:67:07 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.2/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::2ff4:55fa:6c3d:65e0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bc:67:11 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.10/24 brd 200.0.0.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::b4fc:9eac:9686:e7e9/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
******(2)配置群集接口
[root@web1 network-scripts]# vim ifcfg-lo:0 (配置群集接口)
写入:
DEVICE=lo:0
ONBOOT=yes
IPADDR=200.0.0.100       (地址填群集地址,即调度器ens37:0的地址)
NETMASK=255.255.255.255  (这里的掩码必须全为255)
保存退出
[root@web1 network-scripts]# ifup ifcfg-lo:0  (启用网卡)
[root@web1 network-scripts]# ifconfig lo:0  (查看是否配置成功)
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@web1 network-scripts]# cd
******(3)调整/proc内核参数,关闭ARP响应
[root@web1 ~]# vim /etc/sysctl.conf 
修改:
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1
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
保存退出
[root@web1 ~]# sysctl -p  (立即生效)
net.ipv4.conf.all.arp_ignore = 1
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
******(4)添加到群集ip地址的本地路由记录
[root@web1 ~]# vim /etc/rc.local 
修改:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/sbin/route add -host 200.0.0.100 dev lo:0
保存退出
[root@web1 ~]# route add -host 200.0.0.100 dev lo:0

Web2配置(与Web1相同)

[root@web2 ~]# cd /etc/sysconfig/network-scripts/
[root@web2 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@web2 network-scripts]# vim ifcfg-ens37
修改为:
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=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=200.0.0.20
PREFIX=24
IPV6_PRIVACY=no
保存退出
[root@web2 network-scripts]# systemctl restart network
[root@web2 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ab:11:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.3/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::32ab:5b77:3fc:bf01/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ab:11:65 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.20/24 brd 200.0.0.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::ccb4:e801:7f4d:af22/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever            
[root@web2 network-scripts]# cat <<aa> ifcfg-lo:0
> DEVICE=lo:0
> ONBOOT=yes
> IPADDR=200.0.0.100
> NETMASK=255.255.255.255
> aa
[root@web2 network-scripts]# ifup ifcfg-lo:0
[root@web2 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@web2 network-scripts]# cat <<aa>> /etc/sysctl.conf 
> net.ipv4.conf.all.arp_ignore = 1
> 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
> aa
[root@web2 network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
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
[root@web2 network-scripts]# echo "/sbin/route add -host 200.0.0.100 dev lo:0" >> /etc/rc.local 
[root@web2 network-scripts]# route add -host 200.0.0.100 dev lo:0

NFS共享存储无需修改


测试


使用客户机Win7测试,查看是否来回切换


第一次访问


20210206165738721.png

第二次访问


20210206165751431.png


至此LVS负载均衡群集的DR模式搭建完成!!!!

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6月前
|
负载均衡 应用服务中间件 Linux
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
|
6月前
|
存储 负载均衡 网络协议
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
107 0
|
5月前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
183 0
|
7月前
|
存储 负载均衡 应用服务中间件
LVS负载均衡群集——NAT模式实操
LVS负载均衡群集——NAT模式实操
199 0
|
3月前
|
缓存 负载均衡 应用服务中间件
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
在本章内容中,我们将深入探讨 Tomcat 服务器的运行架构、LVS 负载均衡的运行机制以及 Cache 缓存机制,并提供相应的解决方案和指导。通过理解这些关键概念和机制,您将能够优化您的系统架构,提高性能和可扩展性。
206 4
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
|
5月前
|
负载均衡 算法 网络协议
Keepalived+LVS搭建高可用负载均衡
Keepalived+LVS搭建高可用负载均衡
180 1
|
6月前
|
负载均衡 应用服务中间件 nginx
71分布式电商项目 - nginx高可用以及lvs+nginx负载均衡(资料)
71分布式电商项目 - nginx高可用以及lvs+nginx负载均衡(资料)
41 0
|
7月前
|
存储 负载均衡 网络协议
LVS负载均衡群集—DR直接路由
LVS负载均衡群集—DR直接路由
65 0
|
15天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
31 0
|
5天前
|
负载均衡 应用服务中间件 nginx
Nginx 负载均衡
Nginx 负载均衡
20 2