标签:lvs
集群类型:
LB:负载均衡
组件:负载均衡器、调试器、分发器
HA:高可用
活动服务器、备用服务器
HP:高性能
DS:分布式
分布式存储、分布式计算
主要写LB类型,lvs集群:
lvs集群类型:
lvs-nat
lvs-dr
lvs-tun
lvs-fullnat
lvs-nat :多目标的DNAT,将请求报文中的目标IP和目标PORT修改为某一RS的IP和PORT实现转发。
特点:
1、请求报文和响应报文都是由Director转发,较高负载下,Director易于成为系统性能瓶颈。
2、lvs主机必须是Linux,RS可以是任意OS
3、RIP和DIP必须在同一IP网络,且应该使用私有地址;RS的网关要指向DIP(保证响应报文必 须经由VS)
4、支持端口映射
lvs-dr:通过为请求报文的重新封闭一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化;之后由RS直接响应客户端,不经由Director,是通过修改RS的内核参数,使每个RS都有Director的地址,但多个RS之间又不会互相冲突。
特点:
1、请求报文必须由Directory调度,但响应报文必须不能经由Director
2、RS可以使用大多的OS
3、RS的RIP可以使用私有地址,也可以使用公网地址;
4、不支持端口映射
lvs-tun:tunnel隧道模型
修改请求报文的源IP和目标IP,将请求报文的原IP和目标IP上再次封装一个Directory自己的原IP和目标IP,基于此种机制进行转发;
特点:
1、RIP,DIP,VIP全得是公网地址;
2、RS网关不能指向也可能指向DIP;
3、请求报文经由Director转发,但响应报文将直接发往CIP;
4、不支持端口映射;
5、RS的OS必须支持隧道功能;
lvs-fullnat:
通过同时修改请求报文的源IP地址(CIP-->DIP)和目标IP地址(VIP-->RIP)进行转发;
(1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通;
(2)RS收到的请求报文源IP为DIP,因此响应报文将直接响应给DIP;
(3)请求和响应报文都经由Director;
(4)支持端口映射;
lvs会话保存方法:
session sticky 地址绑定,原地址哈希(会影响负载均衡效果)
session cluster 会话集群,负载到任何一个节点,会话都存在
session server 找一台服务器专用保持会话
lvs调度方法:
有两种模式:基于是否考虑后端主机的当前负载
静态方法:
rr, wrr, sh, dh (仅根据算法本身进行调度);
动态方法:
lc, wlc, sed, nq, lblc, lblcr ( 根据算法及各RS当前的负载状态进行调度)
静态方法:
RR:Round Robin:轮询/轮调/轮叫;
WRR:Weighted RR:加权轮询;(根据各个rs的情况,公平分配)
SH:Source Hashing:源地址哈希;(将来自同一IP地址的请求始终发往同一rs),很粗糙,削弱了负载均衡
DH:Destination Hashing:目标地址哈希;(客户端上次所请求的地址是由哪台服务器所代理,服务器会有缓存,下次来直接就分配给上一次代理的服务器)
动态方法:
负载值Overhead=
LC: least connections,最少连接;
Overhead=Active*256+Inactive活动链接数x256+非活动连接数
WLC: Weighted LC, 加权最少连接;
Overhead=(Active*256+Inactive)/weight活动链接数x256+非活动连接数÷权重
SED:Shortest Expections Delay最短期望延迟
Overhead=(Active+1)*256/weight活动链接数+1x256÷权重
NQ:Never Queue永不排队,先按权重大小,之后再用sed算法
LBLC:Locality-Based LC
动态的DH算法;
LBLCR:LBLC with Replication
带复制功能的LBLC;
ipvsadm:用户空间的集群服务管理工具;
# ipvsadm -Ln 查看规则
Prot:哪个协议
LocalAddress:Port : vip的地址
Scheduler : 调度方法
Flags :标志位
RemoteAddress:Port :rs的地址
Forward: 转发方法
weight:权重
ActiveConn:活动联连接数
InActConn:非活动连接数
#ipvsadm -Ln --rate 查看速率
CPS :每秒钟的连接数
InPPS :每秒的入站报文数
OutPPS:每秒的出站报文数
InBPS:每秒的入站字节数
OutBPS:每秒的出站字节数
# ipvsadm -Ln --stats 统计数据
Conns :总的连接数
InPkts:入站报文书数
OutPkts :出站的报文数
InBytes:入站的字节数
OutBytes:出站的字节数
管理集群服务:增、改,删,查
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A:增
-E:修改
-t:tcp
-u:udp
-f:firewall mark防火墙标标记
service-address:
-t, tcp, vip:port
-u, udp, vip:port
-f, fwm, mark标记
-s scheduler:调度方法,默认为wlc;
e.g. 添加一个集群
# ipvsadm -A -t 192.168.19.129:80 -s rr
# ipvsadm -Ln
e.g. 将算法改为wrr
# ipvsadm -E -t 192.168.19.129:80 -s wrr
ipvsadm -D -t|u|f service-address(指明哪个协议哪个地址)
-D:删除
管理集群上的RS:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-a:增
-e:改
-r server-address
RS的地址;
rip[:port](有些类型不支持端口映射,此处端口可以省略)
集群类型:
-g, gateway, dr类型,默认
-i, ipip, tun类型
-m, masquerade, nat类型
-w weight---权重(有的算法不支持权重)
e.g.添加一个RS
# ipvsadm -a -t 192.168.19.129:80 -r 192.168.19.128 -m -w 1
e.g.将 w改为3(注意地址不能改,只能删)
# ipvsadm -e -t 192.168.19.129:80 -r 192.168.19.128 -m -w 3
e.g. 以上两步骤图示:
查看:
ipvsadm -L|l [options]
-n, --numeric:数字格式显示IP和PORT;
--exact:精确值;不做单位换算
-c, --connection:显示IPVS连接;
--stats:统计数据;
--rate:速率;
清空规则:
-C:
保存和重载:
ipvsadm -S > /PATH/TO/SOME_RULE_FILE
重载:
ipvsadm -R < /PATH/TO/SOME_RULE_FILE
清空计数器:
ipvsadm -Z [-t|u|f service-address]
e.g. 保存刚才的规则
# ipvsadm -S > /tmp/ipvsadm-config.v1
需要用时只需重载即可
# ipvsadm -R < /tmp/ipvsadm-config.v1
要想开机自启:(CentOS 7)
# ipvsadm -S > /etc/sysconfig/ipvsadm
lvs-nat:
设计要点:
(1) DIP与RIP要在同一IP网络,RIP的网关要指向DIP;
(2) 支持端口映射;
(3) 是否用到共享存储取决业务需求;
Lvs(DR)+keepalived(双主):
版本:
keeplived :1.2.21
ipvsadm :1.26
准备4台服务器:
Directo 1:
DIP 192.168.1.55
主VIP 192.168.1.15
备VIP 192.168.1.16
Directo 2:
DIP 192.168.1.56
主VIP 192.168.1.16
备VIP 192.168.1.15
RS1
eth0 192.168.1.57
VIP 192.168.1.15
VIP 192.168.1.16
RS2
eth0 192.168.1.58
VIP 192.168.1.15
VIP 192.168.1.16
1、确保 iptables selinux 不会成为阻碍
2、确保两台lvs同步时间
3、在Directo 1、Directo 2,都按装上ipvsadm、keepalived。
4、在RS1、RS2,都安装上http服务。
安装keepalived:
# cd /app/soft
# su - CACC
$ mkdir /app/keepalived
$ wget http://www.keepalived.org/software/keepalived-1.2.21.tar.gz
$ tar -xf keepalived-1.2.21.tar.gz
$ cd keepalived-1.2.21
$ ./configure --prefix=/app/keepalived
$ make && make install
$ vim /app/keepalived/etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass HNx6k728
}
virtual_ipaddress {
192.168.1.15
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 511
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass HNx6k728
}
virtual_ipaddress {
192.168.1.16
}
}
virtual_server 192.168.1.15 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.1.57 80{
weight 1
HTTP_GET {
}
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.58 80 {
weight 1
HTTP_GET {
}
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 192.168.1.16 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.1.57 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.58 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# scp /etc/keeplived/keepalived.conf root@192.168.1.56:/etc/keepalived/keepalived.conf
另一个lvs:
keepalived.conf只需修改以下即可
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 98
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 511
priority 100
ipvsadm 安装:
检查是否安装依赖包:
rpm -ql Kernel-devel
rpm -ql gcc
rpm -ql openssl
rpm -ql openssl-devel
rpm -ql popt
rpm -ql popt-deve
rpm -ql libnl
rpm -ql libnl-devel
rpm -ql popt-static
# cd /app/soft
# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
建立编译安装需要的软连接:
# ln -s /usr/src/kernels/2.6.32-642.4.2.el6.x86_64/ /usr/src/linux
# make && make install
验证:
# ipvsadm
另一台ipvsadm同样操作;
关闭RS1、RS2 arp响应:
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/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置RS1与RS2的VIP(分别在RS1、RS2执行)
ifconfig lo:0 192.168.1.15 netmask 255.255.255.255 broadcast 192.168.1.15
ifconfig lo:00 192.168.1.16 netmask 255.255.255.255 broadcast 192.168.1.16
为RS1、RS2添加路由(分别在RS1、RS2执行)
route add -host 192.168.1.15 dev lo:0
route add -host 192.168.1.16 dev lo:00
Directo 1:
$ /app/keepalived/sbin/keepalived
# service network restart
查看规则:
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.15:80 rr
-> 192.168.1.57:80 Route 1 0 0
-> 192.168.1.58:80 Route 1 0 0
TCP 192.168.1.16:80 rr
-> 192.168.1.57:80 Route 1 0 0
-> 192.168.1.58:80 Route 1 0 0
Directo 2:
$ /app/keepalived/sbin/keepalived
# service network restart
查看规则:
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.15:80 rr
-> 192.168.1.57:80 Route 1 0 0
-> 192.168.1.58:80 Route 1 0 0
TCP 192.168.1.16:80 rr
-> 192.168.1.57:80 Route 1 0 0
-> 192.168.1.58:80 Route 1 0 0
在RS1与RS2上安装http服务并启动。
测试:
curl 192.168.1.15
curl 192.168.1.16
停掉LVS2的keepalived服务,查看LVS1的ip及测试是否正常
ip addr show eth0
标签:lvs
原文地址:http://11293309.blog.51cto.com/11283309/1854055