一台虚拟机搞定负载均衡lvs-NAT模式和lvs-DR模式搭建

版权声明: https://blog.csdn.net/qq_32157851/article/details/84313501

首先来说一下负载均衡,为了解决一个服务器不能支撑大并发量用户的访问,所以通过负载均衡的方法来解决这个问题,负载均衡有两种实现方案,一种是通过硬件来实现可以购买 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

7)vip在lvs服务器上绑定的时候需要在  eth0上绑定,而不能在lo上

猜你喜欢

转载自blog.csdn.net/qq_32157851/article/details/84313501