ipvsadm命令的用法:
1.用于管理Lvs集群服务
2.用于进行RS的增删改
3.查看配置
lvs服务器架设步骤:
1.判断内核是否支持ipvs(看到CONFIG_NETFIFLER_XT_MATCH_IPVS=m,)
# grep -A 30 -i 'IPVS' /boot/config-2.6.32-279.el6.x86_64
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
从上可以看出内核已经支持了ipvs协议,其中:
CONFIG_NETFIFLER_XT_MATCH_IPVS=m 表示能够执行模块化编译
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y 表示支持TCP和UDP协议
CONFIG_IP_VS_RR=m 表示支持的调度协议
2.ipvsadm的安装
#yum -y install ipvsadm
安装成功后检验:
# rpm -ql ipvsadm
/etc/rc.d/init.d/ipvsadm #ipvs的服务用于加载内核规则
/etc/sysconfig/ipvsadm-config
/sbin/ipvsadm #主程序
/sbin/ipvsadm-restore #用于重载配置到内核中
/sbin/ipvsadm-save #保存规则的文件
/usr/share/doc/ipvsadm-1.26
/usr/share/doc/ipvsadm-1.26/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
man查看
SYNOPSIS
ipvsadm -A|E -t|u|f service-address [-s scheduler] 大写选项用于管理ipvs集群
[-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address 小写选项用于管理ipvs集群的rs
[-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm –set tcp tcpfin udp
ipvsadm –start-daemon state [–mcast-interface interface]
[–syncid syncid]en
ipvsadm –stop-daemon state
ipvsadm -h
管理集群服务:增、改、删、查
ipvsadm -A|E -t|u|f service-address [-s scheduler]
-A:添加
-E:修改
-t:tcp
-u:udp
-f:防火墙标记
service-address:
-t,tcp 地址格式 vip:port
-u,udp 地址格式 vip:port
-f,fire wall mark mark
-s scheduler:默认为wlc
ipvsadm -D -t|u|f service-address
-D:删除
管理集群上的RS:
ipvsadm -a|e -t|u|f service-address -r server-address
-a:增
-e:改
使用命令前,必须创建好Vserver
-r server-address
RS的地址:
rip[:port] #如果端口省略,则与Vserver端口相同
-g,gateway,dr 默认类型
-i,ipip,tun
-m,masquerade,nat
-w,weight 适用wrr、wlc、sed
查看:
ipvsadm -L|l [options]
-n,–numeric:数字格式显示 IP:端口
–exact:精确显示
-c,–connection:显示当前IPVS的连接
–stats:显示统计数据
–rate:速率
清空规则:
ipvsadm -C
保存和重载:
保存:
ipvsadmin -S > /PATH/TO/SOME_RULE_FILE
ipvsadmin -save > /PATH/TO/SOME_RULE_FILE
重载:
ipvsadm -R < /PATH/TO/SOME_RULE_FILE
ipvsadm -restore < /PATH/TO/SOME_RULE_FILE
清空计数器:
ipvsadm -Z [-t|u|f service-address]
1.数字形式查看IPVS规则:
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags #VIP的信息
-> RemoteAddress:Port Forward Weight ActiveConn InActConn #RS的信息
2.添加一个LVS服务器,再次查看
# ipvsadm -A -t 172.20.150.8:80 -s rr
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.20.150.8:80 rr
3.为LVS服务器关联一个RS,指定调度类型为NAT
# ipvsadm -a -t 172.20.150.8:80 -r 192.168.1.1:8080 -m -w 1
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.20.150.8:80 rr
-> 192.168.1.1:8080 Local 1 0 0
# ipvsadm -Ln –stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 172.20.150.8:80 0 0 0 0 0
-> 192.168.1.2:8080 0 0 0 0 0
Conns:连接数
InPkts:入栈报文数
OutPkts:出栈报文数
InBytes:入栈字节
OutBytes:出栈字节
# ipvsadm -Ln –rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.20.150.8:80 0 0 0 0 0
-> 192.168.1.2:8080 0 0 0 0 0
CPS:每秒钟的连接数
InPPS:每秒入栈报文数
OutPPS:每秒出栈报文数
InBPS:每秒入栈字节
OutBPS:每秒出栈字节
修改LVS服务器调度方法:
# ipvsadm -E -t 172.20.150.8:80 -s wlc
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.20.150.8:80 wlc
-> 192.168.1.2:8080 Masq 1 0 0
修改LVS服务器下RS的权重:
# ipvsadm -e -t 172.20.150.8:80 -r 192.168.1.2:8080 -m -w 10
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.20.150.8:80 wlc
-> 192.168.1.2:8080 Masq 10 0 0
配置文件的备份、恢复:
保存IPVS配置文件:
# ipvsadm -S > /tmp/ipvsadm-config.v1
# cat /tmp/ipvsadm-config.v1
-A -t cdh1:http -s wlc
-a -t cdh1:http -r 192.168.1.2:webcache -m -w 10
删除IPVS配置文件
# ipvsadm -C
重新载入IPVS配置文件
# ipvsadm -R < /tmp/ipvsadm-config.v1
配置开机自动加载:
# ipvsadm -S > /etc/sysconfig/ipvsadm 加载时会默认读取这个文件
# chkconfig ipvsadm on
负载均衡集群设计时的要点:
(1)session保持
session sticky(ip hash)
session cluster
session server
(2)共享存储:
NAS:访问接口是文件系统
SAN:访问接口是块级别
DS:分布式存储,访问接口通常是文件级别,接口可是文件系统,也可以是API;ceph,内核级别的分布式存储
数据同步:
rsync+inotify (主从服务器 主服务器能够读写、从服务器只能够读)
数据格式:
结构化数据:存储在SQL数据库中 #即所有数据都能明确定义出数据类型的
半结构化数据:xml,json,存储于文件系统或NoSQL;
非结构化数据:文件系统,NAS、SAN、DS;
LVS-NAT:
设计要点:
(1)DIP与RIP要在同一IP网络住,RIP的网关要指向DIP;
(2)支持端口映射;
(3)是否用到共享存储取决于业务需求;
实践作业:负载均衡一个php应用;
测试:(1)是否需要会话保持;
(2)是否需要共享存储;
LVS-DR:direct routing
在各主机(Director,RS)均需要配置VIP;因此,要解决地址冲突的问题,目标是让各RS上的VIP不可见,仅用接受目标地址为VIP的报文,同时可作为响应报文的源地址;
(1)在前端的网关接口上静态绑定; #弊端是无法再高可用的Director集群上很好的切换
(2)在各RS上使用arptables; #拒绝RS服务器响应ARP请求
(3)在各RS上修改内核参数,来限制arp响应和通告;
限制响应级别:arp_ignore
0:默认,使用本地任意接口上配置的地址进行响应
1:仅在请求的目标IP配置在本地主机的接收报文的入栈接口,才给与响应
2-8:在LVS-DR集群配置中用不到
限制通告级别:arp_announce
0:默认,把本机所有接口信息向所有接口通告
1:尽量避免向非本地网络通告;
2:总是避免通告;
设计要点:
(1)各主机一个接口即可,但需要在同一物理网络中;
(2)RIP的网关不能指向DIP;RIP和DIP通常应该在同一网络,但此二者未必会与VIP在同一网络;
(3)各RS需要先设置内核参数,再设置VIP和路由;
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
设置接口IP:
ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip
route add -host $vip dev lo:0
实践作业:增删减RS,NAT和DR模式哪一个方便?
原创文章,作者:oranix,如若转载,请注明出处:http://www.178linux.com/66286