LVS+Nginx
最近帮别人总结的一个文档。
目录
主机规划
IP | 角色 |
---|---|
192.168.50.130 | lvs |
192.168.50.131 | nginx-web1 |
192.168.50.132 | nginx-web2 |
192.168.50.129 | client(访问lvs服务) |
192.168.50.100 | VIP(绑定在lvs主机上) |
1、安装ipvsadm
以下在lvs主机操作
1、安装服务
[root@lvs ~]# yum install ipvsadm -y
2、配置LVS主机
2.1、开启内核转发功能
[root@lvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@lvs ~]# sysctl -p
2.2、添加路由
[root@lvs ~]# route add -host 192.168.50.100 dev ens33:0
centos6的网卡地址是eth0,注意更改。
2.3、指定VIP地址及端口
[root@lvs ~]# ipvsadm -A -t 192.168.50.100:80 -s rr
这里说明一下:
-A 添加地址 -t 指定VIP的地址及端口 -s 调度算法,这里采用rr轮询
2.4、指定后端RS服务器
后端RS服务器也就是两台web服务器
[root@lvs ~]# ipvsadm -a -t 192.168.50.100:80 -r 192.168.50.131:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.50.100:80 -r 192.168.50.132:80 -g
-a 指定真实服务器 -t VIP地址 -r 后端rs服务器ip地址及端口 -g 优先DR模式 -w 权重值
2.5、绑定高可用IP
[root@lvs ~]# ifconfig ens33:0 192.168.50.100 netmask 255.255.255.0 up
[root@lvs ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.50.130 netmask 255.255.255.0 broadcast 192.168.50.255
inet6 fe80::20c:29ff:fefb:9823 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:fb:98:23 txqueuelen 1000 (Ethernet)
RX packets 12483 bytes 15575235 (14.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2150 bytes 177549 (173.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.50.100 netmask 255.255.255.0 broadcast 192.168.50.255
ether 00:0c:29:fb:98:23 txqueuelen 1000 (Ethernet)
3、配置RS服务器
RS服务器也就是两台web服务器。注意:以下步骤在RS服务器上操作
3.1、安装nginx服务
第一台web服务器安装nginx
[root@nginx-web1 ~]# yum install nginx -y
[root@nginx-web1 ~]# systemctl start nginx
[root@nginx-web1 ~]# echo "web01" > /usr/share/nginx/html/index.html
第二台web服务器安装nginx
[root@nginx-web2 ~]# yum install nginx -y
[root@nginx-web2 ~]# systemctl start nginx
[root@nginx-web2 ~]# echo "web02" > /usr/share/nginx/html/index.html
3.2、写一个脚本配置RS服务器arp抑制
#!/bin/bash
#description: Config realserver
VIP=192.168.50.100
case "$1" in
start)
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
注意:你的VIP与我的可能不一样,注意修改VIP变量,其他的部分无需更改。
3.3、执行脚本
第一台服务器启动脚本
[root@nginx-web1 ~]# bash realserver.sh start
RealServer Start OK
第二台服务器启动脚本
[root@nginx-web2 ~]# bash realserver.sh start
RealServer Start OK
4、访问测试
4.1、Linux主机测试
现在我们找一台client服务器作为测试,注意:禁止在lvs这个主机上面测试,因为这台主机带有转发功能,所以不能自己转发到自己上,一定要找一台额外的机器来作为测试。
[root@client ~]# curl http://192.168.50.100
web01
[root@client ~]# curl http://192.168.50.100
web02
[root@client ~]# curl http://192.168.50.100
web01
[root@client ~]# curl http://192.168.50.100
web02
[root@client ~]# curl http://192.168.50.100
web01
看的出来,轮询,达到实验目的。
4.2、windows浏览器测试
浏览器测试你会发现一段时间之内都是同一台主机,这是因为浏览器带有访问会话记录功能。清除一下缓存就可以了。
以下是总结的其他操作,上面的步骤已经操作完毕了,所以不清楚不要继续操作下面的步骤。只是一些额外的操作。
5、额外操作
5.1、删除lvs主机的VIP地址及端口
[root@lvs ~]# ipvsadm -D -t 192.168.50.100:80
5.2、删除指定RS地址
[root@lvs ~]# ipvsadm -d -t 192.168.50.100:80 -r 192.168.50.xxx:80
5.3、查看规则
[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.50.100:80 rr
-> 192.168.50.131:80 Route 1 1 0
-> 192.168.50.132:80 Route 1 0 0