Keepalived高可用集群来实现web服务器负载均衡集群node
1、Keepalived的介绍web
Keepalived是一个提供HA重要的底层工具,最先期的做用是为ipvs提供HA功能的,还是一个能够提供vrrp已经health-check功能的服务软件,能够只用它提供双机浮动的vip(vrrp虚拟路由功能),这样能够简单实现一个双机热备高可用功能。同时咱们还能够利用LVS+Keepalived基于完整开源软件的架构能够为你提供一个负载均衡及高可用的服务器。 Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,能够利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),可是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。算法
2、VRRP的介绍bash
VRRP:Virtual Router Redundancy Protocol,是虚拟路由冗余协议,经过此协议咱们能够把多个路由器作成一个虚拟路由器,从而来保证其中某个路由宕掉的时候不会形成咱们内部外出网络的所有中断。VRRP中的各个路由器都有一个惟一的标识VRID,其范围为0-255,路由器对外表现为惟一的虚拟MAC地址,地址的格式为00-00-5E-00-01-[VRID]。主控路由器负责对ARP请求用该MAC地址作应答。这样,不管如何切换,保证给终端设备的是惟一一致的IP和MAC地址,减小了切换对终端设备的影响。其中的VRID中的0和255是保留的,0用于IP地址全部者主动放弃主控者角色时使用,255用于VRRP路由器的IP地址和虚拟路由器的接口IP地址相同时所拥有服务器
3、LVS的配置与安装,网络
启用四台虚拟机,我选择是192.168.0.x.的网段,虚拟主机是172.16.9.1,因为不在一个网段,须要加一个路由Routdde add default gw 172.16.0.1架构
Real Server1:192.168.0.54 Real Server2:192.168.0.55负载均衡
HA1:192.168.0.53 HA2;192.168.0.57ide
VIP:172.16.9.1工具
配置以前keepalived以前,先下载好yum软件包,配置好http的软件安装,解决好依赖关系,更有利于后面的进行
RIP不能被外部主机解析使用脚本vipset.sh进行设置,要用vipset.sh脚本如配置VIP和arp参数
测试一下
Real Server1
Real Server2
Vipset.sh脚本以下所示:
#!/bin/bash # # Script to start LVS DR real server. # description: LVS DR real server # . /etc/rc.d/init.d/functions VIP=172.16.9.1 #VIP地址 host=`/bin/hostname` #定义host变量 case"$1"in start) #start的时候设置本机arp不被外部主机解析 # Start LVS-DR real server onthismachine. /sbin/ifconfig lo down /sbin/ifconfig lo up echo1> /proc/sys/net/ipv4/conf/lo/arp_ignore echo2> /proc/sys/net/ipv4/conf/lo/arp_announce echo1> /proc/sys/net/ipv4/conf/all/arp_ignore echo2> /proc/sys/net/ipv4/conf/all/arp_announce /sbin/ifconfig lo:0$VIP broadcast $VIP netmask255.255.255.255up #配置vip在lo:0,而且设置广播地址和子网掩码,此处使用32位是保证此vip不能与其余地址通讯。 /sbin/route add -host $VIP dev lo:0#增长路由 ;; stop) #stop的时候恢复到系统的初始化arp参数 # Stop LVS-DR real server loopback device(s). /sbin/ifconfig lo:0down echo0> /proc/sys/net/ipv4/conf/lo/arp_ignore echo0> /proc/sys/net/ipv4/conf/lo/arp_announce echo0> /proc/sys/net/ipv4/conf/all/arp_ignore echo0> /proc/sys/net/ipv4/conf/all/arp_announce ;; status) # Status of LVS-DR real server. islothere=`/sbin/ifconfig lo:0| grep $VIP` isrothere=`netstat -rn | grep"lo:0"| grep $VIP` if[ !"$islothere"-o !"isrothere"];then # Either the route or the lo:0device # not found. echo"LVS-DR real server Stopped." else echo"LVS-DR real server Running." fi ;; *) # Invalid entry. echo"$0: Usage: $0 {start|status|stop}" exit1 ;; Esac
4、DR上的相关软件的配置和安装
(1)下载keepalived-1.2.7-5.el5.i386.rpm
(2)安装keepalived软件,必定要解决依赖关系
安装以前必定要与服务器时间同步 ntpdate 172.16.9.1
(3)、ipvsadm软件安装
5、LVS的配置包括两部分,虚拟主机组和虚拟主机
virtual_server 192.168.200.100 443 { #设置VIP port delay_loop 6 #多少秒检查一次real server的健康状态 lb_algo rr #调度算法 lb_kind NAT #lvs模型 nat_mask 255.255.255.0 #虚拟VIP的掩码 persistence_timeout 50 #长链接时间 protocol TCP #协议类型 real_server 192.168.201.100 443 { #定义real server weight 1 #定义权重 SSL_GET { #检查web服务的SSL情况 url { path / digest ff20ad2481f97b1754ef3e12ecd3a9cc } url { #检查服务器的web服务情况 path /mrtg/ digest 9b3a0c85a887a256d6939da88aabd8cd } connect_timeout 3 #链接超时时间 nb_get_retry 3 #重试次数 delay_before_retry 3 #重试链接时间间隔 } } }
6、keepalived配置文件的详解
(1)RS1里面的keepalived.conf上的配置
Keepalived.conf的脚本 ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass keepalivedpass } virtual_ipaddress { 172.16.9.1 } } virtual_server 172.16.9.1 80 { delay_loop 6 lb_algo rr lb_kind NAT nat_mask 255.255.0.0 persistence_timeout 50 protocol TCP real_server 192.168.0.54 80 { weight 1 SSL_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } virtual_server 172.16.9.1 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.0.0 # persistence_timeout 50 protocol TCP real_server 192.168.0.54 80 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.0.55 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 connect_port 80 } } }
而后把RS1上的keepalived.com复制到RS2上,并把其中的stata改为BACKUP,priority修改成100,其余内容不变
RS2里面的keepalived.conf脚本
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass keepalivedpass } virtual_ipaddress { 172.16.9.1 } } virtual_server 172.16.9.1 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.0.0 # persistence_timeout 50 protocol TCP real_server 192.168.0.54 80 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.0.55 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 connect_port 80 } } }
启动keepalived服务;
访问虚拟IP地址
主备转换测试
# cd /etc/keepalived/
# touch down
在备用节点node2上查看
访问虚拟IP
如今把down文件删除,MASTER节点会夺回资源,由于在node1上的优先级(101)比nod2上的优先级(100)高
双主模式实现
两个主机web服务同时开启,配置的VIP不一样,让他们互为主从
修改keepalived.conf配置文件(只需修改配置文件末尾“vrrp_instance VI_2”中的内容)
vrrp_instance VI_2 { interface eth0 state BACKUP # BACKUP for slave routers priority 100 # 100 for BACKUP virtual_router_id 52 garp_master_delay 1 authentication { auth_type PASS auth_pass password } track_interface { eth0 } virtual_ipaddress { 172.16.51.80/16 dev eth0 label eth0:1 } track_script { chk_httpd chk_schedown } notify_master "/etc/keepalived/notify.sh master eth0:1" notify_backup "/etc/keepalived/notify.sh backup eth0:1" notify_fault "/etc/keepalived/notify.sh fault eth0:1" }
在node2上启用“vrrp_instance VI_2”中的内容后,修改一下第二VIP地址与脚本名称(track_httpd, chk_schedown)
修改完成后,启动keepalived服务,查看node1与node2上的VIP地址配置
node1主机
node2主机
测试
模拟node1出现故障
# cd /etc/keepalived/
# touch down
查看node2上虚拟IP地址
此时,访问172.16..9.1与192.16.53都是由node2主机返回结果