Linux中级之keepalived配置
hacmp:
ibm的高可用集群软件,并且是商业的(收费),一般用于非x86架构机器当中
AIX,Unix
去IOE:ibm,oracle,emc
keepalived:
一款高可用集群软件,利用vrrp协议实现vip地址的漂移;
keepalived+lvs
keepalived+nginx
keepalived+haproxy
配置文件主要分为三类分别是:
(1)全局配置
(2)VRRP配置
(3)LVS配置
keepalived对RS做健康检查的方式
1 1. HTTP_GET:向后端的RS发送http请求,如果请求成功,说明后端节点正常(RS是web服务的时候比较常用) 2 2. TCP:尝试与后端RS建立TCP连接,如果成功,说明后端节点正常 3 【仅仅是检查RS系统是否正常工作,不能检查具体的业务】 4 3. SMTP:对邮件服务器做健康检测 5 4. MISC:通过脚本的方式实现健康检测 6 7 8 TCP健康检测方式举例 9 TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态 10 connect_timeout 10 # 连接超时时间 11 nb_get_retry 3 # 重连次数 12 delay_before_retry 3 # 重连时间间隔 13 connect_port 80 # 检测端口 14 } 15 16 17 HTTP_GET健康检测方式举例 18 HTTP_GET { 19 url { 20 path check/t.html # 检查的uri地址 21 digest 1362a91278f0 # 用keepalived自带的genhash生成 22 23 connect_timeout 3 # 链接超时时间 24 nb_get_retry 3 # 重连次数 25 delay_before_retry 3 # 重连时间间隔 26 connect_port 6500 # 检测端口 27 } 28 29 MISC健康检测方式举例 30 MISC_CHECK { 31 misc_path "/tmp/check.sh http://1.2.3.4:80/c/200.jsp" 32 # 调用外部程序或者脚本的路径和参数 33 34 misc_timeout 10 35 # 脚本执行的超时时间 36 37 misc_dynamic 38 # 动态权重标志。 39 # 脚本返回0 则检测成功,权重不变 40 # 返回1表示失败,权重设置为0 41 }
keepalived配置
1 vrrp部分 2 vim /etc/keepalived/keepalived.conf 3 ! Configuration File for keepalived 4 #全局配置 5 global_defs { 6 notification_email { 7 #收件人地址 8 } 9 #邮件服务器 10 } 11 #VRRP配置DS1 12 vrrp_instance VI_1 { 13 state MASTER #角色类型MASTER|BACKUP 14 interface ens33 #网卡名称 15 virtual_router_id 51 #虚拟路由id(需要与BACKUP一致) 16 priority 100 #优先级 17 advert_int 1 #没1秒检查一次 18 #nopreempt #非抢占模式,默认为抢占模式 19 authentication { 20 auth_type PASS #认证类型 主备之间必须一样 21 auth_pass 1111 #认证密码 主备之间必须一样 22 } 23 virtual_ipaddress { 24 192.168.11.100 #虚拟ip(vip) 25 } 26 }
1 #利用脚本实现httpd服务的高可用 2 vrrp_script chk_httpd { 3 script "/root/sh/check_httpd.sh" 4 interval 2 5 } 6 7 vrrp_instance VI_1 { 8 state MASTER 9 interface ens33 10 virtual_router_id 11 11 priority 100 12 advert_int 1 13 authentication { 14 auth_type PASS 15 auth_pass 1111 16 } 17 virtual_ipaddress { 18 192.168.11.100/24 19 } 20 track_script { 21 chk_httpd 22 } 23 notify_master "/root/notify.sh master" 24 notify_backup "/root/notify.sh backup" 25 notify_fault "/root/notify.sh fault" 26 } 27 28 vrrp_instance VI_2 { 29 state MASTER 30 interface ens33 31 virtual_router_id 22 32 priority 100 33 advert_int 1 34 authentication { 35 auth_type PASS 36 auth_pass 2222 37 } 38 virtual_ipaddress { 39 192.168.11.200/24 40 } 41 }
1 #check_httpd.sh内容: 2 #!/bin/bash 3 service httpd status 4 if [[ $? -eq 0 ]];then 5 echo 'httpd is up...' 6 else 7 pkill keepalived #或者service keepalived stop 8 fi
#shell发送邮件的内容 #!/bin/bash contact='2367880638@qq.com' notify() { mailsubject="$HOSTNAME to be $1, vip转移" mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1" echo "$mailbody" | mail -s "$mailsubject" $contact } case $1 in master) notify master ;; backup) notify backup ;; fault) notify fault ;; *) echo "Usage: $(basename $0) {master|backup|fault}" exit 1 ;; esac
1 #配置邮件服务器 2 yum install -y mailx 3 vim /etc/mail.rc 4 在后面增加: 5 set from=2367880638@qq.com 6 set smtp=smtp.qq.com 7 set smtp-auth-user=2367880638@qq.com 8 set smtp-auth-password=jrhncbzpcthoecdd 9 set smtp-auth=login 10 11 set from:设置发件人 12 set smtp:设置外部STMP服务器 13 set smtp-auth-user:设置STMP用户名(一般为完整邮箱地址) 14 set smtp-auth-password:设置SMTP密码
lvs部分: #LVS配置 virtual_server 192.168.11.100 80 { delay_loop 3 #健康检查时间间隔 lb_algo rr #负载均衡调度算法 lb_kind DR #负载均衡转发规则 protocol TCP #协议 real_server 192.168.11.11 80 { #要监控的real_server的ip和端口号 weight 1 #权重 TCP_CHECK { #基于tcp协议的检查 connect_timeout 3 #连接时间超时 retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 } } real_server 192.168.11.12 80 { #要监控的real_server的ip和端口号 weight 1 #权重 TCP_CHECK { #基于tcp协议的检查 connect_timeout 3 #连接时间超时 retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 } } }
#在回环地址的子网口上配置服务ip(vip)
ifconfig lo:0 192.168.11.100 broadcast 192.168.11.100 netmask 255.255.255.255 up
#添加路由
route add -host 192.168.11.100 dev 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