三台虚拟机来做lvs的负载均衡实验,vm01是负载均衡器,vm02和vm03是真正的web服务器,他们的关系
vm01
eth0:192.168.1.200
eth1:192.168.87.140 (其中192.168.87.0网段可以连接外网)
vip:192.168.87.30
vm02
eth1:192.168.1.201 (gateway:192.168.1.200)
vm03
eth1:192.168.1.202 (gateway:192.168.1.200)
一,负载均衡器安装
IPVS是整个负载均衡的基础,如果没有这个基础,那么故障隔离和失败切换就没有意义
[root@vm01 ~]# yum install -y ipvsadm
[root@vm01 ~]# lsmod |grep ip_vs[root@vm01 ~]# modprobe ip_vs[root@vm01 ~]# lsmod |grep ip_vsip_vs 122241 0 这里不能靠进程来判断是不是加载了ip_vs模块,因为这里就是一个命令,没有产生进程。
二,创建lvsnat模式启动脚本
ipvsadm 的命令参考:
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。-C --clear 清除内核虚拟服务器表中的所有记录。-R --restore 恢复虚拟服务器规则-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录-L|-l --list 显示内核虚拟服务器表-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)--set tcp tcpfin udp 设置连接超时值--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。--stop-daemon 停止同步守护进程-h --help 显示帮助信息其他的选项:-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。-s --scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。-M --netmask netmask persistent granularity mask-r --real-server server-address 真实的服务器[Real-Server:port]-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)-i --ipip 指定LVS 的工作模式为隧道模式-m --masquerading 指定LVS 的工作模式为NAT 模式-w --weight weight 真实服务器的权值--mcast-interface interface 指定组播的同步接口-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout--daemon 显示同步守护进程状态--stats 显示统计信息--rate 显示速率信息--sort 对虚拟服务器和真实服务器排序输出--numeric -n 输出IP 地址和端口的数字形式
[root@vm01 ~]# vim /etc/init.d/lvsnat
#!/bin/bashVIP=192.168.87.30RIP1=192.168.1.201RIP2=192.168.1.202case "$1" instart) echo "start LVS of DirectorServer NAT" echo "1" > /proc/sys/net/ipv4/ip_forward /sbin/iptables -F /sbin/ipvsadm -C /sbin/ifconfig eth1:0 $VIP netmask 255.255.255.0 up /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -m /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -m /sbin/ipvsadm ;;stop) echo "stop LVS of DirectorServer NAT" echo "0" >/proc/sys/net/ipv4/ip_forward /sbin/ipvsadm -C /sbin/ifconfig eth1:0 down;;*)
echo "argements error"
esac
exit 1
[root@vm01 ~]#chown +x/etc/init.d/lvsnat
三,vm02和vm03上的ip配置和httpd安装
vim /etc/sysconf/network-script/ifcfg-eth1
DEVICE=eth1BOOTPROTO=staticONBOOT=yesHWADDR=00:16:3e:79:71:18IPADDR=192.168.1.202NETWORK=192.168.1.0NETMASK=255.255.255.0GATEWAY=192.168.1.200
四,测试
[root@vm01 ~]# ipvsadm -lncIPVS connection entriespro expire state source virtual destinationTCP 01:53 TIME_WAIT 192.168.87.128:42804 192.168.87.30:80 192.168.1.201:80TCP 01:57 TIME_WAIT 192.168.87.128:42805 192.168.87.30:80 192.168.1.202:80TCP 01:38 TIME_WAIT 192.168.87.128:42802 192.168.87.30:80 192.168.1.201:80TCP 01:47 TIME_WAIT 192.168.87.128:42803 192.168.87.30:80 192.168.1.202:80
可以看到这些连接被平均的分配两个主机上了