前言:
而今小伙伴们对“nginx是使用dr”大体比较珍视,小伙伴们都需要学习一些“nginx是使用dr”的相关资讯。那么小编在网上汇集了一些关于“nginx是使用dr””的相关文章,希望我们能喜欢,看官们一起来了解一下吧!LVS环境资源规划:
CIP:192.168.159.1
DIP:192.168.159.11
RIP1:192.168.159.12
RIP2:192.168.159.13
VIP:192.168.159.10
DS:
启动ipvsadm服务
service ipvsadm start
在DS上的eth0:0接口上添加vip
ifconfig eth0:0 192.168.159.10 netmask 255.255.255.0 up
添加虚拟服务器
ipvsadm -A -t 192.168.159.10:3306 -s wrr
添加真实服务器,并绑定虚拟服务器
ipvsadm -a -t 192.168.159.10:3306 -r 192.168.159.12:3306 -g -w 1
ipvsadm -a -t 192.168.159.10:3306 -r 192.168.159.13:3306 -g -w 2
查看LVS状态
#ipvsadm -L -n
ipvsadm -L -n --sort
RS1:
在真实服务器的回环接口上添加VIP
ifconfig lo:0 192.168.159.10 netmask 255.255.255.255 up
创建本机VIP的静态路由,防止本机访问VIP时通过eth0接口出去
route add -host 192.168.159.10 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
RS1:
ifconfig lo:0 192.168.159.10 netmask 255.255.255.255 up
route add -host 192.168.159.10 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
arp_ignore参数:
0:表示无论哪块网卡收到arp查询请求,只要本机有此mac地址的网卡,就给予回应。
1:表示只有请求的mac地址是自己的网卡给予回应。比如一台服务器有两块网卡,其中的一块网卡收arp请求,但是请求的mac是本机的另一块网卡。那么这块网卡就一定不会作出应答。
arp_announce参数:
0:表示无论哪块网卡收到了arp的请求,只要发现本机有请求的mac,就会响应。
1:表示尽量避免响应ARP请求中MAC不是本网卡的。如一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应。
2:表示总是使用最合适的网卡来响应。一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应。
查看LVS上当前的所有连接
ipvsadm -Lcn
或者
cat /proc/net/ip_vs_conn
LVS配置持久化:
DS:
配置ipvsadm开机自启
chkconfig ipvsadm on
配置vip
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
HWADDR=00:0C:29:98:AA:72
TYPE=Ethernet
UUID=b0aedc9b-a367-4215-b7bb-5db06054ceb7
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.159.10
NETMASK=255.255.255.0
HOSTNAME=db1
保存退出,重启网络服务
service netwok restart
添加虚拟服务器
ipvsadm -A -t 192.168.159.10:3306 -s wrr
添加真实服务器,并绑定虚拟服务器
ipvsadm -a -t 192.168.159.10:3306 -r 192.168.159.12:3306 -g -w 1
ipvsadm -a -t 192.168.159.10:3306 -r 192.168.159.13:3306 -g -w 2
保存ipvsadm配置
service ipvsadm save
或者
ipvsadm -S >/etc/sysconfig/ipvsadm
查看LVS状态
#ipvsadm -L -n
ipvsadm -L -n --sort
ActiveConn:是活动连接数,也就是tcp连接状态的ESTABLISHED
InActConn:是指除了ESTABLISHED以外的,所有的其它状态的tcp连接
有时候我们看到的ActiveConn会比在真实机上通过netstats看到的ESTABLISHED高很多呢?
原因是lvs自身也有一个默认超时时间.可以用ipvsadm -L --timeout查看,默认是900 120 300,分别是TCP TCPFIN UDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,而不管这条连接是不是已经失效!所以如果你的服务器在15分钟以 内有大量的并发请求连进来的时候,你就会看到这个数值直线上升.
我们看lvs的这个连接数是想知道现在的每台机器的真实连接数吧?怎么样做到这一点呢?其实知道现在的ActiveConn是怎样产生的,做到这一点就简 单了.举个例子:比如你的lvs是用来负载网站,用的模式是dr,后台的web server用的nginx.这时候一条请求过来,在程序没有问题的情况下,一条连接最多也就五秒就断开了.这时候你可以这样设置:ipvsadm --set 5 10 300.设置tcp连接只保持5秒中.如果现在ActiveConn很高你会发现这个数值会很快降下来,直到降到和你用nginx的status看当前连 接数的时候差不多.你可以继续增加或者减小5这个数值,直到真实机的status连接数和lvs里的ActiveConn一致.
RS1:
配置vip
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.159.10
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
保存退出,重启网络服务
service netwok restart
抑制ARP广播,编辑sysctl.conf,添加如下参数
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
保存退出,重新加载配置
sysctl -p
RS2:
配置vip
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.159.10
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
保存退出,重启网络服务
service netwok restart
抑制ARP广播,编辑sysctl.conf,添加如下参数
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
保存退出,重新加载配置
sysctl -p
LVS另一种“持久化”的办法就是将配置写入脚本,开机自动调用脚本。
对于单公网IP的企业网络,是否也可以搭建LVS DR呢?有机会再测试(前提是需要一个网关,做端口映射)
标签: #nginx是使用dr