您的位置:首页 > 运维架构 > 网站架构

keepalived的介绍和安装部署

2015-05-29 10:10 671 查看

keepalived的介绍

作用

keepalived主要针对LVS群聚应用而设计的,提供故障切换和健康检查功能。在非LVS群集环境中,也可用来实现多机热备功能。故障切换:ha fallover功能,实现LB Master和Backup主机之间故障转移和自动切换
这是针对有两个负载均衡器Director同时工作而采取的故障转移措施。当主负载均衡器(MASTER)失效或出现故障时候,备份负载均衡器(BACKUP)将自动接管主负载均衡器的所有工作;一旦主负载均衡器故障修复,主负载均衡器又会接管回它原来处理的工作,而备份负载均衡器会释放master失效时它接管的工作,这时候两者恢复到之前的角色。健康检查:rs healthcheck功能。负载均衡定期检查RS的可用性决定是否给其分发请求。
当虚拟服务器中的某一个甚至是几个真实服务器同时发生故障无法提供服务时,负载均衡器会自动的将失效的服务器从转发队列中清除出去,从而保证用户的访问不受影响;当故障的服务器被修复以后,系统又会自动把它加入到转发队列,分发请求提供正常服务。

故障切换原理:

是通过VRRP(虚拟路由器冗余协议)来实现的。在keepalived Director正常工作时,主Director节点会不断的向备节点广播心跳消息,用来告诉备节点自己还活着,当主节点发生故障时,备节点就无法继续检测到主节点的心跳,进而调用自身接管程序,接管主节点的IP资源及服务。而当主节点恢复时,备节点会释放主节点故障时自身接管的IP资源及服务,恢复到原来的自身的备用角色。

安装部署

安装步骤

1.安装所必须的软件包
yum install kernel-developenssl-devel popt-devel -y
2.下载keepalived源码报,编译安装
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz tar zxfkeepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/--with-kernel-dir=/usr/src/kernels/2.6.*
make && make install
编译参数:--with-kernel-dir=DIR 指定内核文件所在目录,通常是在/usr/src/kernels/2.2*--disable-lvs-syncd do not use LVS synchronization daemon--disable-lvs do not use the LVS framework--disable-vrrp do not use the VRRP framework若只想做keepalived其他服务(http,db,nginx,haproxy)高可用而不做LVS的高可用时候,可以使用上面三个参数进行禁用keepalivedhi安装完之后,若安装路径不是指定的根路径,则为了操作方便,需要把生成的文件拷贝到系统常用的目录中


提示:当执行./configure之后出现下面这种情况时,表示成功Keepalived configuration------------------------Keepalived version : 1.2.2Compiler : gccCompiler flags : -g -O2Extra Lib : -lpopt -lssl -lcrypto Use IPVS Framework : No #LVS功能IPVS sync daemon support :No #LVS功能Use VRRP Framework : Yes #VRRP功能Use Debug flags : No由于本实验只是测试keepalived双机热备,没装LVS(ipvsadm),所以会提示NO若要都为yes时需要先安装ipvsadm下载安装ipvsadmwget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gzln -sfkernels/2.6.32-358.el6.x86_64/ /usr/src/linuxtar zxf ipvsadm-1.24.tar.gzcd ipvsadm-1.24make && make install

配置文件详解

