LVS负载均衡集群通过内核ipvs模块实现,而ipvs只是内核的一个框架本身并不能实现load banlancing 功能,要通过ipvsadm这个用户空间的工具编写规则来实现,类似于netfilter/iptables的关系。


yum install -y ipvsadm 安装

ipvsadm命令基本用法

  服务操作

    -A --add-service 添加一个服务

    -E --edit-service 修改服务

    -D --delete-service 删除服务

    -C --clear 清空服务规则

    -t --tcp-service tcp的服务

    -u --udp-service udp的服务

    -f --fwmark-service firewall mark防火墙标记的服务

    -p --persistent timeout 长连接超时时间,默认单位s,也可以指定ms

    -s --schedular 指定调度算法

    -g --gatewaying 网关即DR模型

    -i --ipip 封装ip隧道协议,即TUN模型

    -m --masquerading 地址伪装即NAT模型


  realserver操作:

    -a --add-server

    -r --real-server 指定realserver

    -w --weight

    -e --edit-server

    -d --delete-server

    

  查看操作

    -L --list

    --stats 显示统计信息

    --rate 显示速率等信息

    -c --connection 显示连接信息

    -n --numberic 数字显示,不反解IP地址和端口号


以Web服务为例配置LVS工作在NAT模型:


切记:在配置任何集群之前一定要保证所有主机时间同步!

# 后端两台realserver每3分钟和时间服务器同步时间
[root@node1 ~]# crontab -l
#Ansible: sync time
*/3 * * * * /usr/sbin/ntpdate console > /dev/null
[root@node2 ~]# crontab -l
#Ansible: sync time
*/3 * * * * /usr/sbin/ntpdate console > /dev/null

# 为方便查看负载效果,分别为两台realserver提供不同页面
[root@node1 ~]# echo '172.16.100.11' > /var/www/html/index.html 
[root@node1 ~]# curl 172.16.100.11
172.16.100.11
[root@node2 ~]# echo '172.16.100.12' > /var/www/html/index.html 
[root@node2 ~]# curl 172.16.100.12
172.16.100.12

# 添加web服务高度算法wrr,并添加两台realserver
[root@console ~]# ipvsadm -A -t 172.16.100.10:80 -s wrr
[root@console ~]# ipvsadm -a -t 172.16.100.10:80 -r 172.16.100.11 -m -w 1
[root@console ~]# ipvsadm -a -t 172.16.100.10:80 -r 172.16.100.12 -m -w 2
[root@console ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.100.10:80                    0        0        0        0        0
  -> 172.16.100.11:80                    0        0        0        0        0
  -> 172.16.100.12:80                    0        0        0        0        0
  
# 当前console上没有监听在80端口的服务
[root@console ~]# netstat -tanlp | grep 80
[root@console ~]# 

# 效果如下
[root@console ~]# curl console
172.16.100.11
[root@console ~]# curl console
172.16.100.12
[root@console ~]# curl console
172.16.100.12
[root@console ~]# curl console
172.16.100.11
[root@console ~]# curl console
172.16.100.12
[root@console ~]# curl console
172.16.100.12
[root@console ~]# curl console
172.16.100.11
[root@console ~]# curl console
172.16.100.12
[root@console ~]# curl console
172.16.100.12
[root@console ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.100.10:80                 1135     5645     5547   410925   608700
  -> 172.16.100.11:80                  378     1879     1853   136894   203204
  -> 172.16.100.12:80                  757     3766     3694   274031   405496