Linux下LVS负载均衡Linux Virtual Server

linux群集的类型:LB,HA,HP

负载均衡集群:Load Balancing

高可用集群:High Availability

    A = 平均无故障时间/(平均无故障时间+平均修复时间)

    95%, 99%, 99.9%, 99.99%, 99.999%

高性能集群:High Performance

    www.top500.org

分布式系统:

    NoSQL: HBase, Redis

    存储:MogileFS

    文件系统:Ceph

LB集群调度器的实现:

工作协议层来划分

tcp:根据请求报文中的目标地址和端口进行调度

应用层:根据请求的内容进行调度,而且此调度为“代理”方式

软件:

tcp:lvs,haproxy,nginx,

http:haproxy,nginx,apache(proxy module,balancer module) ,ats(apache  traffic server),squid,varnish

mysql:mysql-proxy

硬件:

F5:big-ip

citrix:netscaler

A10:A10

Array:

redware

lvs: Linux Virtual  Server章文嵩

组成部分:

ipvs:工作在netfilter的input链接上:

ipvsadm:用于ipvs上定义集群服务,同时也得定义此群集服务对应于有哪个后端记住可用。根据所指定的调度方法做出调度决策。

支持的协议:tcp/udp/sctp/ah/esp/ah_esp

lvs术语:

host:

director:调度器

real server:RS

ip:

client:cip

director vittual ip:

directory  ip:

real ip:rip

lvs的类型:

lvs-nat(masquerade): 地址伪装

类似于DNAT,但支持多目标地址转发。

它是通过修改请求报文的目标地址为根据调度算法所挑处的某RS的RIP来进行转发。

架构特性:

(1)RS应该使用私有地址,即RIP应该为私有地址,各RS的网关必须指向DIP。

(2)请求和相应报文都经由DIP转发;在高负载场景中,DIP容易成为瓶颈。

(3)支持端口映射

(4)Rs支持不同os

(5)Rs的RIP必须与director的dip的同一网络

dr(direct routing): 直接路由

director在实现转发时不修改请求的ip首部,而是通过直接封装Mac首部完成转发,目标MAC是director根据调度方法挑出某RS的mac地址

架构特性:

(1)保证前端路由器将目标地址为vip的请求报文通过arp地址解析后送往director

解决方案:

静态绑定:在前端路由器直接将对应的vip对应的目标mac静态配置为director的mac地址。

arptables:在各Rs上,通过arptables规则拒绝其相应对vip的arp广播请求。

内核参数:在Rs上修改内核参数,将结合地址的配置方式实现拒绝相应对vip的arp广播请求。

(2)Rs的Rip可以使用私有地址,但也可以使用公网地址,此时可通过互联网上的主机直接对此Rs发起管理操作。

(3)请求报文必须经由Director调度。

(4)各Rip必须与Dip在同一物理网络中。因为地址转发需要在mac地址封装来实现。

lvs-tun(tunneling):隧道模型

不修改请求报文的ip首部,而是通过ip隧道机制在原有的ip报文之外在封装ip。经由互联网把请求报文交给选定的Rs。

CIP;VIP;DIR;RIP

架构特性:

(1)RIP,DIP,VIP都是公网地址

(2)Rs的网关不能也不可能指向Dip

(3)请求报文由director分发,但相应报文直接由Rs相应给Client

(4)不支持端口映射

(5)RS的os必须支持ip隧道

full-nat:全nat

通过请求报文的源地址为DIP,目标地址为RIP来实现转发,对于相应报文而言,修改源地址为VIP,目标地址为CIP来实现转发。

架构特性:

(1)RIP,DIP可以使用私有地址。

(2)RIP和DIP可以不在同一个网络中,且RIP的网关未必需要指向DIP

(3)支持端口映射

(4)Rs的os可以使用任何类型

(5)请求报文经由Director,相应报文经由Director。

lvs scheduler:lvs调度

调度的10中方法:

[root@local /]# grep  -i 'IPVS' -A 20  /boot/config-2.6.32-504.el6.x86_64

# 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

静态方法:仅根据算法本身来实现调度。起点公平

RR:Round-robin:轮询

WRR:weighted round-robin,加权轮询

SH:source  ip hashing 源地址hash

DH:Destination ip Hashing 目标地址hash

动态方法:根据算法及后端Rs当前的负载状态来实现调度。结果公平

