ip负载均衡技术是在负载调度器的实现技术中时最高效的,在已有的ip负载均衡技术中主要有通过网络地址转换,将一组服务器构建成一个高性能的,高可用的虚拟服务器我们称之为VS/NAT技术。
在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了VS/TUN和直接通过路由实现虚拟服务器的方法VS/DR,他们可以极大的提高系统的伸缩性
LVS三种模式的特点:
` | VS/NAT | VS/TUN | VS/DR |
---|---|---|---|
服务器操作系统 | 任意 | 支持隧道 | 多数(支持Non-arp ) |
服务器网络 | 私有网络 | 局域网/广域网 | 局域网 |
服务器数目(100M网络) | 10-20 | 100 | 多(100) |
服务器网关 | 负载均衡器 | 自己的路由 | 自己的路由 |
效率 | 一般 | 高 | 最高 |
管理 LVS 的虚拟服务
-A 增加 ipvsadm 在内核列表中增加一个新的调度服务,也可以理解为添加一主机。
-s 指定该调度服务使用到算法。
-t|-u指定IP地址和端口,t表示TCP协议,u表示UDP协议。
-E 编辑已经存在的调度列表。
-D 删除某条调度列表。管理 LVS 的真实服务器
-a 增加一个IP地址来参与响应请求服务。
-t|-u指定调度列表中主机的IP地址和端口,t表示TCP协议,u表示UDP协议。
-r 指定参与响应请求的IP地址和端口。
-g 表示DR模式
-i 表示TUN模式
-m 表示NAT模式
-w 指定权重,供那些加权算法参考,如1、2、3。
-e 编辑指定的真实服务器。
-d 删除指定的真实服务器。查看和管理当前 LVS 配置
-C 清空所有配置列表。
-Z 清零当前连接计算器。
-l 显示当前内核LVS状态。
-c 显示当前LVS的连接情况,配合l使用。
–stats显示统计数据。
–rat显示速率数据。
–sort对输出进行排序。
-n不进行主机名解析,直接输出IP,加快显示速度。LVS 调度算法
rr 轮叫(Round Robin) 调度器通过"轮 叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务 器,而不管服务器上实际的连接数和系统负载。
wrr 加权轮叫(Weighted Round Robin) 调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调 度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lc 最少链接(Least Connections) 调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链 接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
wlc 加权最少链接(Weighted Least Connections) 在集群系统中的服务器性能差异较大 的情况下,调度器采用"加权最少链接"调度
算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lblc 基于局部性的最少链接(Locality-Based Least Connections) “基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要 用于Cache集群系统。该算法根据请求的目标IP地
址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若
服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。
lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) "带复制的基于局部性最少链接"调度算法也是 针对目标IP地址的负载均衡,目前主要用于Cache集
群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地 址到一组服务器的映射,而LBLC算法维护从一个目标IP地
址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台服务器,将该服务
器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
dh 目标地址散列(Destination Hashing) "目标地址散列"调 度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
sh 源地址散列(Source Hashing) "源地址散列"调 度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
VS/DR 通过直接路由实现虚拟服务器
输入层:负载均衡高可用
首先 配置服务器的yum源
将有关负载均衡以及高可用的套件加进去
然后下载安装ipvsadm
添加
由于目前没有100ip 所以先加入vip
同时服务端也需要添加vip 原因是因为tcp的三次握手
Ip addr add 172.25.19.100/24 dev eth0
但是从这里看 这几台设备都有100地址 呢么访问100 的时候谁先相应就用谁的
呢么运气不好的条件下 我们所作的负载均衡就失去了效果
呢么就需要在两台真实服务器中 (可以参考红帽官网的文档)
下载arptables_jf
当然这个ip与你的vip保持相同
将他保存下来
这个是效果
Ldirectord
下载
yum install ldirectord-3.9.5-3.1.x86_64.rpm
[root@server1 ~]# rpm -ql ldirectord
/etc/ha.d
/etc/ha.d/resource.d
/etc/ha.d/resource.d/ldirectord
/etc/init.d/ldirectord
/etc/logrotate.d/ldirectord
/usr/lib/ocf/resource.d/heartbeat/ldirectord
/usr/sbin/ldirectord
/usr/share/doc/ldirectord-3.9.5
/usr/share/doc/ldirectord-3.9.5/COPYING
/usr/share/doc/ldirectord-3.9.5/ldirectord.cf
/usr/share/man/man8/ldirectord.8.gz
[root@server1 ~]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf
cp: missing destination file operand after `/usr/share/doc/ldirectord-3.9.5/ldirectord.cf'
Try `cp --help' for more information.
[root@server1 ~]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
[root@server1 ~]# cd /etc/ha.d/
[root@server1 ha.d]# ls
ldirectord.cf resource.d shellfuncs
[root@server1 ha.d]# vim ldirectord.cf
『
virtual=172.25.19.100:80 vip
real=172.25.19.2:80 gate 真实服务器主机的ip
real=172.25.19.3:80 gate 真实服务器主机的ip
fallback=127.0.0.1:80 gate
service=http
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
# receive="Test Page"
# virtualhost=www.x.y.z
』
[root@server1 ha.d]# ipvsadm -C #将原来自己编写的一些规则刷掉
[root@server1 ha.d]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
启动 ld
然后 策略会自动编写在ipvsadm 里面
当一台服务器挂掉后 不再会调用挂掉的服务器
以下为结果
当一台服务器挂掉后 就不会伦叫错误的
两台都挂掉了后 会调用主机的
Ld实现了对服务健康的检测
关掉ld
负载均衡高可用
211 tar zxf keepalived-2.0.6.tar.gz #解压这个包
212 cd keepalived-2.0.6 #进入该目录
213 ls
214 ./configure --prefix=/usr/local/keepalived --with-init=SYSV
218 yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
220 ./configure --prefix=/usr/local/keepalived --with-init=SYSV
224 yum install openssl-devel
225 ./configure --prefix=/usr/local/keepalived --with-init=SYSV
make #解决完它的error 然后make
240 make install
244 cd /usr/local/
245 ls
246 cd keepalived/
261 cd etc/rc.d/
262 ls
263 cd init.d/
264 ls
265 chmod +x keepalived #为该脚本增添可执行权限
292 ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d #建立软连接
293 ln -s /usr/local/keepalived/etc/keepalived /etc/
294 ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
295 ln -s /usr/local/keepalived/sbin/keepalived /sbin/
296 which keepalived
297 /etc/init.d/keepalived start
298 cd /usr/local/
299 ls
300 scp -r keepalived/ server4:/usr/local/ #同样的需要在另外一台服务机器作相同的配置
302 yum install -y mailx
303 vim /etc/keepalived/keepalived.conf
304 ip addr del 172.25.19.100/24 dev eth0
305 ip addr
306 ip addr del 172.25.19.200/24 dev eth0
307 ipvsadm -l
308 ipvsadm -C
309 ipvsadm -l
310 /etc/init.d/ldirectord stop
311 ipvsadm -l
312 ls
313 cd /etc/keepalived/
314 ls
315 scp keepalived.conf server4:/etc/keepalived/
316 /etc/init.d/keepalived restart
317 ipvsadm -l
318 iptables -l
319 iptables -L
320 vim /etc/keepalived/keepalived.conf
321 iptables -F
322 iptables -L
323 /etc/init.d/keepalived restart
324 ipvsadm -l
325 iptables -L
326 ipvsadm -l
327 ip addr
328 cat /var/log/messages
329 ipvsadm -L
330 ipvsadm -l
331 ip addr
332 ip addr -d 172.25.19.100/32
333 ip addr -d 172.25.19.100/32 dev eth0
334 ip addr -del 172.25.19.100/32 dev eth0
335 ipvsadm
336 vim /etc/keepalived/keepalived.conf
337 iptables 0L
338 iptables -L
339 /etc/init.d/keepalived restart
340 ipvsadm
341 ipvsadm -L
342 vim /etc/keepalived/keepalived.conf
343 /etc/init.d/keepalived restart
344 vim /etc/keepalived/keepalived.conf
345 /etc/init.d/keepalived restart
20 yum install -y mailx
21 vim /etc/keepalived/keepalived.conf
22 /etc/init.d/keepalived restart
23 cd
24 vim /var/spool/mail/root
25 vim /etc/keepalived/keepalived.conf
26 /etc/init.d/keepalived restart
27 cat /var/log/messages
28 vim /etc/keepalived/keepalived.conf
29 /etc/init.d/keepalived restart
30 > /var/log/messages
31 /etc/init.d/keepalived restart
32 cat /var/log/messages
33 vim /etc/keepalived/keepalived.conf
34 /etc/init.d/keepalived restart
35 vim /etc/keepalived/keepalived.conf
36 /etc/init.d/keepalived restart
37 history
下面VS/TUN ip隧道实现虚拟服务器 以及NAT实现虚拟服务器 为自己的理解 不足之处还往指出
示意图哦
172.25.19.1 ipvsadm主机
172.25.19.119 VIP
172.25.19.2
。。。
会出现tun这个接口
当然rs上也需要出现该端口
vs
(如果有两个网卡,可以将VIP地址配置到另一个网卡上)
ip addr add 172.25.19.119/24 dev tunl0
ipvsadm -A -t 172.25.19.119:80 -s rr
ipvsadm -a -t 172.25.19.119:80 -r 172.25.19.2:80 -i
ipvsadm -a -t 172.25.19.119:80 -r 172.25.19.3:80 -i
ipvsadm -a -t 172.25.19.119:80 -r 172.25.19.1:80 -i #别的挂了的话vs也可以自己上
rs1 rs2
ip addr add 172.25.19.119/24 dev tunl0
作一下arp抑制 与dr 相同参考上面
将 tunl打开 ip link set up tuml0
需要将 sysctl -w net.ipv4.conf.tunl0.rp_filter 关闭
系统的话默认不接受不由直接连接的网络所传递来的数据包
rs1: ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.19.119:80 rr
-> 172.25.19.1:80 Local 1 1 0
-> 172.25.19.2:80 Tunnel 1 1 0
-> 172.25.19.3:80 Tunnel 1 1 0
访问172.25.19.119能出现轮训不同的页面即表示搭建LVS成功。
Forward为Tunnel即为IP隧道模式tun。
Weight表示权重。
ActiveConn是表示处于TCP的ESTABLISHED(确定建立)状态的连接数目,ActiveConn的各项总和即为当前已建立连接的总和。
InActConn表示处于TCP的非ESTABLISHED状态的连接数目,包括SYN_RECEIVED, TIME_WAIT, CLOSE_WAIT状态等等。
结果:
NAT:
首先配置以下环境
sever1作为vs (双网卡)
sever2、sever3作为rs
同样的yum源需要全部设置出来
2.下载ipvsadm
[root@server1: ~]# yum install ipvsadm -y
下载完成后启动
[root@server1: ~]# /etc/init.d/ipvsadm start
3.打开内部路由设置
[root@server1: ~]# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1 ##0=关闭 1=开启
[root@server1: ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: “net.bridge.bridge-nf-call-ip6tables” is an unknown key
error: “net.bridge.bridge-nf-call-iptables” is an unknown key
error: “net.bridge.bridge-nf-call-arptables” is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
4.添加ipvsadm规则
[root@server1: ~]# ipvsadm -A -t 172.25.254.119:80 -s rr
[root@server1: ~]# ipvsadm -a -t 172.25.254.119:80 -r 172.25.19.2:80 -m
[root@server1: ~]# ipvsadm -a -t 172.25.254.119:80 -r 172.25.19.3:80 -m
[root@server1: ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.191:80 rr
-> 172.25.19.2:80 Masq 1 0 0
-> 172.25.19.3:80 Masq 1 0 0
2.server(2)
1.下载http服务
[root@server2: network-scripts]# yum install httpd -y
[root@server2: network-scripts]# cat /var/www/html/index.html
server2
[root@server2: network-scripts]# /etc/init.d/httpd restart
2.配置RS的网关指向vs
[root@server2: network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=172.25.19.2
PREFIX=24
GATEWAY=172.25.19.1
DNS1=114.114.114.114
3.server(3)
1.下载http服务
[root@server3: network-scripts]# yum install httpd -y
[root@server3: network-scripts]# cat /var/www/html/index.html
server3
[root@server3: network-scripts]# /etc/init.d/httpd restart