官方文档:http://www.linuxvirtualserver.org/zh
[lvs准备]
[root@ceshiapp ~]# lsmod | grep ip_vs
[root@ceshiapp ~]#
lsmod是检查内核运行状况,表明没有运行ipvsadm
[root@ceshiapp ~]# uname -r
3.10.0-327.el7.x86_64
[root@ceshiapp ~]# ln -s /usr/src/kernels/3.10.0-327.13.1.el7.x86_64/ /usr/src/linux
注意:1.lvs安装一定要设定这个软连接,否则编译的时候会报错。
2.在/usr/src/kernel/下没有内核版本信息,则需要安装kernel-devel包,并且内核信息一定跟uname -r 对应。
3.编译安装前 yum install -y libnl* popt*
[lvs安装]
[root@ceshiapp ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
CentOS-5.x版本的推荐安装ipvsadm-1.24版本。
CentOS-6.x版本的推荐安装ipvsadm-1.26版本。
这里在CentOS-7.x下就下载最新的一个版本
[root@ceshiapp srv]# tar xf ipvsadm-1.26.tar.gz
[root@ceshiapp ipvsadm-1.26]# make
[root@ceshiapp ipvsadm-1.26]# make install
编译安装,如果失败,缺包就yum install -y libnl* popt*;
注意此时在lsmod | grep ip_vs依旧是没有的,因为ipvsadm并没有运行
[root@ceshiapp ipvsadm-1.26]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@ceshiapp ipvsadm-1.26]# lsmod | grep ip_vs
ip_vs 140944 0
nf_conntrack 105745 1 ip_vs
libcrc32c 12644 2 xfs,ip_vs
ipvsadm运行接下来配置。
[lvs配置]
lvs配置主要用ipvsadm管理,这里以DR模式为例子设置lvs
[ipvsadm使用说明]
Usage:
① ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
这里的t|u|f 表示tcp、udp、iptables标记,下面与这里一致
[root@ceshiapp lvs]# ipvsadm -A -t 192.168.131.200:80 -s wlc
[root@ceshiapp lvs]# ipvsadm -E -t 192.168.131.200:80 -s wwc
② ipvsadm -D -t|u|f service-address
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
[root@ceshiapp lvs]# ipvsadm -D -t 192.168.131.200:80
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
③ ipvsadm -C
清除所有规则,注意是所有,与iptables -F功能类似
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
[root@ceshiapp lvs]# ipvsadm -C
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
④ ipvsadm -R
载入保存在文件中的规则
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@ceshiapp lvs]# ipvsadm -R < a
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
⑤ ipvsadm -S [-n]
保存规则到指定文件
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
[root@ceshiapp lvs]# > a
[root@ceshiapp lvs]# cat a
[root@ceshiapp lvs]# ipvsadm -S > a
[root@ceshiapp lvs]# cat a
-A -t 192.168.131.200:http -s wlc
⑥ ipvsadm -a|e -t|u|f service-address -r server-address [options]
添加RS节点。-a为添加,-e为编辑,与-E类似这里就不对-e进行专门的说明了。
[root@ceshiapp lvs]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.133 -g -w 5
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
-> 192.168.131.133:http Route 5 0 0
⑦ ipvsadm -d -t|u|f service-address -r server-address
这里表示删除一个RS节点。
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
-> 192.168.131.133:http Route 5 0 0
[root@ceshiapp lvs]# ipvsadm -d -t 192.168.131.200:80 -r 192.168.131.133
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
⑧ ipvsadm -L|l [options]
显示虚拟服务器信息
常用的选项[options]:
-n 数字格式显示主机地址和端口
--stats 统计数据
--rate 速率
--timeout 显示tcp、tcpfin、udp的会话超时时长
-c 显示当前ipvs连接情况
⑨ ipvsadm -Z [-t|u|f service-address]
⑩ ipvsadm --set tcp tcpfin udp
设置tcp、tcpfin、udp的超时时间
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h
查看ipvsadm的帮助信息
[lvs实战]
① 配置DNS
按照实际的配置,这里会涉及到DNS解析的问题。一般会自建立DNS服务器或者购买域名,由于时间关系,这里提及一下。之后的访问以IP为主。
② 配置LVS虚拟IP VIP
[root@ceshiapp lvs]# ifconfig eno16777736:0 192.168.131.200/24 up
[root@ceshiapp lvs]# ifconfig
eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.131.200 netmask 255.255.255.0 broadcast 192.168.131.255
ether 00:0c:29:68:85:ca txqueuelen 1000 (Ethernet)
#特别提示:ifconfig eno16777736:0 192.168.131.200 netmask 255.255.255.0 up或或者网上也有添加主机路由的方法
route add -host 192.168.131.200 dev eno16777736
ping测试,如果Ping通,说明配置OK了。
③ 手工添加2台RS
服务端配置:
[root@ceshiapp lvs]# ipvsadm -C
[root@ceshiapp lvs]# ipvsadm --set 30 5 60
[root@ceshiapp lvs]# ipvsadm -A -t 192.168.131.200:80 -s rr -p 20
[root@ceshiapp lvs]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.133 -g -w 3
[root@ceshiapp lvs]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.135 -g -w 3
[root@ceshiapp lvs]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:80 rr persistent 20
-> 192.168.131.133:80 Route 3 0 0
-> 192.168.131.135:80 Route 3 0 0
RS配置:
[root@ceshiapp_master ~]# ifconfig lo:0 192.168.131.200/32 up
route add -host 192.168.131.200 dev lo
在LVS-DR模式中,负载均衡服务器与真实服务器在同一个局域网内,所以必须要抑制真实服务器的ARP广播,不然会导致用户无法访问,造成严重的后果。
④ 抑制ARP
抑制方法如下:
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: 定义对目标地址为本地的IP的ARP询问不同的应答模式;
0(默认值):只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标地址配置在到达的接口上的时候,才给予响应;DR模型使用;
2:仅响应目标IP地址是来访问网络接口本地地址的ARP查询请求,且IP必须在该网络接口的子网段内。
arp_announce:对网络接口上,本地IP地址的发出的ARP回应做出相应级别的限制;
0(默认):将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;DR模型使用
⑤ 测试LVS服务的转发
首先在客户端浏览器访问RS地址是否正常,然后访问DR的VIP地址,多次测试出现不同的结果说明LVS服务正常。
提示:测试过程中,会话保持的时间,浏览器缓存等可能会影响测试。
本文出自 “停止脚步等于慢性死亡” 博客,请务必保留此出处http://goforward.blog.51cto.com/11169198/1826022
原文地址:http://goforward.blog.51cto.com/11169198/1826022