LC:least connection 最小连接

WLC: weighted least  connection加权最小连接

SED:Shorted  Expecton Delay 最短期望延迟

NQ:Never  Queue  从不排队

LBLC:Local-Based Connection静动态方式的DH算法

LBLCR:Replicated LBLC   带复制的静动态方式DH算法

Session 保持:

Session Sticky  session

Session Replication Cluster session

Session  Server

lvs概念基础:

ipvsadm 命令的用法

管理集群服务:创建,修改,删除

命令格式:   ipvsadm -A|E -t|u|f service-address [-s scheduler]

-A:添加

-E:修改

-t:承载的应用层协议为基于tcp协议提供服务器的,其service-address为 “VIP:PORT”,    “172.16.249.26:80”

-u:承载的应用层协议为基于tcp协议提供服务器的,其service-address为        “VIP:PORT”,    “172.16.249.26:80”

-f:承载的应用层协议基于tcp或者udp协议提供服务的协议,但此类报文会经由iptables/netfilter打标记,即为防火墙标记,其service-address的格式为“FWM” 如"10"

-s:调度方法 (默认的调度方法为:wlc)

删除:  ipvadm -D -t|u|f service-address

管理集群服务的Rs:添加或修改

命令格式: ipvsadm -a|-e -t|u|f service-address   -r service-address [-g|i|m] [-w weight]

-r service-address:指名Rs,service-addres格式一般为ip[:port],注意:只支持端口映射的lVS类型中才应该是显式定义此处端口。

如:-r 192.168.1.1:80

[-g|i|m]:lvs的类型

-g:gateway  为dr类型

-i:ipip 为tun类型

-m:masquerade 为nat类型

[-t weight]:当前RS的权重

注:此处仅对支持加权调度的schedule有意义。

删除:ipvsadm -d -t|u|f service-address -r server-address

清空所有群集服务的定义: ipvsadm -C

保存规则:

[root@local html]# service ipvsadm save

ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

恢复规则:

[root@local html]# ipvsadm  -R < /etc/sysconfig/ipvsadm

查看报文统计:

[root@local html]# ipvsadm -Ln  --stats

列出当前速率:
[root@local html]# ipvsadm -Ln  --rates

显示出精准值:

[root@local /]# ipvsadm -Ln --exact

清空计数数据:

[root@local /]# ipvsadm -Z

拓扑图:

 

网络描述:

在测试环境中,pc为物理机ip是172.16.250.81/16,

调度器有两块网卡地址分别为:eth0:172.16.249.26/16,eth1:192.168.1.4/24,

Rs1的ip是192.168.1.1/24

Rs2的ip是192.168.1.2/24

实验环境中网络连接方式:

172.16.249.26--桥接--物理机172.16.250.81

R1-eth0-- R2-eth0---调度器eth1 -设置为vmnet2

设置ip:

测试环境所有的设置均为临时的,生成环境需修改配置文件永久生效。

[root@local调度器]# ifconfig  eth0 172.16.249.26/16 up

[root@local调度器]# ifconfig  eth1 192.168.1.4/24 up

[root@local R1]# ifconfig  eth0 192.168.1.1/24 up

[root@local R2]# ifconfig  eth0 192.168.1.2/24 up

[root@local R1]# route add default gw 192.168.1.4

[root@local R2]# route add default gw 192.168.1.4

[root@local 调度器]# echo "1" > /proc/sys/net/ipv4/ip_forward  在调度器上开启路由转发

[root@local /]# iptables -F 清除iptables的所有规则

 

[root@local /]# ipvsadm -A -t 172.16.249.26:80 -s rr 添加调度方式为rr轮询,

[root@local /]# ipvsadm -a -t 172.16.249.26:80 -r 192.168.1.1 -m -w 1

[root@local /]# ipvsadm -a -t 172.16.249.26:80 -r 192.168.1.2 -m -w 3

[root@local /]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.16.249.26:80 rr

-> 192.168.1.1:80               Masq    1      0          0

-> 192.168.1.2:80               Masq    3      0          0

 

 

 

rs1

 

 

rs2

 

 

 

在Rs1上抓包可以看到,Rs1跟调度器之间的通讯信息:

[root@local html]# tcpdump  -i eth1  -nn  host 192.168.1.1 and tcp port 80

 


发表评论

登录 后发表评论.