小Q: 一直努力着,努力着,偶尔停下来歇歇,又要振作精神,继续努力着,
努力着,实现我的愿望;不敢奢望。
前面我们用heartbeat配置了高可用集群,用Lvs配置了负载均衡集群;而现在我们可以将两者的功能合二为一,用前面介绍高可用的时候讲到了另一个开源软件keepalived和LVS的ipvsadm合作完成;
-------------------------简介---------------------------
keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。作用是检测web服务器的状态,如果有一台web服务器工作出现故障,Keepalived会将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,全自动;
ipvs称为IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载平衡功能的一种技术,而且LVS核心软件就是ipvsadm。
因为我么搭建了负载均衡集群后,不能保证没一台都那么高效的工作,如果其中一台两台多台real server故障后,客户端请求的时候就会一直显示连接错误,那怎么办?
如果我们负载均衡机出故障,客户将一直连接不到服务,那怎么办?
可能你会想到前面的heartbeat高可用不就是解决这种问题的嘛,但是他无法实现负载集群功能,我们可不能为每一台机子都配置heartbeat主机热备;于是keepalived应运而生,他同时拥有高可用的主机热备和负载均衡的调解功能;而且它可以无缝扩展realserver,只需更改keepalived配置和增加机子的启动脚本。
-------------------------前期准备-----------------------
我们至少需要四台机子才可搭建这种高可用+负载均衡服务;但鉴于我们是做实验,三台就可以了,rs2与备机共用一台机子;实际上备机要是单独的机子。
director+主机 :192.168.11.190 real server 1 :192.168.11.20 real server+备 :192.168.11.30 虚拟主机VIP :192.168.11.100 因为用的DR模式,所以要配置vip
更改主机名为dir rs1 rs2: hostname dir >>> bash rs1与rs2同理更改
清空以前的规则:ipvsadm -c iptables -t net -F
$ipv -C ifconfig eth0:0 down
dir主机和rs2备机:
yum install -y keepalived
所有机子(三台):
yum install -y ipvsadm
yum install -y nginx 也可以是别的服务,也可以源码包安装,端口打开就好
-------------------------文件配置-----------------------
dir主机:
vim /etc/keepalived/keepalived.conf //加入如下:
vrrp_instance VI_1 { state MASTER #备用服务器上为 BACKUP,状态 interface eth0 # 监听VIP的网卡 virtual_router_id 51 priority 100 # 备用服务器上为90 启动优先级,越大越高 advert_int 1 authentication { # 集群通信的认证机制 auth_type PASS auth_pass 1111 } virtual_ipaddress { # VIP 192.168.11.110 } } virtual_server 192.168.11.100 80 { delay_loop 6 # (每隔10秒查询realserver状态) lb_algo wlc # (lvs 算法) lb_kind DR # (Direct Route) persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver) protocol TCP # (用TCP协议检查realserver状态) real_server 192.168.11.20 80 { real server1 weight 100 # (权重) TCP_CHECK { connect_timeout 10 # (10秒无响应超时,超时断开连接) nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.11.30 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
主从双机热备在系统配置上几乎是一样的,只是几个选项配置不一样,只不过这次的备机是建立在了real server上,所以还要加点real server应该有的内容;
从机上的配置通上,需要更改的两处,文件中已经标出,主机超级复制过去即好;
scp 文件路径 主机名@从机IP:存放的路径
配置完keepalived后,需要开启端口转发(主从都要做):
echo 1 > /proc/sys/net/ipv4/ip_forward
我们配置负载均衡的时候把端口转发等配置规则写到了lvs_dr.sh脚本中,而这次规则由keepalived制定了,另外的只需要执行端口转发就好;其实说白了这种高可用的负载集群就是让keepalived帮LVS配置了应该ipvsadm配置的规则。
rs1与rs2:都是作为real server ,配置都一样
vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash vip=192.168.11.100 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 配置静态路由,不变 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
启动:bash(/bin/bash) /usr/local/sbin/lvs_dr.sh 其实不用
启动主从双机keepalived:(先主后从)
/etc/init.d/keepalived start
另外,需要注意的是,启动keepalived服务会自动生成vip和ipvsadm规则,不需要再去执行上面提到的/usr/local/sbin/lvs_dr.sh 脚本。
查看方式:可在任意时段查询明确过程
查看 IP : ip addr ifconfig查不到虚拟IP,因为虚拟IP配置到了eth0上
查看集群 ipvsadm -ln
----------------------测试---------------------
为了易于观察,还是去更改一下nginx的默认页面显示,方法前面提到过两次了;
rs1上: echo "rs1rs1" >/usr/share/nginx/html/index.html
rs2上: echo "rs2rs2" >/usr/share/nginx/html/index.html
可以到浏览器看,但是总出问题,不推荐;去windows上的命令行或者另找一台服务器 ping 192.168.11.100
宕掉 rs1 :ifdown eth0 或 /etc/init.d/nginx stop
查看dir : ipvsadm -ln 或 ip addr 会发现192.168.11.20 不见了
而且ping的时候,会一直链接rs2,并不显示rs1连接不上;
当把 rs1恢复后,一切又恢复正常了;
宕掉dir : ifdown eth0 或 /etc/init.d/nginx stop
查看rs2: 我们在dir主机上查看不到什么了,但是在rs2上(代用备机)可以查到原本在dir上显示的内容; 此时我们在其他机子ping的时候,正常显示;
扩展:haproxy+keepalived实现高可用负载均衡
http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
比较清晰 http://s2t148.blog.51cto.com/3858027/888263