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  
原文地址:https://www.cnblogs.com/FengGeBlog/p/13744661.html