1.负载均衡集群的概述
所有节点的工作内容一致,做的都是同一件事,互相分担节点服务器的压力。如访问量,单台节点的访问量不能够很好的满足客户端的访问,这个时候,我们就可以增加服务器的数量来解决这个问题,这样就可以很好的提高用户访问的效率
2.集群中各节点的特点
每台服务器分担集群节点的压力、工作目标明确、工作内容一致、提供的是工作效率
3.LVS负载均衡集群的分类
模式 | 工作原理 |
---|---|
LVS-DR模式 | 又叫直接路由模式,客户端发送一个包含VIP地址的请求到负载调度器上,负载调度器根据算法提交给内网真实服务器处理,然后内网真实服务器直接返回给客户端。唯一的好处就是返回的数据包不经过负载调度器,减轻了负载调度器的压力 |
LVS-NAT模式 | 客户端请求负载调度器,负载调度器根据NAT地址转换功能,将请求发送给内网真实服务器去处理,真实服务处理了之后返回负载调度器,再由负载调度器返回给客户端。整个过程都要经过负载调度器,极大的增加负载调度器的压力 |
准备工作
1.准备三台centos 7 的操作系统
2.一台为LVS负载调度器、两台为httpd服务器
3.LVS负载调度器上存在两张网卡,一张内网网卡,主要连接两台httpd服务器的。一张外网,主要和外网进行通信
3.两台httpd服务器存在于内网当中
关闭防火墙、selinux以及网卡守护进程
[root@lvs-dr ~]# systemctl stop firewalld
[root@lvs-dr ~]# systemctl disable firewalld
[root@lvs-dr ~]# vi /etc/selinux/config
......
SELINUX=disabled
......
[root@lvs-dr ~]# setenforce 0
[root@lvs-dr ~]# systemctl stop NetworkManager //关闭网卡守护进程
[root@lvs-dr ~]# systemctl disable NetworkManager
注:所有系统均有执行以上操作
Lvs-dr 负载调度器的配置
[root@lvs-dr ~]# vi /etc/sysctl.conf //编辑这个文件
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@lvs-dr ~]# sysctl -p //执行这个生效
[root@lvs-dr ~]# yum install -y ipvsadm //安装ipvsadm软件
[root@lvs-dr ~]# modprobe ip_vs //把ipvsadm加载到内核当中去
[root@lvs-dr ~]# ipvsadm -Ln //查看当前ipvsadm的状态
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lvs-dr ~]# cd /etc/sysconfig/network-scripts/ //进入网卡配置文件所在的目录
[root@lvs-dr network-scripts]# cp -r ifcfg-ens33 ifcfg-ens33:0 //复制内网网卡作为子网卡
[root@lvs-dr network-scripts]# vi ifcfg-ens33:0 //编辑这张网卡,修改如下的内容
IPADDR=192.168.1.150 //修改IP地址
NAME="ens33:0" //修改名称
#UUID="76ac6300-c65f-4cae-baa5-ca12c5bdcde0" //注释这一行
DEVICE="ens33:0"
[root@lvs-dr network-scripts]# systemctl restart network //然后重启网卡即可
[root@lvs-dr network-scripts]# ip a //使用这个命令就可以查看得到我们配置的效果了
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d8:b0:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.1.150/24 brd 192.168.1.255 scope global secondary ens33:0
以上操作完成以后,我们就可以添加集群以及主机了
[root@lvs-dr ~]# ipvsadm -A -t 192.168.1.150:80 -s rr //创建一个集群
[root@lvs-dr ~]# ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.20:80 -g //为集群添加主机
[root@lvs-dr ~]# ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.30:80 -g
[root@lvs-dr ~]# 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.1.150:80 rr
-> 192.168.1.20:80 Route 1 0 0
-> 192.168.1.30:80 Route 1 0 0
注:-A 创建一个集群 -t 指定VIP 地址 -s 指定算法 rr 代表轮询 -a 添加主机 -g 代表 lvs-dr 模式
优化操作
[root@lvs-dr ~]# ipvsadm -Sn //保存配置
-A -t 192.168.1.150:80 -s rr
-a -t 192.168.1.150:80 -r 192.168.1.20:80 -g -w 1
-a -t 192.168.1.150:80 -r 192.168.1.30:80 -g -w 1
[root@lvs-dr ~]# echo "ipvsadm -Sn" >> /etc/sysconfig/ipvsadm //将输出的内容保存到一个文件当中
[root@lvs-dr ~]# ipvsadm -C //清除当前ipvsadm的所有配置
[root@lvs-dr ~]# ipvsadm-restore < /etc/sysconfig/ipvsadm //重新加载配置
[root@lvs-dr ~]# echo "ipvsadm-restore < /etc/sysconfig/ipvsadm" >> /etc/rc.local //加入到开机自启
[root@lvs-dr ~]# ipvsadm -Ln --stats //查看状态
IP Virtual Server version 1.2.1 (size=4096)
[root@lvs-dr ~]#
[root@lvs-dr ~]# ipvsadm -Sn
-A -t 192.168.1.150:80 -s rr
-a -t 192.168.1.150:80 -r 192.168.1.20:80 -g -w 1
-a -t 192.168.1.150:80 -r 192.168.1.30:80 -g -w 1
httpd服务器的配置
[root@server1 ~]# yum install -y httpd //下载httpd服务器
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# systemctl enable httpd
[root@server1 ~]# echo "this is server 1" >> /var/www/html/index.html
[root@server1 ~]# curl localhost
this is server 1
注:两台httpdserver 都要执行以上操作,唯一不同的就是网页的内容,尽量让他们不一样,虽然在真实环境下所有真实服务器的内容都是一致,为了实现实验的效果,只好将他们设置为不一样
以上操作完成以后,在来执行以下操作(两台httpd服务器操作一致)
[root@server1 ~]# cd /etc/sysconfig/network-scripts/ //进入网卡配置文件
[root@server1 network-scripts]# cp -r ifcfg-lo ifcfg-lo:0 //复制回环网卡增加一个子网卡
[root@server1 network-scripts]# vi ifcfg-lo:0 //修改这个网卡,修改如下内容
DEVICE=lo:0
IPADDR=192.168.1.150
NETMASK=255.255.255.255
为了访问IP地址方式冲突我们进行修改arp的相应级别操作
[root@server1 network-scripts]# vi /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
[root@server1 network-scripts]# sysctl -p //执行这个生效
[root@server1 ~]# systemctl restart network //重启网卡操作
[root@server1 ~]# 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
inet 192.168.1.150/32 brd 192.168.1.150 scope global lo:0
valid_lft forever preferred_lft forever
然后我们添加一条路由(当来自192.168.1.150的数据都交给lo:0网卡去处理)
[root@server1 ~]# route add -host 192.168.1.150 dev lo:0
[root@server1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.1.150 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@server1 ~]# echo "route add -host 192.168.1.150 dev lo:0" >> /etc/rc.local //写入到开机自动
验证测试
第一次访问
当我们不断点击刷新按钮时(就会在两个服务器之间来回切换)
负载调度器上查看分担的量
[root@lvs-dr ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.1.150:80 6 191 0 52055 0
-> 192.168.1.20:80 3 121 0 34211 0
-> 192.168.1.30:80 3 70 0 17844 0
以上就是LVS-DR 模式的构建
我们基于以上的主机来创建,因为我之前拍摄的有快照,所有这里就直接恢复然后进行操作了
lvs-nat 负载调度器的配置
[root@lvs-nat ~]# vi /etc/sysctl.conf //编辑这个文件
net.ipv4.ip_forward = 1 //开启路由转发功能
[root@lvs-nat ~]# sysctl -p
[root@lvs-nat ~]# yum install -y ipvsadm //安装ipvsadm
[root@lvs-nat ~]# ipvsadm -A -t 10.1.1.10:80 -s rr //创建集群并且添加主机
[root@lvs-nat ~]# ipvsadm -a -t 10.1.1.10:80 -r 192.168.1.20:80 -m
[root@lvs-nat ~]# ipvsadm -a -t 10.1.1.10:80 -r 192.168.1.30:80 -m
[root@lvs-nat ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.10:80 rr
-> 192.168.1.20:80 Masq 1 0 0
-> 192.168.1.30:80 Masq 1 0 0
注:这里的集群对外的IP地址为负载调度器上外网卡的IP地址
优化操作 和LVS-DR模式的一致,这里就不写了
httpd服务器的配置 (两台服务器的操作一致)
[root@server2 ~]# yum install -y httpd
[root@server2 ~]# systemctl start httpd
[root@server2 ~]# echo "this is server 1" >> /var/www/html/index.html
[root@server2 ~]# curl localhost
this is server 1
这里还是一样,两台服务器的内容一致,主要好区分效果
然后我们为两台服务器添加网关,网关指向负载调度器上内网网卡的IP地址
[root@server2 ~]# echo "GATEWAY=192.168.1.10" >>/etc/sysconfig/network-scripts/ifcfg-ens33
[root@server2 ~]# systemctl restart network