我的环境:VMware workstation + 3台 Ubuntu 12.04.5 LTS 版本的。
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 1ipvsadm -a -t 192.168.31.206:80 -r 10.10.100.53:80 -m
说明:-m 指定LVS 的工作模式为NAT 模式 ,rr表示采用轮询调度算法,这里还可以采用其他调度算法如wrr(加权轮询调度算法),-w在使用加权轮询调度算法时,还可以在添加规则时改变权值,一般默认权值为1
真实服务器配置
#真实服务器IPhu@ubuntu:~$ cat lvs.txtroot@10.10.100.51root@10.10.100.53hu@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.51COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 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.53COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 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
访问 为zoo1 为zoo2
访问调度服务器 返回的内容不是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 uproute add -host 192.168.31.200 dev eth0:1ipvsadm -Cipvsadm -A -t 192.168.31.200:80 -s rr -p 600ipvsadm -a -t 192.168.31.200:http -r 192.168.31.186:http -gipvsadm -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 uproute add -host 192.168.31.200 dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p
测试
同上