环境开始的准备:所有的主机关闭防火墙和selinux
一、NAT模式集群
NAT也就是网络地址转换,其作用是通过数据报头的修改,使位于企业内部的私有IP可以访问外网,以及外部用户可以访问位于公司内部的私有IP主机,在nat模式中LVS负载均衡器需要使用两块网卡配置不同的IP地址,第一块网卡与内部的web服务器连接,第二块网卡与公网用户连接。
1、工作原理
基于NAT机制实现。当用户请求到达director之后,director将请求报文的目标地址(即VIP)改成选定的realserver地址,同时将报文的目标端口也改成选定的realserver的相应端口,最后将报文请求发送到指定的realserver。在服务器端得到数据后,realserver将数据返给director,而director将报文的源地址和源端口改成VIP和相应端口,然后把数据发送给用户,完成整个负载调度过程。
2、拓扑图
实验环境:按照上图进行配置,三台虚拟机就可以了,客户端就用window终端测试。
192.168.0.0/24网段的仅主机模式
172.25.254.0/24nat模式
3、实验步骤
真实服务器(rs1)的设置
[root@rs1 ~]# yum install nginx
[root@rs1 ~]# echo xixi > /usr/share/nginx/html/index.html
[root@rs1 ~]# systemctl enable nginx --now
添加网关指向lvs主机,但也可以在nmcli永久更改网关
[root@rs1 ~]# route add default gw 192.168.0.100
真实服务器(rs2)的设置
[root@rs2 ~]# yum install nginx
[root@rs2 ~]# echo haha > /usr/share/nginx/html/index.html
[root@rs2 ~]# systemctl enable nginx --now
添加网关指向lvs主机,但也可以在nmcli永久更改网关
[root@rs1 ~]# route add default gw 192.168.0.100
设置LVS主机
[root@lvs ~]# yum install ipvsadm
开启路由转发功能,lvs两块不同网络的网卡地址
[root@lvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward (临时的)
以下永久更改
[root@lvs ~]# vim /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
lvs服务器上添加分发规则
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20 -m
[root@lvs ~]# ipvsadm -Ln
如果分发策略想要永久的保存的化
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
[root@lvs ~]# systemctl restart ipvsadm.service
4、测试:
二、DR模式集群
DR模式中要求调度器与后端服务器必须在同一个局域网内,VIP地址也需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源地址为VIP的地址,目标地址为为客户端的IP地址,这样客户端访问的是LVS调度器的VIP地址,回应的源地址也依然是VIP地址,客户端是感觉不到后端服务器的存在的,由于多台计算机都设置了同样一个VIP地址,所以在DR模式中要求调度器的VIP地址对外是可见的,客户端需要讲请求数据包发送到调度器主机,也就是LVS,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外是不可见的,但是真实服务器却可以接受目标地址为VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址,LVS根据算法选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选择出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外可见。
1、工作原理
基于直接路由来实现。当用户请求到达director之后,director将请求报文的目标地址(即VIP)改成选定的realserver地址,还要改写请求报文的mac地址,将请求发送到指定mac的realserver,而realserver将响应直接返回给客户端,不经过director。这个方式是三种调度中性能最好的,也是我们生产环境中使用最多的。
2、拓扑图
实验环境:5台虚拟机,按上述拓扑图进行配置,连接云的才需要nat模式,其他的都可以配仅主机模式
3、实验步骤
真实服务器(rs1)的设置
[root@rs1 ~]# yum install nginx
[root@rs1 ~]# echo xixi > /usr/share/nginx/html/index.html
[root@rs1 ~]# systemctl enable nginx --now
添加网关指向lvs主机,但也可以在nmcli永久更改网关
[root@rs1 ~]# route add default gw 192.168.0.100
查看网关
[root@rs1 ~]# route -n
#添加VIP,调整内核参数,关闭arp
[root@rs1 ~]# ip addr add 192.168.0.200/32 dev lo
[root@rs1 ~]# ip add
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
真实服务器(rs2)的设置
[root@rs2 ~]# yum install nginx
[root@rs2 ~]# echo haha > /usr/share/nginx/html/index.html
[root@rs2 ~]# systemctl enable nginx --now
添加网关指向lvs主机,但也可以在nmcli永久更改网关
[root@rs1 ~]# route add default gw 192.168.0.100
查看网关
[root@rs1 ~]# route -n
#添加VIP,调整内核参数,关闭arp
[root@rs2 ~]# ip addr add 192.168.0.200/32 dev lo
[root@rs2 ~]# ip ad
这些都是临时的
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
LVS负载均衡器设置
eth1=192.168.0.50/24;gw=192.168.0.100 #这块网卡也一定要加网关
ip addr del 192.168.0.100/32 dev lo
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[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 192.168.0.200:80 wrr
-> 192.168.0.10:80 Route 1 0 0
-> 192.168.0.20:80 Route 2 0 0
配置路由,开启转发
eth0=172.25.254.100/24
eth1=192.168.0.100/24 (这个是集群的网关)
echo 1 > /proc/sys/net/ipv4/ip_forward (开启路由转发临时)
开启路由转发永久的
[root@route-1 ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
[root@route-1 ~]# vim /etc/sysctl.conf
[root@route-1 ~]# sysctl -p
net.ipv4.ip_forward = 1
client的配置
eth0=172.25.254.200/24
route add default gw 172.25.254.100/24 #也可以通过nmcli工具永久改变
4、测试:
注意:访问的是vip
三、lvs防火墙标记解决调度问题
webserver1和websever2实现https传输
[root@rs1 ~]# yum install mod_ssl
[root@rs2 ~]# yum install mod_ssl
[root@rs2 ~]# yum install httpd
[root@rs1 ~]# yum install httpd
[root@rs1 ~]# systemctl restart httpd
[root@rs2 ~]# systemctl restart httpd
测试:
[root@rs1 ~]# curl -k https://192.168.0.10
xixi
LVS的设置:
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 66
[root@lvs ~]# iptables -t mangle -nL
设置调度443端口策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
在lvs主机中基于标记定义集群服务
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.20 -g
四、LVS的缺点
关闭rs2的httpd服务
[root@rs2 ~]# systemctl stop httpd.service
会发现出错,他不能做健康检查,如果后端服务器挂了,请求还是会被调度过去;那么haproxy,nginx做负载均衡就能解决这种问题。