nginx + lvs (dr)
环境:两台 centos7.1 部署 nginx
( web1 ip 172.17.12.108 hostname:primordial
web2 ip 172.17.12.111 hostname:copy )
一台 centos 7.1 部署 lvs
( lvs ip 172.17.12.110 hostname:lvs )
vip 172.17.12.121
primordial /copy:
yum install nginx -y
#echo "web1" >/usr/share/nginx/html/index.html
# echo "web2" >/usr/share/nginx/html/index.html
systemctl restart nginx
# netstat -ntlp |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2838/nginx: master
在浏览器中测试访问nginx服务器IP,显示如下:
若不能正常访问,请检查 selinux是否为 disabled;
iptables规则是否限制
firewall是否关闭
80端口是否被占用
lvs:
# ifconfig eno16777736:0 172.17.12.121 #配置vip
# ifconfig
eno16777736: flags=4163mtu 1500
inet 172.17.12.110netmask 255.255.255.0broadcast 172.17.12.255
inet6 fe80::20c:29ff:fee9:31c7prefixlen 64scopeid 0x20
ether 00:0c:29:e9:31:c7txqueuelen 1000(Ethernet)
RX packets 5624bytes 934642 (912.7 KiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 1333bytes 127248 (124.2 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
eno16777736:0: flags=4163mtu 1500
inet 172.17.12.121netmask 255.255.0.0broadcast 172.17.255.255
ether 00:0c:29:e9:31:c7txqueuelen 1000(Ethernet)
lo: flags=73mtu 65536
inet 127.0.0.1netmask 255.0.0.0
inet6 ::1prefixlen 128scopeid 0x10
looptxqueuelen 0(Local Loopback)
RX packets 12bytes 1260 (1.2 KiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 12bytes 1260 (1.2 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
上述配置不生效可尝试括号中方法:
( ifconfig eno16777736:0 down
ifconfig eno16777736:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip dev eno16777736:0 ) yum install ipvasdm -y
# ipvsadm -A -t 172.17.12.121:80 -s rr
# ipvsadm -a -t 172.17.12.121:80 -r 172.17.12.108 -g
# ipvsadm -a -t 172.17.12.121:80 -r 172.17.12.111 -g
# ipvsadm -L -nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP172.17.12.121:80 rr-> 172.17.12.108:80 Route 1 0 0 -> 172.17.12.111:80 Route 1 0 0
echo "1" >/proc/sys/net/ipv4/ip_forward #开启端口间转发功能
sysctl -p #生效 primordial /copy:
# ifconfig lo:0 172.17.12.121 netmask 255.255.255.255 broadcast 172.17.12.121
# ifconfig
eno16777736: flags=4163mtu 1500
inet 172.17.12.108netmask 255.255.255.0broadcast 172.17.12.255
inet6 fe80::20c:29ff:feb0:5eaaprefixlen 64scopeid 0x20
ether 00:0c:29:b0:5e:aatxqueuelen 1000(Ethernet)
RX packets 20343bytes 8995179 (8.5 MiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 6642bytes 488054 (476.6 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
lo: flags=73mtu 65536
inet 127.0.0.1netmask 255.0.0.0
inet6 ::1prefixlen 128scopeid 0x10
looptxqueuelen 0(Local Loopback)
RX packets 26bytes 2684 (2.6 KiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 26bytes 2684 (2.6 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
lo:0: flags=73mtu 65536
inet 172.17.12.121netmask 255.255.255.255
looptxqueuelen 0(Local Loopback)
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
添加路由:
route add default gw 172.17.12.121
route add -host 172.17.12.121 dev lo:0
后记:
后面由于场地问题实验环境不变,vip换成192.168.37.131,web1 ip换成192.168.37.128,web2 ip换成192.168.37.129,lvs ip换成192.168.37.130
实验中出现的问题:
1.当配置没有问题,浏览器始终访问至同一台web时。可清理Windows本地ARP缓存,在cmd界面输入:arp -d 或在浏览器强制刷新 :Ctrl+F5
2.当在lvs服务器上curl vip可以实现下图中轮询的调度而浏览器访问始终在同一台web服务器上的情况,原因是lvs配置vip的虚拟网卡down掉了
重新生效后lvs本机不能curl vip,浏览器可实现负载轮询
3.对于ifconfig配置的ip是临死生效不永久的问题,可采用将配置信息写成脚本,放在开机启动目录下
4.ip_forward 开启路由转发功能在lvs服务器上配置
5.新建集群时,ipvsadm -A -t $vip -s scheduler [-p ]
只要后面跟上-p选项,即代表开启长连接
页:
[1]