keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,对内解决单点故障,对外提供唯一入口。
keepalived工作原理
keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。
第3层:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。
第4层:Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
第7层:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
keepalived安装、启动
wget http://www.keepalived.org/software/keepalived-1.2.6.tar.gz
tar zxvf keepalived-1.2.6.tar.gz
cd keepalived-1.2.6
./configure
make
make install
添加Keepalived为系统服务
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
添加keepalived的配置项
vi /etc/keepalived/keepalived.conf
启动
service keepalived start
设置开启启动
chkconfig --add keepalived
chkconfig keepalived on
keepalived配置文件
keepalived.conf配置分为3部分,global_defs,vrrp_instance VI_1,virtual_server。
注:下面蓝色文字是可有可无,红色文字就是需要修改的部分,如果只是测试用,写入virtual_ipaddress,virtual_server,state,priority这四个就可以了。而当主修改好文件后,在从只用修改state,priority,priority不能高于在主设置的值。
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
- notification_email 故障发生时给谁发邮件通知。
- notification_email_from 通知邮件从哪个地址发出。
- smpt_server 通知邮件的smtp地址。
- smtp_connect_timeout 连接smtp服务器的超时时间。
- router_id 标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.100
}
}
- state 可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途。
- interface 节点固有IP(非VIP)的网卡,用来发VRRP包。
- virtual_router_id 取值在0-255之间,用来区分多个instance的VRRP组播。
- priority 用来选举master的,要成为master,这个选项的值要高于其他机器的值,该项取值范围是1-255(在此范围之外会被识别成默认值100)。
- advert_int 监测间隔(秒)
- nopreempt 防止抢占资源
- authentication 认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)。
- virtual_ipaddress vip 虚拟IP,可以多个
- authentication 认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)。
- virtual_ipaddress vip 虚拟IP,可以多个
virtual_server 192.168.200.1003306{
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.201.10 3306{
weight 1
notify_down /usr/local/MySQL/bin/MySQL.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- delay_loop 每隔N秒查询realserver状态。
- lb_algo 后端调试算法(load balancing algorithm)。
- lb_kind LVS调度类型NAT/DR/TUN。
- nat_mask 网关。
- persistence_timeout 会话保持时间。
- real_server 真正提供服务的服务器IP。
- weight 权重。
- notify_down 检测到服务down后执行的脚本
- connect_port 连接端口。
- connect_timeout 超时时长。
- nb_get_retry 重试次数
- delay_before_retry 下次重试的时间延迟。
注:notify_down的作用是在mysql停止后,关闭本机的keepalived进程,避免冲突。
#vi /usr/local/MySQL/bin/MySQL.sh
#!/bin/sh
pkill keepalived
#chmod +x /usr/local/MySQL/bin/MySQL.sh
|