! Configuration File forkeepalivedglobal_defs { notification_email { #指定邮件的目的地址 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_fromAlexandre.Cassen@firewall.loc smtp_server 192.168.200.1 #指定smtp服务器地址 smtp_connect_timeout 30 router_id LVS_MASTER #指定本机ID }全局定义部分:主要设置keepalived的通知机制和表示 第7--14行是email通知参数。作用:当LVS发生切换或RS等有故障时,就会发邮件报警。 第15行lvs负载均衡的表示(router_id),在一个局域网内,它必须是唯一的 vrrp_instance VI_1 {    定义VRRP热备实例 state MASTER interface eth0 virtual_router_id 51   #虚拟路由标识 priority 100    #设置优先级。用于确定那个是主,备advert_int 1     #通告间隔描述即心跳 nopreempt #非抢占(因为默认如果master挂的时候,backup会顶上,当master再好的时候,会再切回去,这样就会造成两次断开,加上nopreempt的时候,及时master又好了,依旧不会切换,但是要注意两个state 都要是backup)  authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress {              #设置虚拟IP类似LVS中的VIP 172.16.254.111 192.168.254.111 }VRRP定义模块                                第17行为VRRP实例vrrp_instance。每个VRRP实例可以认为是一个keepalived实例,在配置中可以存在多个实例                       第18行实例状态,只有MASER和BACKUP两种状态,并且需要大写。      interface 通信接口,设备对外提供服务的网卡。注意:lvs_sync_daemon_interface是用来设置负载均衡器之间监控的接口。                     virtual_router_id这个标识是一个数字,同一个VRRP实例中必须唯一。每个热备组中需要保持一致。                              配置多实例的时候只需要把第17-32行复制一份,修改VRRP实例名字等virtual_server 192.168.200.100 80 { #VIP 端口 delay_loop 3 #健康检查时间间隔 lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh lb_kind NAT #负载均衡转发规则NAT|DR|RUN nat_mask 255.255.255.0 #nat 掩码 persistence_timeout 50 #会话保持时间 protocol TCP #使用的协议sorry_server<IPADDR> <port> #备用机,所有realserver失效后启用 real_server 192.168.201.100 443 { #RIP 端口 weight 1 #默认为1,0为失效inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除notify_up 脚本(绝对路径) #在检测到server up后执行脚本notify_down 脚本(绝对路径) #在检测到server down后执行脚本 SSL_GET { #健康检查的名字 url { path / digest ff20ad2481f97b1754ef3e12ecd3a9cc #检查url,可以指定多个 status_code 200 #检查的返回状态码 } url { path /mrtg/ digest 9b3a0c85a887a256d6939da88aabd8cd } connect_timeout 3 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 80 #健康检查的端口的端口 } }}

启动并测试

1.keepalived启动keepalived会自动生成启动文件,只需要附加执行权限即可
chmod a+x/etc/init.d/keepalived
service keepalived start
chkconfig keepalived on
2.查看生成的虚拟IP,并测试主:[root@master ~]# ip add showdev eth02: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000 link/ether 00:0c:29:f3:4e:52 brdff:ff:ff:ff:ff:ff inet 192.168.1.110/24 brd 192.168.1.255scope global eth0 inet 192.168.1.250/32 scope global eth0 inet6 fe80::20c:29ff:fef3:4e52/64 scopelink valid_lft forever preferred_lft forever备:[root@backup ~]# ip add show dev eth02: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000 link/ether 00:0c:29:15:20:bb brdff:ff:ff:ff:ff:ff inet 192.168.1.109/24 brd 192.168.1.255scope global eth0 inet 192.168.1.250/32 scope global eth0 inet6 fe80::20c:29ff:fe15:20bb/64 scopelink valid_lft forever preferred_lft forever比较可以看出,现在虚拟ip在主(MASTER)上生成。现在模拟主的eth0宕机,继续查看主:[root@ master ~]# ifdown eth0[root@ master ~]# ip add showdev eth02: eth0:<BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000link/ether 00:0c:29:f3:4e:52brd ff:ff:ff:ff:ff:ff备:[root@ backup ~]# ip add show dev eth02: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000 link/ether 00:0c:29:15:20:bb brdff:ff:ff:ff:ff:ff inet 192.168.1.109/24 brd 192.168.1.255scope global eth0 inet 192.168.1.250/32 scope global eth0 inet6 fe80::20c:29ff:fe15:20bb/64 scopelink valid_lft forever preferred_lft forever而同时去ping虚拟ip,会发现中断一下之后会继续能ping通。(下面截图是在虚拟环境中,所以会有延迟,真实环境会是瞬间就完成切换)

恢复主master主:[root@ master ~]# ifup eth0正在决定 eth0 的 IP 信息...完成。[root@ master ~]# ip add showdev eth02: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000 link/ether 00:0c:29:f3:4e:52 brdff:ff:ff:ff:ff:ff inet 192.168.1.250/32 scope global eth0 inet 192.168.1.110/24 brd 192.168.1.255scope global eth0 inet6 fe80::20c:29ff:fef3:4e52/64 scopelink valid_lft forever preferred_lft forever备:[root@ backup ~]# ip add showdev eth0 2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000 link/ether 00:0c:29:15:20:bb brdff:ff:ff:ff:ff:ff inet 192.168.1.109/24 brd 192.168.1.255scope global eth0 inet6 fe80::20c:29ff:fe15:20bb/64 scopelink valid_lft forever preferred_lft forever会发现,虚拟IP重新回到主上。ping包也是丢了一个后立刻就又通了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息