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

一、什么是LVS、群集的概述

(1)群集技术概述

  • 在互联网中,站点对硬件性能、响应速度、服务器稳定性、数据可靠性的要求是很高的
  • 因为单台服务器难以承担所有访问的需求,所以就有了多种解决方案:
    (1)使用大型机——价格昂贵
    (2)专用负载分流设备——资源浪费
    (3)构建集群服务器——通过整合多台相对价格低廉的普通服务器,以同一个地址对外提供服务

——而LVS就是企业中常用的一种群集(cluster)服务 (即Linux Virtual Server虚拟服务器)

扩展:
Linux Virtual Server是Linux内核的一部分,是针对Linux内核的负载均衡解决方案
Linux Virtual Server是在1998年5月由我国章文嵩博士创建,官方网站为:http://www.linuxvirtualserver.org/ 有兴趣可以去看一看

(2)群集的含义

别名: Cluster、集群、群集
含义: 即由多台节点服务器 (至少两台节点服务器) 构成,但是对外只表现为一个整体,即只提供一个访问接口 (这个访问接口可以是域名或ip)

(3)群集的类型

  • 负载均衡群集(Load Balancer)
    主要是提高应用系统的响应能力,从而获得高并发、高负载然后提高整体性能
    例: DNS轮询、应用层交换、反向代理等
  • 高可用群集(High Available)
    主要是提高应用系统的可靠性,使用两台或多台节点服务器进行切换等
    例: 故障切换、双击热备、多机热备
    工作方式主要是:
    1.双工:所有节点同时在线
    2.主从:主节点在线,从节点在主节点发生故障时自动切换为主节点
  • 高性能运算群集(High Performance Computer,这个用的比较少)
    主要是提高应用系统的CPU运算速度,扩展硬件资源和分析能力
    例: 云计算、网格计算,依赖于分布式计算和并行计算
    ————在特殊环境中可以合并使用这几种群集模式,我们这里只说负载均衡群集————

(4)负载均衡群集的结构

负载均衡的结构

  • 第一层:负载调度器 (Load Balancer或Director,至少需要一个)
    即访问这个群集系统的唯一入口,对外为VIP地址 (虚拟ip/群集ip地址) ,通常配置为主、从方式的双击热备,确保群集的高可用性
  • 第二层:服务器池 (Server Pool,这里使用的是大量的真实服务器)
    首先每个节点都有独立的rip (即真实ip) ,这里的节点服务器只处理调度器分发的客户机请求,当某个节点服务器暂时失效时,负责调度器的容错机制会将其隔离,在错误排除后再重新纳入服务器池
  • 第三层:共享存储 (Share Storage)
    这里是为服务器池提供稳定的、一致的文件存储服务,确保群集的数据统一性,可以使用NAS设备或者搭建NFS共享服务的专用服务器

(5)负载均衡群集的工作模式

工作模式有: 基于ip、端口、内容等,基于ip的工作模式效率是最高的
因为在工作中一般使用最多的是基于ip的工作模式,所以这里只说基于ip的模式

地址转换模式(NAT模式)

NAT模式
原理: 调度器为节点服务器的网关,是客户机的访问入口和各节点服务器的回应出口。即调度器同时提供访问入口和回应出口
结构: 服务器和调度器使用私有ip,在同一物理网络,安全性优于IP隧道模式和直接路由模式

IP隧道模式(TUN模式)

ip隧道模式
原理: 调度器为客户机的访问入口,节点服务器通过专用ip隧道与调度器互相通信,然后节点服务器直接回应客户机。即客户机访问调度器,调度器通过专用ip隧道和节点服务器进行通信,再通过节点服务器直接回应客户机
结构: 是开放式的网络结构,节点服务器都具有独立的公网ip,分散在不同的地方,可以直接回应客户机

直接路由模式(DR模式)

直接路由模式
原理: 调度器只为客户机提供访问入口,然后传给节点服务器,再通过节点服务器直接回应客户机。即客户机访问调度器,调度器通过本地网络和节点服务器进行通信,然后节点服务器直接回应客户机
结构: 是半开放式的网络结构,节点服务器集中在一起,和调度器在同一物理网络,通过本地连接
——————————————————总结——————————————————
NAT模式只需要一个公网ip,最易于使用,而且安全性高,许多硬件负载均衡器会采用。DR模式和TUN模式的负载能力更强大,使用的范围更广,但是节点的安全性稍微低一点。
——————————————————————————————————————

