首先来说一下负载均衡,为了解决一个服务器不能支撑大并发量用户的访问,所以通过负载均衡的方法来解决这个问题,负载均衡有两种实现方案,一种是通过硬件来实现可以购买 f5设备,一种是通过软件来实现如lvs、nginx等,由于lvs直接是linux系统内核级别的,实现起来方便所以仙子主要讲解lvs实现负载均衡。、
lvs实现负载均衡有三种模式,分别是 NAT、DR、TUN模式,我只学习了NAT模式和DR模式的,现在主要讲解怎么搭建NAT、DR模式。nat 叫做地址转换,dr叫做直接路由、tun叫隧道。
一、 NAT模式搭建的环境准备
首先准备一台安装了centos 7的虚拟机,然后完整克隆出几台虚拟机,克隆出来的虚拟机需要需改几个地方,第一个地方就是网卡的地方 vi /etc/sysconfig/network-script/ifcfg-eth0 里面的 HWADDR 值需要修改,这个值是mac地址,还有一个需要修改的就是UUID ,这个也要修改称不一样的,然后重启网卡。
1、准备工作
1)首先,关闭防火墙,setenforce 0
2)在要当作lvs服务器上安装ipvsadm
yum install ipvsadm -y
2、网络拓扑搭建
LVS Director机器:
公网地址:vip
主机名:lvs
vip地址: 192.168.0.200
子网掩码:255.255.255.0
网关: 192.168.0.1
网络连接方式:Bridge
私网地址:dip
主机名:lvs
dip地址: 172.16.100.1
子网掩码:255.255.0.0
网关: 不指定网关
网络连接方式:Host-Only
RealServer机器:
私网地址:rip1
主机名:web1
rip1地址:172.16.100.10
子网掩码:255.255.0.0
网关: 172.16.100.1
网络连接方式:Host-Only
私网地址:rip2
主机名:web2
rip1地址:172.16.100.11
子网掩码:255.255.0.0
网关: 172.16.100.1
网络连接方式:Host-Only
3、在RealServer上部署httpd服务并测试
安装httpd服务,创建httpd测试页面,启动httpd服务
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# service httpd start
[root@web1 ~]# echo "RS1-web1 Allentuns.com" > /var/www/html/index.html
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo "RS2-web2 Allentuns.com" > /var/www/html/index.html
[root@web2 ~]# service httpd start
测试httpd服务是否OK!
[root@web1 ~]# curl http://localhost RS1-web1 Allentuns.com
[root@web1 ~]# curl http://172.16.100.11 RS2-web2 Allentuns.com
[点击并拖拽以移动]
4、在Director上部署ipvs服务并测试
(1)安装ipvsadm
[root@LVS ~]# yum -y install ipvsadm
(2)添加集群服务
[root@LVS ~]# ipvsadm -A -t 192.168.0.200:80 -s rr #定义一个集群服务
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 172.16.100.10 -m #添加RealServer并指派调
度算法为NAT
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 172.16.100.11 -m #添加RealServer并指派调度算法为NAT
[root@LVS ~]# ipvsadm -L -n #查看ipvs定义的规则列表 IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.200:80 rr
-> 172.16.100.10:80 Masq 1 0 0
-> 172.16.100.11:80 Masq 1 0 0
[root@LVS ~]# cat /proc/sys/net/ipv4/ip_forward #查看Linux是否开启路由
转发功能 0
[root@LVS ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #启动Linux的路由转发功
能 [root@LVS ~]# cat /proc/sys/net/ipv4/ip_forward 1
(3)测试访问http页面
[root@LVS ~]# curl http://192.168.0.200/index.html RS2-web2 Allentuns.com #第一次是web2
[root@LVS ~]# curl http://192.168.0.200/index.html RS1-web1 Allentuns.com #第二次是web1
[root@LVS ~]# curl http://192.168.0.200/index.html RS2-web2 Allentuns.com #第三次是web1
[root@LVS ~]# curl http://192.168.0.200/index.html RS1-web1 Allentuns.com #第四次是web2
(4)永久保存LVS规则并恢复
第一种方法:
[root@LVS ~]# service ipvsadm save ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
第二种方法:
[root@LVS ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1
模拟清空ipvsadm规则来恢复
[root@LVS ~]# ipvsadm -C
[root@LVS ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS ~]# ipvsadm -R < /etc/sysconfig/ipvsadm.s1
[root@LVS ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.200:80 wrr
-> 172.16.100.10:80 Masq 3 0 0
-> 172.16.100.11:80 Masq 1 0 0
二、 DR模式搭建的环境准备
1、在自己的虚拟机上操作需要准备5台Linux系统,一台模拟客户端、一台模拟路由器、一台模拟lvs服务器,剩下两台模拟realServer,作为后台服务的提供者。这里的五台虚拟机都是克隆出来的话,需要注意的是网卡配置信息里的HWADDR和uuid要与其他的都不同。
2、网络拓扑的搭建,我认为这一步是最难的,首先ip、网段、路由、后台的httpd服务都要搞好,这些做完以后配置lvs其实很容易,我搭建dr模式大部分时间也是花费在了网络拓扑的搭建。
3、具体搭建内容太多,说几个重要的地方吧,也是我踩得坑,第一要模拟内外网,客户端的掩码和内网的掩码要一样,这点是经验之谈,然后网段可以不一样,比如外网模拟 192.168.0.22 ,内网模拟 192.168.30.100 ,然后客户端的网卡需要通过桥接模式 ,而路由器需要两块网卡 与外网相通的需要桥接模式,与内网相通的是仅主机模式,然后各网卡的hwaddr 与uuid 都需要不同-----这点我深受其害。
4、然后就是搭建dr模式
1)首先在两台real server上执行下面的命令
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2)并且将vip设置到回环网卡中
ip a a vip/32 dev lo
3)lvs服务器上的操作
一定要关闭防火墙,
4)配置命令
ipvsadm -A -t 192.168.30.98:80 -s rr
ipvsadm -a -t 192.168.30.98:80 -r 192.168.30.100 -g
ipvsadm -a -t 192.168.30.98:80 -r 192.168.30.101 -g
5)在lvs服务器上将vip加入到 dip网卡上
ip a a 192.168.30.98/32 dev eth0
6)网卡文件配置完以后都需要进行重启完卡
systemctl restart network
7)在客户端可以通过curl 命令来测试
下面说一下过程中遇到的一些阻力
1)由于我的linux系统都是克隆出来的,所以有的网卡中的hwaddr 与 uuid没有修改成不同的
2)模拟路由器的那台设备 需要开启路由功能
echo net.ipv4.ip_forward =1 >> /etc/sysctl.conf
sysctl -p
iptables -vnL
3)还有就是在最后网络拓扑都已经配置完以后client端死活ping不通内网ip,最后发现是因为 lvs服务得防火墙没有关掉导致
4)每个服务器都要执行 setenforce 0
5)学到的一些命令
route add default gw 192.168.30.1 --------------添加网关
route -nn 查看网关
tcpdump -i eth0 -nn port 80 ----------------抓包,获取80端口的包
tcpdump -i eth0 -nn icmp -----------------抓icmp包
还有就是安装完httpd服务以后,,直接像 /var/www/html 下写文件 vi index.html
启动 httpd服务 systemctl restart httpd
ipvsadm -A -t 192.168.30.98 -s rr 添加调度算法
ipvsadm -a -t 192.168.30.98:80 -g 添加策略位dr模式
永久保存lvs配置 ipvsadm -S -n > /etc/sysconfig/ipvsadm
重启服务器以后恢复配置 ipvsadm -R < /etc/sysconfig/ipvsadm
查看服务器配置信息 ipvsadm -Ln
6)这里要注意vip 子网掩码是32位 255.255.255.255,后端服务器的虚拟IP必须绑定到lo:0上,同时指定子网掩码是255.255.255.255,否则ARP禁用会出现异常。
7)vip在lvs服务器上绑定的时候需要在 eth0上绑定,而不能在lo上