安装:
tar -zxvf keepalived-1.2.2.tar.gz
yum list all |grep "ipvsadm"
yum -y install kernel-devel openssl-develpopt-devel ipvsadm libnl libnl-devel
service iptables stop
setenforce 0
./configure --prefix=/--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64 && make&& make install
添加系统服务:
chkconfig --add keepalived 添加后可以使用service、chkconfig工具管理keepalived服务
chkconfig keepalived on on级别为2、3、4
chkconfig --list keepalived 查看2、3、4级别是否开启
全局配置文件:
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 192.168.1.1
smtp_connect_timeout 30
router_id LVS_master
}
vrrp_script check_httpd {
#vrrp_script模块专门用于对集群中服务资源进行监控(HA集群监控)。于此模块一起使用的还有track_script模块,track_script模块主要是调用vrrp_script模块。还可以检查端口、shell语句检查、脚本检查。在附录下面演示
script “killall �CO httpd”
#用killall �CO httpd 查看httpd服务返回状态,如果是零则表示运行正常,为1则表示运行异常。
interval 2
#检查的时间间隔,单位为秒。
}
Vrrp配置(keepalived高可用配置)实例:
vrrp_instance VI_1 {
#标识,vrrp实例开始的标识
state MASTER
#定义主备角色master和backup
interface eth0
#指定监听网卡
virtual_router_id51
#虚拟路由标识,此标识主备不许相同。
priority 100
#优先级。数字越大优先级越高,在同一个vrrp-instance下master必须比backup优先级大
advert_int 1
#设置master与backup之间同步检查的时间间隔,单位是秒
authentication {
auth_type PASS
auth_pass 1111
#设定master和backup验证类型(AH、PASS)和密码,主备密码一致才能通信。
}
notify_master “/etc/keep/master.sh”
notify_backup “/etc/keep/backup.sh”
notify_fault “/etc/keep/fault.sh”
#指定当keepalived进入master、backup、fault状态时执行到脚本。脚本举例在附录下。
track_script {
check_httpd
}
#调用vrrp_script模块,check_httpd为vrrp_script模块后面跟的名字。
virtual_ipaddress {
192.168.1.250
#虚拟地址,可以设置多个。它是以ip address add的方式加入地址。
}
#nopreempt
#不抢占功能,此功能只能用在state状态是backup的节点上,而且这个节点优先级要高于其他节点
#preempt_delay 300
#抢占延迟时间,单位是秒。例如:网络有抖动master节点向backup节点发送探测包不及时实际master节点没有问题,无需主备切换。重启服务或重启系统也是如此。
}
――――――――――――――――vrrp配置附录―――――――――――――――――
-----------------------------------vrrp配置附录--------------------------------------------
notify_master “/etc/keep/master.sh” 脚本实例如下:
#!/bin/bash
logfile=/var/log/keep/keep-http-statsu.log
echo “[MASTER]” >>$logfile
date >> $logfile
backup.sh和fault.sh 略过。
端口检查:
vrrp_script check_httpd {
script “</dev/tcp/127.0.0.1/80”
#这个方式是定义了对本机的80端口的状态检查。
interval 2
#检查的时间间隔,单位为秒。
fall 2
#表示检查到失败的最大次数
rise 1
#表示检查到一次成功,则认为节点恢复正常。
}
shell语句检查:
vrrp_script check_httpd {
script “if [ -f /var/run/httpd/httpd.pid ];hten exit 0; else exit 1; fi”
# 检查pid文件是否存在,如果返回0表示正常,返回1则表示异常。
interval 2
#检查的时间间隔,单位为秒。
fall 2
#表示检查到失败的最大次数
rise 1
#表示检查到一次成功,则认为节点恢复正常。
}
vrrp_script需要track_script模块调用我在演示时省略,但是不要忘记在vrrp_instance配置实例中调用。
------------------------------------------------------------------------------------------
LVS(负载均衡)配置实例:
virtual_server 192.168.1.250 {
#LVS配置实例已virtual_server表示开始
delay_loop 6
#设置健康检查的间隔,单位是秒。
lb_algo rr
#负载调度算法,有rr(轮巡)、wrr(加权轮询)、lc、wlc、lblc、sh、dh等
lb_kind NAT
#负载均衡机制,有NAT、TUN、DR。
nat_mask255.255.255.0
#不知道是什么意思,后续在查。
persistence_timeout50
#同一IP的连接50秒内被分配到同一台realserver
persistence_granularity255.255.255.0
#此选项是配合persistence_timeout,如果后面写的是4个255就代表单个ip,如果是255.255.255.0则代表客户端所在的整个网段的请求都会分配到同一台real_server上。
protocol TCP
#指定转发协议类型有tcp和udp。
sorry_server192.168.1.120 80
#相当一个备用节点,当所有real_server节点失效则启用备用节点
real_server192.168.1.108 80 {
# real_server段的开始标识,后面跟着的是后端节点真实ip地址。Ip和端口用空格分开。
weight 1
#权重。数值越大权重越高。为性能高的节点分配高权重。合理使用节点
notify_up/root/keepalived/keepup.sh
notify_down/root/keepalived/keepdown.sh
#表示在检测到real_server节点是up或是down时执行的脚本。
HTTP_GET |SSL_GET {
#Http和SSL检测方式实例
url {
#可以指定多个URL
path /index.html
#后面跟详细的路径
digestff20ad2481f97b1754ef3e12ecd3a9cc
#SSl检查后的摘要信息,这个摘要信息可以通过ganhash命令工具获取。例如:ganhash -s192.168.1.108 �Cp 80 �Cu /。
status_code 200
#返回的结果是200状态码。
}
connect_port80
#健康检查的端口,如果不指定,默认是real_server指定的端口
bindto192.168.1.108
#通过此地址发送请求检查服务器健康状态。
connect_timeout 3
#无响应时间,单位是秒。
nb_get_retry 3
#重试次数
delay_before_retry 3
#重试次数的间隔。
}
}
}
――――――――――――――――LVS配置附录―――――――――――――――――
-------------------------------------lvs配置附录------------------------------------------
除了HTTP_GET 、SSL_GET这两个real_server健康状态检查外还有TCP_CHECK、MISC_CHECK、SMTP_CHECK这三个。
接下来演示TCP_CHECK(端口检查)、MISC_CHECK(外部程序检查也就是脚本检查)
TCP_CHECK{
connect_port80
#健康检查的端口,如果不指定,默认是real_server指定的端口
connect_timeout 3
#无响应时间,单位是秒。
nb_get_retry 3
#重试次数
delay_before_retry 3
#重试次数的间隔。
}
MISC_CHECK{
misc_path “/usr/local/bin/script.sh 1.1.1.180 http://www.baidu.com”
#指定脚本的执行路径,后面可以带参数。跟普通方式执行脚本相同。
misc_timeout 5
#设定脚本的超时时间
! misc_dynamic
#表示不启用节点动态调整real_server权重。
#如果启用并且返回码是零则表示检查正常,权重不变。如果是1则表示节点异常权重降为零。如果返回值是2-255之间的数字则用返回值减2。如:返回值是10,权重则是8(10-2)
/usr/local/bin/script.sh 脚本如下:
cat/usr/local/bin/check_squidproxy.sh 1.1.1.1 80 http://www.baidu.com
#!/bin/bash
if [ $#-ne 3 ];then
echo"Warning: check_command error."
exit 1
else
PROXY_IP=$1
PROXY_PORT=$2
CHECK_URL=$3
CMD=`/usr/bin/curl-I -x ${PROXY_IP}:${PROXY_PORT} "${CHECK_URL}" 2>/dev/null | grep"200 OK" | wc -l`
if [ ${CMD} -ne 1];then
echo"CRITCAL: check proxy ${PROXY_IP} failed."
exit 1
else
echo"OK: check proxy ${PROXY_IP} OK."
echo0
fi
fi