(6)LVS的负载调度算法一般分为:

  • 轮询(Round Robin): 按照顺序轮流分配,不管实际连接数和系统负载
  • 加权轮询(Weighted Round Robin): 自动查询各节点的负载情况,动态调整其权重
  • 最少连接(Least Connections): 优先分配给连接数最少的节点
  • 加权最少连接(Weighted Least Connections): 服务器节点性能差异大时,自动调整权重,权重高的承担更大比例的活动连接负载

二、搭建LVS负载均衡群集(NAT模式)

本次实验的操作系统均为Centos7

(1)实验环境

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

内网的Web1、Web2的网关要指向调度器

(2)实验步骤

首先先把各个服务器的ip配置好,并且ping通,关闭防火墙、Selinux等(略)

LVS调度器配置

******1)进行基础配置
[root@lvs ~]# 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:44:ad:db brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::7762:f351:dbfc:cb0e/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:44:ad:e5 brd ff:ff:ff:ff:ff:ff
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp ifcfg-ens33 ifcfg-ens37 (复制原来的网卡ens33到新的网卡)
[root@lvs 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.1
PREFIX=24
IPV6_PRIVACY=no
保存退出
[root@lvs network-scripts]# systemctl restart network (重启网卡)
[root@lvs 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:44:ad:db brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::7762:f351:dbfc:cb0e/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:44:ad:e5 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.1/24 brd 200.0.0.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::18f:b43e:375e:defb/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@lvs network-scripts]# cd
******2)加载LVS模块,查看内核是否支持LVS
[root@lvs ~]# modprobe ip_vs  (加载模块)
[root@lvs ~]# cat /proc/net/ip_vs  (确认内核支持LVS)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
******3)因为调度器充当网关的角色,所以要开启路由功能
[root@lvs ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
******4)使用yum安装ipvsadm
[root@lvs ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@lvs ~]# yum -y install ipvsadm
。。。。。。
完毕!
[root@lvs ~]# ipvsadm -v (查看版本)
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
******5)使用ipvsadm
————————————————————————————————华丽分割线——————————————————————————————————
ipvsadm的相关命令
格式: ipvsadm  选项  
-A 后面跟-t的虚拟ip地址以及端口号加-s选择负载调度算法 (添加虚拟服务器)
如:ipvsadm -A -t 200.0.0.180 -s rr
-t 后面跟vip地址以及tcp端口号   (vip就是虚拟ip,必须是本机的真实ip地址)
-s 选择负载调度算法(轮询为rr、加权轮询为wrr、最少链接为lc、加权最少连接为wlc)
-a 后面跟-t的虚拟ip以及端口号加-r的真实ip以及端口号加选择什么模式如-m选择net模式最后加-w设置权重 (添加节点服务器)
如:ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.2:80 -m -w 1
-r 后面跟rip地址以及tcp端口     (rip就是真实ip)
-m 使用nat群集模式
-g 使用DR模式
-i 使用TUN模式
-w 设置权重(0时暂停节点)
-d 后面跟-r的真实ip以及端口加-t的虚拟ip地址以及端口(删除单个节点)
如:ipvsadm -d -r 192.168.100.2:80 -t 200.0.0.1:80
-D 后面跟-t的虚拟ip以及端口 (删除整个虚拟服务器)
如:ipvsadm -D -t 200.0.0.1:80
-C 清空策略
———————————————————————————————————————————————————————————————————————————
[root@lvs ~]# ipvsadm -A -t 200.0.0.1:80 -s rr  (创建虚拟服务器)
[root@lvs ~]# ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.2:80 -m -w 1 (创建节点服务器)
[root@lvs ~]# ipvsadm -a -t 200.0.0.1:80 -r 192.168.100.3:80 -m -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 192.168.100.2:http -m -w 1
-a -t lvs:http -r 192.168.100.3:http -m -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  200.0.0.1:80 rr
  -> 192.168.100.2:80             Masq    1      0          0         
  -> 192.168.100.3:80             Masq    1      0          0         
[root@lvs ~]# systemctl enable ipvsadm (设置开机自启)
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@lvs ~]# systemctl start ipvsadm (开启服务)

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

三、搭建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测试,查看是否来回切换
第一次访问
第一次
第二次访问
第二次
至此LVS负载均衡群集的DR模式搭建完成!!!!

猜你喜欢

转载自blog.csdn.net/rzy1248873545/article/details/113646880