负载均衡
来源:互联网 发布:淘宝店招聘模特大连 编辑:程序博客网 时间:2024/05/22 14:15
提高性能
降低成本
提高可扩展性
增强可靠性
高可用性集群 High-availability (HA) clusters
负载均衡集群 Load balancing (LB)clusters
高性能计算集群 High-performance (HP) clusters
网格计算 Grid computing
负载均衡集群 Load balancing (LB)clusters
高可用性集群 High-availability (HA) clusters
高性能计算集群 High-performance (HP) clusters
ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间。
ipvs:为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)。
VIP:Director用来向客户端提供服务的IP地址,也是DNS解析的IP。
RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址。
DIP:Director用来和RIP进行交互的IP地址。
CIP:公网IP,客户端使用的IP。
LVS-NAT:网络地址转换 Network address translation
LVS-DR:直接路由 Direct routing
LVS-TUN:IP隧道 IP tunneling
VS/NAT: 即(Virtual Server via Network Address Translation)
RIP和DIP必须在同一个网段内。
RIP通常是私有地址,仅用于个集群 。RIP的网关必须指向DIP。
支持口映射 。
realsever可以使用任意OS(操作系统)
较大规模应用场景中director会成为系统瓶颈。
VS/TUN :即(Virtual Server via IP Tunneling)
各集群节点可以跨越不同的网络。
RIP必须是公网地址。
director只负责处理入站请求,相应报文则有realserver直接发往客户端 。
realserver网管不能指向director。
只有支持隧道共跟那个的os才能用户realserver 。
不支持端口映射。
VS/DR: 即(Virtual Server via Direct Routing)
集群节点跟director必须在同一个物理网络中(不能有路由器分隔)。
RIP可以使用公网地址,实现便捷的远程控制服务器。
director只负责处理入站请求,相应报文则有realserver直接发往客户端。
realserver不能将网关指向DIP。
director不支持端口映射 。
大多数操作系统都能应用在real server上 。
DR比NAT能处理更多的请求。
RS跟Dirctory要在同一物理网络内
rr : round robin:轮叫,轮询
wrr: weight round robin :加权轮询(以权重之间的比例实现在各主机之间进行调度)
sh : source hashing : 源地址hash 实现会话绑定session affinity
dh : destination hashing : 目标地址hash
lc :leash-connection 最少连接
wlc:加权最少连接
sed :最少期望延迟
nq :never queue 永不排队
LBLC :基于局部性的最少连接
LBLCR :基于局部性的带复制功能的最少连接
Session绑定:始终将统一请求者的连接定向至统一RS(第一次请求时仍有调度选择),没有容错的能力,反均衡效果。
Session复制:在RS之间同步session,因此,每个RS持集群中所有的session,对于大服务器集群环境不适用。
Session服务器:利用单独部署的服务器来统一管理session,该服务器必须做到高可用。
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]
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]
ipvsadm --stop-daemon
ipvsadm -h
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则。
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式。
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器 记录。也就是在一个虚拟服务器中增加一台新的真实服务器。
-e --edit-server 编辑修改一条虚拟服务器记录中的某条真实服务器记录。
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录。
-L|-l --list 显示内核虚拟服务器表。
-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)。
--set tcp tcpfin udp 设置连接超时值 。
--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说 明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的 VRRP 功能。
--stop-daemon 停止同步守护进程。
-h --help 显示帮助信息。
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务 [vip:port] or [real-server-ip:port]。
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务 [vip:port] or [real-server-ip:port] 。
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, 默认的调度算法是: wlc。
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客 户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M --netmask netmask persistent granularity mask。
-r --real-server server-address 真实的服务器[Real-Server:port]。
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)。
-i --ipip 指定LVS 的工作模式为隧道模式。
-m --masquerading 指定LVS 的工作模式为NAT 模式。
-w --weight weight 真实服务器的权值。
--mcast-interface interface 指定组播的同步接口 。
-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c。
--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout 。
--daemon 显示同步守护进程状态 。
--stats 显示统计信息 。
--rate 显示速率信息。
--sort 对虚拟服务器和真实服务器排序输出 。
--numeric -n 输出IP 地址和端口的数字形式
[root@node1 ~]
# cat /usr/local/apache/htdocs/index.html
<html><body><h1>node1<
/h1
><
/body
><
/html
>
[root@node2 ~]
# cat /usr/local/apache/htdocs/index.html
<html><body><h1>node2<
/h1
><
/body
><
/html
>
[root@Director ~]
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
root@Director ~]
# sysctl -p
[root@Director ~]
# cat /proc/sys/net/ipv4/ip_forward
1
[root@Director ~]
# ipvsadm -A -t 192.168.1.88:80 -s rr
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:80 -r 192.168.20.9 -m
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:80 -r 192.168.20.10 -m
[root@Director ~]
# 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.1.88:80 rr
-> 192.168.20.9:80 Masq 1 0 0
-> 192.168.20.10:80 Masq 1 0 0
[root@Director ~]
# ipvsadm-save > /etc/sysconfig/ipvsadm.nat
[root@Director ~]
# cat /etc/sysconfig/ipvsadm.nat
-A -t 192.168.1.88:http -s rr
-a -t 192.168.1.88:http -r 192.168.20.9:http -m -w 1
-a -t 192.168.1.88:http -r 192.168.20.10:http -m -w 1
[root@Director ~]
# ipvsadm -C
[root@Director ~]
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@Director ~]
# ipvsadm-restore < /etc/sysconfig/ipvsadm.nat
[root@Director ~]
# 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.1.88:80 rr
-> 192.168.20.9:80 Masq 1 0 0
-> 192.168.20.10:80 Masq 1 0 0
[root@Director ~]
# curl
http:
//192
.168.1.88
<html><body><h1>node1<
/h1
><
/body
><
/html
>
[root@Director ~]
# curl
http:
//192
.168.1.88
<html><body><h1>node2<
/h1
><
/body
><
/html
>
[root@Director ~]
# curl
http:
//192
.168.1.88
<html><body><h1>node1<
/h1
><
/body
><
/html
>
[root@Director ~]
# curl
http:
//192
.168.1.88
<html><body><h1>node2<
/h1
><
/body
><
/html
>
[root@Director ~]
# ipvsadm -E -t 192.168.1.88:80 -s wrr
[root@Director ~]
# ipvsadm -e -t 192.168.1.88:80 -r 192.168.20.9 -m -w 3
[root@Director ~]
# curl
http:
//192
.168.1.88
<html><body><h1>node1<
/h1
><
/body
><
/html
>
[root@Director ~]
# curl http://192.168.1.88
<html><body><h1>node1<
/h1
><
/body
><
/html
>
[root@Director ~]
# curl http://192.168.1.88
<html><body><h1>node1<
/h1
><
/body
><
/html
>
[root@Director ~]
# curl http://192.168.1.88
<html><body><h1>node2<
/h1
><
/body
><
/html
>
[root@Director ~]
# curl http://192.168.1.88
<html><body><h1>node1<
/h1
><
/body
><
/html
>
[root@Director ~]
# 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.1.88:80 wrr
-> 192.168.20.9:80 Masq 3 1 6
-> 192.168.20.10:80 Masq 1 0 2
[root@Director ~]
# ipvsadm -L -c
IPVS connection entries
pro expire state
source
virtual destination
TCP 01:55 TIME_WAIT 192.168.1.103:50197 192.168.1.88:http 192.168.20.9:http
TCP 14:57 ESTABLISHED 192.168.1.103:50199 192.168.1.88:http 192.168.20.9:http
[root@Director ~]
# ifconfig eth0:0 192.168.1.88 netmask 255.255.255.0 up
[root@Director ~]
# route add -host 192.168.1.88 dev eth0:0
[root@node1 ~]
# ifconfig lo:0 192.168.1.88 netmask 255.255.255.255 broadcast 192.168.1.88 up
[root@node2 ~]
# route add -host 192.168.20.88 dev lo:0
[root@node1 ~]
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@node1 ~]
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node1 ~]
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@node1 ~]
# cat /usr/local/apache/htdocs/index.html
<html><body><h1>node1!<
/h1
><
/body
><
/html
>
[root@node1 ~]
# service httpd24 start
[root@node2 ~]
# ifconfig lo:0 192.168.20.88 netmask 255.255.255.255 broadcast 192.168.20.88 up
[root@node2 ~]
# route add -host 192.168.20.88 dev lo:0
[root@node2 ~]
# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
[root@node2 ~]
# echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
[root@node2 ~]
# echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@node2 ~]
# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]
# cat /usr/local/apache/htdocs/index.html
<html><body><h1>node1!<
/h1
><
/body
><
/html
>
[root@node2 ~]
# service httpd24 start
[root@Director ~]
# ipvsadm -A -t 192.168.1.88:80 -s rr
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.9 -g
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.10 -g
PCC 来自同一客户端所有服务的所有请求都被重定向到同一台Real Server上,以IP地址为准。
PPC 来自同一服务的请求都被重定向到同一台Real Server上,以端口号为准。
PNMP 基于防火墙标记的持久连接,根据iptables 的规则,将对于某类服务几个不同端口的访问定义为一类。
[root@Director ~]
# ipvsadm -C
[root@Director ~]
# ipvsadm -A -t 192.168.1.88:0 -s rr -p 120
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:0 -r 192.168.1.9 -g
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:0 -r 192.168.1.10 -g
[root@Director ~]
# 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.1.88:0 rr persistent 120
-> 192.168.1.9:0 Route 1 0 0
-> 192.168.1.10:0 Route 1 0 0
[root@Director ~]
# ipvsadm -A -t 192.168.1.88:80 -s rr -p 120
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.9 -g
[root@Director ~]
# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.10 -g
[root@Director ~]
# #iptables -t mangle -A PREROUTING -d 192.168.1.88 -i eth0 -p tcp --dport 80 -j MARK --set-mark 3
[root@Director ~]
# #iptables -t mangle -A PREROUTING -d 192.168.1.88 -i eth0 -p tcp --dport 443 -j MARK --set-mark 3
[root@Director ~]
# #ipvsadm -A -f 3 -s rr -p 600
[root@Director ~]
# #ipvsadm -a -f 3 -r 192.168.1.9 -g
[root@Director ~]
# #ipvsadm -a -f 3 -r 192.168.1.10 -g
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- mybatis 应用层读写分离
- 第八周项目一 建立顺序串的算法库
- Unity 5.2.1 UGUI 控件使用
- C++11新特性
- MFC中子窗口中的控件随着父窗口的改变而改变
- 负载均衡
- viewpager popupwindow
- DES SecretKeyFactory not available的处理
- loadrunner的响应时间
- angular基础2
- iOS 加载storyboard的公共方法
- Linux下头文件搜索路径及库文件的查找路径
- centos7 yum 方式安装nginx
- 调系统拨号及键盘