我的环境:VMware workstation + 3台 Ubuntu 12.04.5 LTS 版本的。
pssh进行并行批量操作
LVS/NAT
我配置的LVS/NAT配置的拓扑图如下
调度服务器:2个网卡一个桥接(192.168.31.206 ),一个host-only(10.10.100.52 )
真实服务器:10.10.100.51/53 ,(仿内网模式,都是host-only)
安装LVS
sudo apt-get install ipvsadm
调度服务器配置
开启路由转发功能
vim /etc/sysctl.conf
修改ip_forward
net.ipv4.ip_forward=1
//让参数生效
sysctl -p
添加IP记录和规则
ipvsadm -A -t 192.168.31.206:80 -s rr //这个IP地址就是用户访问的ip或者VIP地址
ipvsadm -a -t 192.168.31.206:80 -r 10.10.100.51:80 -m -w 1
ipvsadm -a -t 192.168.31.206:80 -r 10.10.100.53:80 -m
说明:-m 指定LVS 的工作模式为NAT 模式 ,rr表示采用轮询调度算法,这里还可以采用其他调度算法如wrr(加权轮询调度算法),-w在使用加权轮询调度算法时,还可以在添加规则时改变权值,一般默认权值为1
真实服务器配置
#真实服务器IP
hu@ubuntu:~$ cat lvs.txt
root@10.10.100.51
root@10.10.100.53
hu@ubuntu:~$
网关
hu@ubuntu:~$ pssh -h lvs.txt -i 'route add default gw 10.10.100.52'
[1] 20:36:48 [SUCCESS] root@10.10.100.51
[2] 20:36:48 [SUCCESS] root@10.10.100.53
在2台真实的服务器配置网关,是把真实服务器处理的结果交给调度服务器去响应给用户
安装nginx
//内网没有源的可以测试ssh端口22或者其他端口
pssh -h lvs.txt -i 'apt-get install nginx'
安装完成查看80端口
hu@ubuntu:~$ pssh -h lvs.txt -i 'lsof -i:80'
[1] 20:19:35 [SUCCESS] root@10.10.100.51
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1127 root 6u IPv4 9227 0t0 TCP *:http (LISTEN)
nginx 1127 root 7u IPv6 9228 0t0 TCP *:http (LISTEN)
nginx 1128 www-data 6u IPv4 9227 0t0 TCP *:http (LISTEN)
nginx 1128 www-data 7u IPv6 9228 0t0 TCP *:http (LISTEN)
nginx 1129 www-data 6u IPv4 9227 0t0 TCP *:http (LISTEN)
nginx 1129 www-data 7u IPv6 9228 0t0 TCP *:http (LISTEN)
nginx 1130 www-data 6u IPv4 9227 0t0 TCP *:http (LISTEN)
nginx 1130 www-data 7u IPv6 9228 0t0 TCP *:http (LISTEN)
nginx 1131 www-data 6u IPv4 9227 0t0 TCP *:http (LISTEN)
nginx 1131 www-data 7u IPv6 9228 0t0 TCP *:http (LISTEN)
[2] 20:19:35 [SUCCESS] root@10.10.100.53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1030 root 6u IPv4 9062 0t0 TCP *:http (LISTEN)
nginx 1030 root 7u IPv6 9063 0t0 TCP *:http (LISTEN)
nginx 1032 www-data 6u IPv4 9062 0t0 TCP *:http (LISTEN)
nginx 1032 www-data 7u IPv6 9063 0t0 TCP *:http (LISTEN)
nginx 1033 www-data 6u IPv4 9062 0t0 TCP *:http (LISTEN)
nginx 1033 www-data 7u IPv6 9063 0t0 TCP *:http (LISTEN)
nginx 1034 www-data 6u IPv4 9062 0t0 TCP *:http (LISTEN)
nginx 1034 www-data 7u IPv6 9063 0t0 TCP *:http (LISTEN)
nginx 1035 www-data 6u IPv4 9062 0t0 TCP *:http (LISTEN)
nginx 1035 www-data 7u IPv6 9063 0t0 TCP *:http (LISTEN)
2个真实的服务器http服务启动了
测试
为了知道到底是访问到哪台了,分别修改下/usr/share/nginx/html/index.html(查看/etc/nginx/sites-available/default 的root )
hu@ubuntu:~$ pssh -h lvs.txt -i 'hostname > /usr/share/nginx/html/index.html'
[1] 20:42:25 [SUCCESS] root@10.10.100.51
[2] 20:42:25 [SUCCESS] root@10.10.100.53
访问 http://10.10.100.51/ 为zoo1 http://10.10.100.53/ 为zoo2
访问调度服务器 http://192.168.31.206/ 返回的内容不是zoo1就是zoo2.(多刷新几次才有效,Ctrl+F5)
VIP配置
如果需要keepalived
真实服务器的路由改成
route add default gw $vip
LVS/DR
eth0:1 为vip 192.168.31.200
调度服务器配置
ifconfig eth0:1 192.168.31.200 broadcast 192.168.31.200 netmask 255.255.255.255 up
route add -host 192.168.31.200 dev eth0:1
ipvsadm -C
ipvsadm -A -t 192.168.31.200:80 -s rr -p 600
ipvsadm -a -t 192.168.31.200:http -r 192.168.31.186:http -g
ipvsadm -a -t 192.168.31.200:http -r 192.168.31.187:http -g
-g是使用DR模式
真实服务器配置
ifconfig lo:0 192.168.31.200 broadcast 192.168.31.200 netmask 255.255.255.255 up
route add -host 192.168.31.200 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
测试
同上