一、keepalived概述; 二、设计原理; 三、案例:Keepalived实现双机热备; 一、keepalived概述: 概述:keepalived起初为Lvs设计的一款强大的辅助工具,保证Lvs负载调度器的故障切换以及web节点的健康状态检查,后续被应用到很多需要容错的场景下,keepalived自身基于VRRP协议--虚拟路由冗余协议,思科公有协议; 二、设计原理: 应用场景: 设计模块: 热备实现过程:将多个主机以软件的方式组成一个热备组,通过共有的虚拟ip(VIP)地址对外提供服务,同一时刻,热备组中只有一台主机在工作,别的主机冗余状态,当当前在线的主机失效时,其他冗余的主机会自动接替虚拟ip地址,继续提供服务,以保证架构的稳定性; 三、案例:Keepalived实现双机热备; 案例拓扑: 案例环境:
案例步骤: Ø安装node1节点上的httpd的服务; Ø安装node2节点上的httpd的服务; Ø在两台node节点上安装keepalived软件程序(两台安装步骤一致,在此只列出一台); Ø配置node1上master主节点; Ø配置node2上backup从节点; Ø客户端访问测试双机热备的效果; Ø安装node1节点上的httpd的服务; [root@node1 ~]# yum -y install httpd [root@node1 ~]#cat < 192.168.100.101 END [root@node1 ~]# systemctl start httpd [root@node1 ~]# systemctl enable httpd [root@node1 ~]# netstat -utpln |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13891/httpd Ø安装node2节点上的httpd的服务; [root@node2 ~]# yum -y install httpd [root@node2 ~]#cat < 192.168.100.101 END [root@node2 ~]# systemctl start httpd [root@node2 ~]# systemctl enable httpd [root@node2 ~]# netstat -utpln |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13891/httpd Ø在两台node节点上安装keepalived软件程序(两台安装步骤一致,在此只列出一台); [root@node1 ~]# yum -y install kernel-devel openssl-devel popt-devel ##安装内核开发包,popt支持库等工具; [root@node1 ~]# tar -zxvf keepalived-1.2.13.tar.gz -C /usr/src/ [root@node1 ~]# cd /usr/src/keepalived-1.2.13/ [root@node1 keepalived-1.2.13]# ./configure --prefix=/usr/local/keepalived [root@node1 keepalived-1.2.13]# make &&make install [root@node1 keepalived-1.2.13]# cd [root@node1 ~]# mkdir -p /etc/keepalived ##程序的主配置目录 [root@node1 ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ ##复制主配置文件 [root@node1 ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ ##复制启动时需要加载的配置文件 [root@node1 ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ ##复制服务的控制脚本 [root@node1 ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ ##复制keepalived的命令 [root@node1 ~]# chmod 755 /etc/init.d/keepalived ##为控制脚本指定权限 Ø配置node1上master主节点; [root@node1 ~]# vi /etc/keepalived/keepalived.conf global_defs { router_id HA_TEST_R1 ##本服务器的名称,若环境中有多个keepalived时,此名称不能一致 } vrrp_instance VI_1 { ##定义VRRP热备实例,每一个keep组都不同 state MASTER ##MASTER表示主服务器 interface eth0 ##承载VIP地址的物理接口 virtual_router_id 1 ##虚拟路由器的ID号,每一个keep组都不同 priority 100 ##优先级,数值越大优先级越高 advert_int 1 ##通告检查间隔秒数(心跳频率) authentication { ##认证信息 auth_type PASS ##认证类型 auth_pass 123456 ##密码字串 } virtual_ipaddress { 192.168.100.95 ##指定漂移地址(VIP) } } virtual_server 192.168.100.95 80 { #vip配置 delay_loop 2 #每隔2秒检查一次real_server状态 lb_algo wrr ##指定lvs的调度算法 lb_kind DR ##lvs集群模式 persistence_timeout 60 ##会话保持时间 protocol TCP ##选择协议 real_server 192.168.100.101 80 { ##本机地址 weight :3 ##服务器的权重 notify_down /etc/keepalived/check.sh ##指定节点失效后,采用的脚本,notify_up表示节点正常后,采用的脚本 ##健康检查方式一共有HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK这些 TCP_CHECK { connect_timeout 10 ##连接超时时间 nb_get_retry 3 ##重连次数 delay_before_retry 3 ##重连间隔时间 connect_port 80 ##健康检查端口 } } } :wq [root@node1 ~]# vi /etc/keepalived/check.sh #!/bin/bash /etc/init.d/keepalived stop echo -e "$(ip a |grep eth0 |grep inet |awk '{print $2}'|awk -F'/' '{print $1}') (httpd) is down on $(date +%F-%T)" >>/root/check_httpd.log :wq [root@node1 ~]# chmod 777 /etc/keepalived/check.sh [root@node1 ~]# /etc/init.d/keepalived start Starting keepalived (via systemctl): [ 确定 ] [root@node1 ~]# ip a |grep 192.168.100.95 inet 192.168.100.95/32 scope global eth0 Ø配置node2上backup从节点; [root@node2 ~]# vi /etc/keepalived/keepalived.conf global_defs { router_id HA_TEST_R2 ##本服务器的名称 } vrrp_instance VI_1 { state BACKUP ##BACKUP表示从服务器 interface eth0 virtual_router_id 1 priority 99 ##优先级,低于主服务器 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.100.95 } } virtual_server 192.168.100.95 80 { ##vip配置 delay_loop 2 ##每隔2秒检查一次real_server状态 lb_algo wrr lb_kind DR persistence_timeout 60 ##会话保持时间 protocol TCP real_server 192.168.100.102 80 { ##本机地址 weight :3 notify_down /etc/keepalived/check.sh TCP_CHECK { connect_timeout 10 ##连接超时时间 nb_get_retry 3 ##重连次数 delay_before_retry 3 ##重连间隔时间 connect_port 80 ##健康检查端口 } } } [root@node2 ~]# vi /etc/keepalived/check.sh #!/bin/bash service keepalived stop echo -e "$(ip a |grep eth0 |grep inet |awk '{print $2}'|awk -F'/' '{print $1}') (httpd) is down on $(date +%F-%T)" >>/root/check_httpd.log :wq [root@node2 ~]# chmod 777 /etc/keepalived/check.sh [root@node2 ~]# /etc/init.d/keepalived start Starting keepalived (via systemctl): [ 确定 ] [root@node2~]# ip a |grep 192.168.100.95 Ø客户端访问测试双机热备的效果; 当node1与node2均正常状态: 当node1的httpd服务关闭: 将node1节点的http和keepalived服务重新启动: |
|