阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

LVS+Heartbeat 高可用集群方案操作步骤详解

472次阅读
没有评论

共计 35586 个字符,预计需要花费 89 分钟才能阅读完成。

已经分别介绍了 LVS 基础知识和 Heartbeat 基础知识, 今天这里简单说下 LVS+Heartbeat 实现高可用 web 集群方案的操作说明.

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

Heartbeat 的高可用集群采用的通信方式是 udp 协议和串口通信,而且 heartbeat 插件技术实现了集群间的串口、多播、广播和组播通信。它实现了 HA 功能中的核心功能——心跳,将 Heartbeat 软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP 自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。Heartbeat 采用虚拟 IP 地址映射技术实现主从服务器的切换对客户端透明的功能。但是单一的 heartbeat 是无法提供健壮的服务的,所以这里结合使用 lvs 进行负载均衡。

LVS 是 Linux Virtual Server 的简写, 意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。说到 lvs 就得提到 ipvs (ipvsadm 命令),ipvs 是 lvs 集群系统的核心软件, 它的主要作用是安装在 Load Balancer 上, 把发往 Virtual IP 的请求转发到 Real Server 上。

ldirectord 是配合 lvs 作为一种健康检测机制,要不负载均衡器在节点挂掉后依然没有检测的功能。

案例架构草图如下:

LVS+Heartbeat 高可用集群方案操作步骤详解

1) 基本环境准备 (CentOS6.9 系统)

172.16.60.206(eth0)    HA 主节点 (ha-master)      heartbeat, ipvsadm, ldirectord
172.16.60.207(eth0)    HA 备节点(ha-slave)        heartbeat, ipvsadm, ldirectord
172.16.60.111          VIP 地址
172.16.60.204(eth0)    后端节点 1(rs-204)        nginx, realserver
172.16.60.205(eth0)    后端节点 2(rs-205)        nginx, realserver
 
1) 关闭防火墙和 selinux (四台节点机都操作)
[root@ha-master ~]# /etc/init.d/iptables stop
[root@ha-master ~]# setenforce 0
[root@ha-master ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
 
2) 设置主机名和绑定 hosts (两台 HA 节点机器都操作)
主节点操作
[root@ha-master ~]# hostname ha-master
[root@ha-master ~]# vim /etc/sysconfig/network
HOSTNAME=ha-master
[root@ha-master ~]# vim /etc/hosts
172.16.60.206 ha-master
172.16.60.207 ha-slave
 
备节点操作
[root@ha-slave ~]# hostname ha-slave
[root@ha-slave ~]# vim /etc/sysconfig/network
HOSTNAME=ha-slave
[root@ha-slave ~]# vim /etc/hosts
172.16.60.206 ha-master
172.16.60.207 ha-slave
 
3) 设置 ip 路由转发功能 (四台节点机器都设置)
[root@ha-master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@ha-master ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@ha-master ~]# sysctl -p

2) 安装配置 Heartbeat  (两台 HA 节点机都操作)

1) 首先安装 heartbeat (HA 主备两个节点都要同样操作)
分别下载 epel-release-latest-6.noarch.rpm 和 ldirectord-3.9.5-3.1.x86_64.rpm
下载地址: https://pan.baidu.com/s/1IvCDEFLCBYddalV89YvonQ
提取密码: gz53
 
[root@ha-master ~]# ll epel-release-latest-6.noarch.rpm
-rw-rw-r– 1 root root 14540 Nov  5  2012 epel-release-latest-6.noarch.rpm
[root@ha-master ~]# ll ldirectord-3.9.5-3.1.x86_64.rpm
-rw-rw-r– 1 root root 90140 Dec 24 15:54 ldirectord-3.9.5-3.1.x86_64.rpm
 
[root@ha-master ~]# yum install -y epel-release
[root@ha-master ~]# rpm -ivh epel-release-latest-6.noarch.rpm –force
[root@ha-master ~]# yum install -y heartbeat* libnet
[root@ha-master ~]# yum install -y ldirectord-3.9.5-3.1.x86_64.rpm      #因为依赖比较多,所以直接采用 yum 方式安装
 
2) 配置 heartbeat (HA 主备两个节点都要操作)
安装完 heartbeat 后系统会生成一个 /etc/ha.d/ 目录,此目录用于存放 heartbeat 的有关配置文件。
Heartbeat 自带配置文件的注释信息较多,在此手工编写有关配置文件,heartbeat 常用配置文件有四个,分别是:
ha.cf:heartbeat 主配置文件
ldirectord.cf:资源管理文件
haresources:本地资源文件
authkeys:认证文件
 
[root@ha-master ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@ha-master heartbeat-3.0.4]# cp authkeys ha.cf haresources /etc/ha.d/
 
[root@ha-master heartbeat-3.0.4]# cd /usr/share/doc/ldirectord-3.9.5
[root@ha-master ldirectord-3.9.5]# cp ldirectord.cf /etc/ha.d/
[root@ha-master ldirectord-3.9.5]# cd /etc/ha.d/
[root@ha-master ha.d]# ll
total 56
-rw-r–r– 1 root root  645 Dec 24 21:37 authkeys
-rw-r–r– 1 root root 10502 Dec 24 21:37 ha.cf
-rwxr-xr-x 1 root root  745 Dec  3  2013 harc
-rw-r–r– 1 root root  5905 Dec 24 21:37 haresources
-rw-r–r– 1 root root  8301 Dec 24 21:38 ldirectord.cf
drwxr-xr-x 2 root root  4096 Dec 24 21:28 rc.d
-rw-r–r– 1 root root  692 Dec  3  2013 README.config
drwxr-xr-x 2 root root  4096 Dec 24 21:28 resource.d
-rw-r–r– 1 root root  2082 Mar 24  2017 shellfuncs
 
3) 配置 heartbeat 的主配置文件 ha.cf(HA 主备节点配置一样)
[root@ha-master ha.d]# pwd
/etc/ha.d
[root@ha-master ha.d]# cp ha.cf ha.cf.bak
[root@ha-master ha.d]# > ha.cf
[root@ha-master ha.d]# vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log        #日志存放位置
#crm yes                            #是否开启集群资源管理功能
logfacility        local0        #记录日志等级
keepalive 2                        #心跳的时间间隔,默认时间单位为秒
deadtime 5                        #超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 3                        #超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中,但此时不会切换
initdead 10          #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。
udpport  694        #设置广播通信使用的端口,694 为默认使用的端口号。
bcast        eth0              # Linux 指定心跳使用以太网广播方式,并在 eth0 上进行广播。”#” 后的要完全删除,要不然要出错。
ucast eth0 172.16.60.207      #采用网卡 eth0 的 UDP 多播来组织心跳,后面跟的 IP 地址应该为双机中对方的 IP 地址!!!!!
auto_failback on            #在该选项设为 on 的情况下,一旦主节点恢复运行,则自动获取资源并取代备用节点。off 主节点恢复后变为备用节点,备用为主节点!!!!!
#stonith_host *    baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3  rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
#watchdog /dev/watchdog       
node  ha-master          #主机节点名,可通过 ”uname -n” 查看,默认为主节点!!!!!
node  ha-slave              #备用机节点名,默认为次节点,要注意顺序!!!!
#ping 172.16.60.207        # 选择 ping 节点,选择固定路由作为节点。ping 节点仅用来测试网络连接。一般选择这行 ping 测试就行, 下面一行注释掉.
ping_group group1 172.16.60.204 172.16.60.205    #这个地址并不是双机中的两个节点地址,而是仅仅用来测试网络的连通性. 当这两个 IP 都不能 ping 通时,对方即开始接管资源。
respawn root /usr/lib64/heartbeat/ipfail                    #选配项。其中 rootr 表示启动 ipfail 进程的身份。要确保 /usr/lib64/heartbeat/ipfail 这个路径正确(可以用 find 命令搜索出来), 否则 heartbeat 启动失败
apiauth ipfail gid=root uid=root
 
============================ 温馨提示 ================================
HA 备节点的 ha.cf 文件只需要将上面配置中的 ucast 一行内容改为 ”ucast eth0 172.16.60.206″ 即可, 其他配置内容和上面 HA 主节点的 ha.cf 完全一样!
 
4) 配置 heartbeat 的认证文件 authkeys(HA 主备节点配置必须一致)
[root@ha-master ~]# cd /etc/ha.d/
[root@ha-master ha.d]# cp authkeys authkeys.bak
[root@ha-master ha.d]# >authkeys
auth 3                                                      #auth 后面指定的数字,下一行必须作为关键字再次出现! 一共有 ”1″, “2”,”3″ 三行, 这里选择 ”3″ 关键字, 选择 ”1″ 和 ”2″ 关键字也行, HA 主备节点必须一致!
#1 crc
#2 sha1 HI!
3 md5 Hello!
 
必须将该文件授权为 600
[root@ha-master ha.d]# chmod 600 authkeys
[root@ha-master ha.d]# ll authkeys
-rw——- 1 root root 20 Dec 25 00:16 authkeys
 
5) 修改 heartbeat 的资源文件 haresources (HA 主备节点配置必须完全一致)
[root@ha-slave ha.d]# cp haresources haresources.bak
[root@ha-slave ha.d]# >haresources
[root@ha-slave ha.d]# vim haresources          # 在文件结尾添加下面一行内容. 由于该文件默认全是注释, 可以先清空该文件, 然后添加下面这一行内容
ha-master IPaddr::172.16.60.111 ipvsadm ldirectord     
 
配置说明:
上面设置 ha-maser 为主节点, 集群 VIP 为 172.16.60.111, ipvsadm ldirectord 为所指定需要监视的应用服务.
这样启动 heartbeat 服务的时候, 会自动启动 ipvsadm 和 ldirectord 服务.
ipvsadm 服务的配置文件为 /etc/sysconfig/ipvsadm, 后面会配置这个.
ldirectord 服务的配置文件为 /etc/ha.d/ldirectord.cf, 后面会配置这个
 
6) 配置 heartbeat 的监控文件 ldirectord.cf (HA 主备节点配置必须完全一致)
ldirectord,用于监控在 lvs 集群的真实服务。ldirectord 是和 heartbeat 相结合的一个服务,可以作为 heartbeat 的一个启动服务。
Ldirectord 的作用是监测 Real Server,当 Real Server 失效时,把它从 Load Balancer 列表中删除,恢复时重新添加。
将 ldrectord 的配置文件复制到 /etc/ha.d 下,因为默认没有放到这个路径下, 并且在 ldirectord.cf 文件中要配置 ”quiescent=no”。
 
[root@ha-master ha.d]# cp ldirectord.cf ldirectord.cf.bak
[root@ha-master ha.d]# vim ldirectord.cf
checktimeout=3      #判定 realserver 出错时间
checkinterval=1      #指定 ldirectord 在两次检查之间的间隔时间, 即主从切换的时间间隔
autoreload=yes      #是否自动重载配置文件
logfile=”/var/log/ldirectord.log”    #指定 ldirectord 的日志文件路径
#logfile=”local0″
#emailalert=”root@30920.cn”
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no        #如果一个 realserver 节点在 checktimeout 设置的时间周期内没响应,将会被踢除,中断现有客户端的连接。设置为 yes, 则出问题的 realserver 节点不会被踢出, 只是新的连接不能到达。
 
virtual=172.16.60.111:80    #指定虚拟 IP,注意在 virtual 这行后面的行必须缩进一个 tab 字符进行标记!! 否则极有可能因为格式配置不正确而导致 ldirectord 启动失败
        real=172.16.60.204:80 gate  #gate 为 lvs 的 DR 模式,ipip 表示 TUNL 模式,masq 表示 NAT 模式
        real=172.16.60.205:80 gate  #当所有 RS 机器不能访问的时候 WEB 重写向地址; 即表示 realserver 全部失败,vip 指向本机 80 端口
        fallback=127.0.0.1:80 gate    #指定服务类型,这里对 HTTP 进行负载均衡
        service=http        #指定服务类型,这里对 HTTP 进行负载均衡
        scheduler=wlc      #指定调度算法,这里的算法一定要和 lvs 脚本(/etc/sysconfig/ipvsadm) 的算法一样
        persistent=600    #持久链接:表示 600s 之内同一个客户端 ip 将访问同一台 realserver. 除非这个 realserver 出现故障, 才会将请求转发到另一个 realserver
        #netmask=255.255.255.255
        protocol=tcp          # 指定协议
        checktype=negotiate  #指定检查类型为协商 (或者执行检查类型为 negotiate, 表示通过交互来判断服务是否正常)
        checkport=80        # 监控的端口
        request=”lvs_testpage.html”  #请求监控地址, 这个文件一定要放到后端 realserver 监控端口的根目录下, 即放到两台 realserver 的 nginx 根目录下 
        receive=”Test HA Page”      #指定请求和应答字符串,也就是上面 lvs_testpage.html 的内容
        #virtualhost=www.x.y.z      #虚拟服务器的名称可任意指定
 
============================ 温馨提示 ======================================
配置如上,通过 virtual 来定义 vip,接下来是定义 real service 的节点,fallback 是当所有 real 挂掉后,访问请求到本机的 80 端口上去,一般这个页面显示服务器正在维护等界面。
service 表示;调度的服务,scheduler 是调度算法,protocol 是定义协议,checktype 是检查类型为协商,checkport 就是检查的端口,也就是健康检查。
 
上面在 /etc/ha.d/ldirectord.cf 文件里定义了一个 80 端口的代理转发, 如果还有其他端口, 比如 3306,
 则只需要在下面再添加一个 ”virtual=172.16.60.111:3306 ….” 类似上面的配置即可! 配置案例在备份的 ldirectord.cf.bak 文件里有.
 
ldirectord.cf 文件的配置, 最好按照这个文件里的配置范例去修改, 不要全部清空后自行添加, 否则容易因为配置格式问题导致 ldirectord 服务启动失败!
 
使用 status 查看 ldirectord 服务, 只要不出现报错信息, 就说明 ldirectord.cf 文件配置没有问题了!
[root@ha-master ha.d]# /etc/init.d/ldirectord status

3) 安装配置 LVS  (两台 HA 节点机操作一致)

1) 安装 lvs 依赖
[root@ha-master ~]# yum install -y libnl* popt*
 
查看是否加载 lvs 模块
[root@ha-master ~]# modprobe -l |grep ipvs
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko
 
2) 下载并安装 LVS
[root@ha-master ~]# cd /usr/local/src/
[root@ha-master src]# unlink /usr/src/linux
[root@ha-master src]# ln -s /usr/src/kernels/2.6.32-431.5.1.el6.x86_64/ /usr/src/linux
[root@ha-master src]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
[root@ha-master src]# tar -zvxf ipvsadm-1.26.tar.gz
[root@ha-master src]# cd ipvsadm-1.26
[root@ha-master ipvsadm-1.26]# make && make install
 
LVS 安装完成,查看当前 LVS 集群
[root@ha-master ipvsadm-1.26]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
 
3) 添加 lvs 的管理脚本(ipvsadm)
ipvsadm 服务的配置文件是 /etc/sysconfig/ipvsadm
[root@ha-master ha.d]# vim /etc/sysconfig/ipvsadm
#!/bin/bash
# description: start LVS of DirectorServer
#Written by :NetSeek http://www.linuxtone.org
GW=172.16.60.1                                  #这个是 VIP 所在网段的网段地址
 
# website director vip.
WEB_VIP=172.16.60.111 
WEB_RIP1=172.16.60.204
WEB_RIP2=172.16.60.205
 
 
. /etc/rc.d/init.d/functions
 
logger $0 called with $1
 
case “$1” in
 
start)
        # Clear all iptables rules.
        /sbin/iptables -F
        # Reset iptables counters.
        /sbin/iptables -Z
        # Clear all ipvsadm rules/services.
        /sbin/ipvsadm -C
 
 #set lvs vip for dr
        /sbin/ipvsadm –set 30 5 60
        /sbin/ifconfig eth0:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up
        /sbin/route add -host $WEB_VIP dev eth0:0
                /sbin/ipvsadm -A -t $WEB_VIP:80 -s wlc -p 600
                /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g
                /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -g
 
        touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
         
        # set Arp
                /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW >/dev/null 2>&1 
      ;;
stop)
        /sbin/ipvsadm -C
        /sbin/ipvsadm -Z
        ifconfig eth0:0 down
        route del $WEB_VIP  >/dev/null 2>&1
        rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
                /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW
        echo “ipvsadm stoped”
      ;;
 
status)
 
        if [! -e /var/lock/subsys/ipvsadm];then
                echo “ipvsadm is stoped”
                exit 1
        else
                ipvsadm -ln
                echo “……….ipvsadm is OK.”
        fi
      ;;
 
*)
        echo “Usage: $0 {start|stop|status}”
        exit 1
esac
 
exit 0
 
 
=============== 温馨提示 =================
上面配置中的 ”-p 600″ 的意思是会话保持时间为 600 秒,这个应该和 ldirectord.cf 文件配置一致 (还有 lvs 策略也要一致, 如这里的 lwc)
 
授权脚本执行权限
[root@ha-master ha.d]# chmod 755 /etc/sysconfig/ipvsadm

4) realserver 节点配置

1) 在 realserver 节点上编写 LVS 启动脚本 (两个 realserver 节点操作完全一致)
[root@rs-204 ~]# vim /etc/init.d/realserver
#!/bin/sh
VIP=172.16.60.111   
. /etc/rc.d/init.d/functions
     
case “$1” in
# 禁用本地的 ARP 请求、绑定本地回环地址
start)
    /sbin/ifconfig lo down
    /sbin/ifconfig lo up
    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
    /sbin/sysctl -p >/dev/null 2>&1
    /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up 
    /sbin/route add -host $VIP dev lo:0
    echo “LVS-DR real server starts successfully.\n”
    ;;
stop)
    /sbin/ifconfig lo:0 down
    /sbin/route del $VIP >/dev/null 2>&1
    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
echo “LVS-DR real server stopped.\n”
    ;;
status)
    isLoOn=`/sbin/ifconfig lo:0 | grep “$VIP”`
    isRoOn=`/bin/netstat -rn | grep “$VIP”`
    if [“$isLoON” == “” -a “$isRoOn” == “”]; then
        echo “LVS-DR real server has run yet.”
    else
        echo “LVS-DR real server is running.”
    fi
    exit 3
    ;;
*)
    echo “Usage: $0 {start|stop|status}”
    exit 1
esac
exit 0
 
 
启动两台 realserver 节点的 realserver 脚本
[root@rs-204 ~]# chmod 755 /etc/init.d/realserver
[root@rs-204 ~]# ll /etc/init.d/realserver
-rwxr-xr-x 1 root root 1278 Dec 24 13:40 /etc/init.d/realserver
 
[root@rs-204 ~]# /etc/init.d/realserver start
LVS-DR real server starts successfully.\n
 
设置开机启动
[root@rs-204 ~]# echo “/etc/init.d/realserver” >> /etc/rc.local
 
查看, 发现两台 realserver 节点上的 lo:0 上已经配置了 vip 地址
[root@rs-204 ~]# ifconfig
………..
lo:0      Link encap:Local Loopback
          inet addr:172.16.60.111  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
 
 
2) 接着部署两台 realserver 的 web 测试环境  (两个 realserver 节点安装操作一致)
采用 yum 方式安装 nginx (先安装 nginx 的 yum 源)
[root@rs-204 ~]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
[root@rs-204 ~]# yum install nginx
 
realserver01 的 nginx 配置
[root@rs-204 ~]# cd /etc/nginx/conf.d/
[root@rs-204 conf.d]# cat default.conf
[root@rs-204 conf.d]# >/usr/share/nginx/html/index.html
[root@rs-204 conf.d]# vim /usr/share/nginx/html/index.html
this is test page of realserver01:172.16.60.204
 
[root@rs-204 conf.d]# vim /usr/share/nginx/html/lvs_testpage.html
Test HA Page
 
[root@rs-204 conf.d]# /etc/init.d/nginx start
Starting nginx:                                            [OK]
[root@rs-204 conf.d]# lsof -i:80
COMMAND  PID  USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
nginx  31944  root    6u  IPv4  91208      0t0  TCP *:http (LISTEN)
nginx  31945 nginx    6u  IPv4  91208      0t0  TCP *:http (LISTEN)
 
realserver02 的 nginx 配置
[root@rs-205 src]# cd /etc/nginx/conf.d/
[root@rs-205 conf.d]# cat default.conf
[root@rs-205 conf.d]# >/usr/share/nginx/html/index.html
[root@rs-205 conf.d]# vim /usr/share/nginx/html/index.html
this is test page of realserver02:172.16.60.205
 
[root@rs-205 conf.d]# vim /usr/share/nginx/html/lvs_testpage.html
Test HA Page
 
[root@rs-205 conf.d]# /etc/init.d/nginx start
Starting nginx:                                            [OK]
[root@rs-205 conf.d]# lsof -i:80
COMMAND  PID  USER  FD  TYPE    DEVICE SIZE/OFF NODE NAME
nginx  20839  root    6u  IPv4 289527645      0t0  TCP *:http (LISTEN)
nginx  20840 nginx    6u  IPv4 289527645      0t0  TCP *:http (LISTEN)
 
最后分别访问 realserver01 和 realserver02 节点的 nginx,:
访问 http://172.16.60.204/, 访问结果为 ”this is test page of realserver01:172.16.60.204″
访问 http://172.16.60.204/lvs_testpage.html, 访问结果为 ”Test HA Page”
 
访问 http://172.16.60.205/, 访问结果为 ”this is test page of realserver02:172.16.60.205″
访问 http://172.16.60.205/lvs_testpage.html, 访问结果为 ”Test HA Page”

5) 配置两台 HA 节点上转发到自身 80 端口的页面内容 (两台 HA 节点操作一致)

由于在 ldirectord.cf 文件中配置了 ”fallback=127.0.0.1:80 gate”, 即当后端 realserver 都发生故障时, 客户端的访问请求将转发到 LVS 的 HA 节点自身的 80 端口上
 
[root@ha-master ~]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
[root@ha-master ~]# yum install nginx
 
realserver01 的 nginx 配置
[root@ha-master ~]# cd /etc/nginx/conf.d/
[root@ha-master conf.d]# cat default.conf
[root@ha-master conf.d]# >/usr/share/nginx/html/index.html
[root@ha-master conf.d]# vim /usr/share/nginx/html/index.html
Sorry, the access is in maintenance for the time being. Please wait a moment.
 
[root@ha-master conf.d]# /etc/init.d/nginx start
Starting nginx:                                            [OK]
[root@ha-master conf.d]# lsof -i:80
COMMAND  PID  USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
nginx  31944  root    6u  IPv4  91208      0t0  TCP *:http (LISTEN)
nginx  31945 nginx    6u  IPv4  91208      0t0  TCP *:http (LISTEN)
 
访问 http://172.16.60.206/  或者 http://172.16.60.207
访问结果为 ”Sorry, the access is in maintenance for the time being. Please wait a moment.”

6) 启动 heartbeat 服务 (两个 HA 节点都要操作)

启动 heartbeat 服务的时候, 就会自带启动 ipvsadm 和 ldirectord, 因为在 /etc/ha.d/haresources 文件里配置了!
需要知道的是: 只有当前提供 lvs 转发服务 (即拥有 VIP 资源) 的一方 才能在启动 heartbeat 的时候, 自带启动 ipvsadm 和 ldirectord!
 
1) 先启动 HA 主节点的 heartbeat
[root@ha-master ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.
 
[root@ha-master ~]# ps -ef|grep heartbeat
root    20886    1  0 15:41 ?        00:00:00 heartbeat: master control process
root    20891 20886  0 15:41 ?        00:00:00 heartbeat: FIFO reader       
root    20892 20886  0 15:41 ?        00:00:00 heartbeat: write: bcast eth0 
root    20893 20886  0 15:41 ?        00:00:00 heartbeat: read: bcast eth0 
root    20894 20886  0 15:41 ?        00:00:00 heartbeat: write: ucast eth0 
root    20895 20886  0 15:41 ?        00:00:00 heartbeat: read: ucast eth0 
root    20896 20886  0 15:41 ?        00:00:00 heartbeat: write: ping_group group1
root    20897 20886  0 15:41 ?        00:00:00 heartbeat: read: ping_group group1
root    20917 20886  0 15:41 ?        00:00:00 /usr/lib64/heartbeat/ipfail
root    20938 17616  0 15:41 pts/0    00:00:00 grep heartbeat
 
heartbeat 服务端口默认是 694.
[root@ha-master ~]# lsof -i:694
COMMAND    PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
heartbeat 20892 root    7u  IPv4  42238      0t0  UDP *:ha-cluster
heartbeat 20893 root    7u  IPv4  42238      0t0  UDP *:ha-cluster
heartbeat 20894 root    7u  IPv4  42244      0t0  UDP *:ha-cluster
heartbeat 20895 root    7u  IPv4  42244      0t0  UDP *:ha-cluster
 
发现 ldirectord 服务被自带启动了, 说明 master 节点是当前提供 lvs 转发服务的一方
[root@ha-master ~]# ps -ef|grep ldirectord
root    21336    1  0 15:41 ?        00:00:00 /usr/bin/perl -w /usr/sbin/ldirectord start
root    21365 17616  0 15:42 pts/0    00:00:00 grep ldirectord
 
[root@ha-master ~]# /etc/init.d/ldirectord status
ldirectord for /etc/ha.d/ldirectord.cf is running with pid: 21336
 
查看 master 节点, 发现 master 节点当前占有 vip 资源  (首次启动 heartbeat 服务后, 需要稍微等待一段时间, vip 资源才会出来. 后续再重启或切换时, vip 资源就会迅速出现了)
[root@ha-master ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:ac:50:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.60.206/24 brd 172.16.60.255 scope global eth0
    inet 172.16.60.111/24 brd 172.16.60.255 scope global secondary eth0
    inet6 fe80::250:56ff:feac:509b/64 scope link
      valid_lft forever preferred_lft forever
 
master 节点当前提供了 lvs 转发功能, 可以查看到转发效果
[root@ha-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  172.16.60.111:80 wlc persistent 600
  -> 172.16.60.204:80            Route  1      0          0       
  -> 172.16.60.205:80            Route  1      0          0 
 
查看 master 节点的 heartbeat 日志
[root@ha-master ~]# tail -f /var/log/ha-log
ip-request-resp(default)[21041]:        2018/12/25_15:41:48 received ip-request-resp IPaddr::172.16.60.111 OK yes
ResourceManager(default)[21064]:        2018/12/25_15:41:48 info: Acquiring resource group: ha-master IPaddr::172.16.60.111 ipvsadm ldirectord
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[21092]: 2018/12/25_15:41:48 INFO:  Resource is stopped
ResourceManager(default)[21064]:        2018/12/25_15:41:48 info: Running /etc/ha.d/resource.d/IPaddr 172.16.60.111 start
IPaddr(IPaddr_172.16.60.111)[21188]:    2018/12/25_15:41:48 INFO: Adding inet address 172.16.60.111/24 with broadcast address 172.16.60.255 to device eth0
IPaddr(IPaddr_172.16.60.111)[21188]:    2018/12/25_15:41:48 INFO: Bringing device eth0 up
IPaddr(IPaddr_172.16.60.111)[21188]:    2018/12/25_15:41:48 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-172.16.60.111 eth0 172.16.60.111 auto not_used not_used
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[21174]: 2018/12/25_15:41:48 INFO:  Success
ResourceManager(default)[21064]:        2018/12/25_15:41:48 info: Running /etc/init.d/ipvsadm  start
ResourceManager(default)[21064]:        2018/12/25_15:41:48 info: Running /etc/init.d/ldirectord  start
 
2) 接着启动 HA 备份节点的 heartbeat
[root@ha-slave ha.d]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.
 
[root@ha-slave ha.d]# ps -ef|grep heartbeat
root    21703    1  0 15:41 ?        00:00:00 heartbeat: master control process
root    21708 21703  0 15:41 ?        00:00:00 heartbeat: FIFO reader       
root    21709 21703  0 15:41 ?        00:00:00 heartbeat: write: bcast eth0 
root    21710 21703  0 15:41 ?        00:00:00 heartbeat: read: bcast eth0 
root    21711 21703  0 15:41 ?        00:00:00 heartbeat: write: ucast eth0 
root    21712 21703  0 15:41 ?        00:00:00 heartbeat: read: ucast eth0 
root    21713 21703  0 15:41 ?        00:00:00 heartbeat: write: ping_group group1
root    21714 21703  0 15:41 ?        00:00:00 heartbeat: read: ping_group group1
root    21734 21703  0 15:41 ?        00:00:00 /usr/lib64/heartbeat/ipfail
root    21769 19163  0 15:42 pts/0    00:00:00 grep heartbeat
 
[root@ha-slave ha.d]# lsof -i:694
COMMAND    PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
heartbeat 21709 root    7u  IPv4 105186      0t0  UDP *:ha-cluster
heartbeat 21710 root    7u  IPv4 105186      0t0  UDP *:ha-cluster
heartbeat 21711 root    7u  IPv4 105192      0t0  UDP *:ha-cluster
heartbeat 21712 root    7u  IPv4 105192      0t0  UDP *:ha-cluster
 
发现 ldirectord 服务没有被 heartbeat 自带启动 (因为当前备份节点没有提供 lvs 转发功能, 即没有接管 vip 资源)
[root@ha-slave ha.d]# /etc/init.d/ldirectord status
ldirectord is stopped for /etc/ha.d/ldirectord.cf
 
[root@ha-slave ha.d]# ps -ef|grep ldirectord     
root    21822 19163  0 15:55 pts/0    00:00:00 grep ldirectord
 
发现 ipvsadm 服务也没有被 heartbeat 自带启动  (因为当前备份节点没有提供 lvs 转发功能, 即没有接管 vip 资源)
[root@ha-slave ha.d]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:ac:05:b5 brd ff:ff:ff:ff:ff:ff
    inet 172.16.60.207/24 brd 172.16.60.255 scope global eth0
    inet6 fe80::250:56ff:feac:5b5/64 scope link
      valid_lft forever preferred_lft forever
[root@ha-slave ha.d]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
 
查看 HA 备份节点的 heartbeat 日志
[root@ha-slave ha.d]# tail -f /var/log/ha-log 
Dec 25 15:41:37 ha-slave heartbeat: [21734]: info: Starting “/usr/lib64/heartbeat/ipfail” as uid 0  gid 0 (pid 21734)
Dec 25 15:41:38 ha-slave heartbeat: [21703]: info: Status update for node ha-master: status active
harc(default)[21737]:  2018/12/25_15:41:38 info: Running /etc/ha.d//rc.d/status status
Dec 25 15:41:42 ha-slave ipfail: [21734]: info: Status update: Node ha-master now has status active
Dec 25 15:41:44 ha-slave ipfail: [21734]: info: Asking other side for ping node count.
Dec 25 15:41:47 ha-slave ipfail: [21734]: info: No giveup timer to abort.
Dec 25 15:41:48 ha-slave heartbeat: [21703]: info: remote resource transition completed.
Dec 25 15:41:48 ha-slave heartbeat: [21703]: info: remote resource transition completed.
Dec 25 15:41:48 ha-slave heartbeat: [21703]: info: Initial resource acquisition complete (T_RESOURCES(us))
Dec 25 15:41:48 ha-slave heartbeat: [21754]: info: No local resources [/usr/share/heartbeat/Resourc
 
访问使用 vip 地址访问, 即:
访问 http://172.16.60.111/, 结果为 ”this is test page of realserver01:172.16.60.204″ 或者 “this is test page of realserver02:172.16.60.205”
访问 http://172.16.60.111/lvs_testpage.html, 结果为 ”Test HA Page”
 
温馨提示:
下面是两个常用的 ipvsadm 关于查看 lvs 状态的命令
======================================
查看 lvs 的连接状态命令
[root@ha-master ~]# ipvsadm  -l  –stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port              Conns  InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.60.111:http                0        0        0        0        0
  -> 172.16.60.204:http                0        0        0        0        0
  -> 172.16.60.205:http                0        0        0        0        0
 
说明:
Conns    (connections scheduled)  已经转发过的连接数
InPkts  (incoming packets)      入包个数
OutPkts  (outgoing packets)      出包个数
InBytes  (incoming bytes)        入流量(字节)
OutBytes (outgoing bytes)        出流量(字节)
 
======================================
查看 lvs 的速率
[root@ha-master ~]# ipvsadm  -l  –rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                CPS    InPPS  OutPPS    InBPS  OutBPS
  -> RemoteAddress:Port
TCP  172.16.60.111:http                0        0        0        0        0
  -> 172.16.60.204:http                0        0        0        0        0
  -> 172.16.60.205:http                0        0        0        0        0
 
说明:
CPS      (current connection rate)  每秒连接数
InPPS    (current in packet rate)    每秒的入包个数
OutPPS  (current out packet rate)  每秒的出包个数
InBPS    (current in byte rate)      每秒入流量(字节)
OutBPS  (current out byte rate)    每秒入流量(字节)
 
======================================
上面的两台 HA 节点均只有一个网卡设备 eth0,  如果有两块网卡, 比如还有一个 eth1, 则可以将这个 eth1 作为 heartbeat 交叉线直连的设备,
即 HA 主备两台机器之间使用一根串口直连线缆 eth1 进行连接.
比如:
HA 主节点  172.16.60.206(eth0), 10.0.11.21(eth1, heartbeat 交叉线直连)
HA 备节点  172.16.60.207(eth0), 10.0.11.22(eth1, heartbeat 交叉线直连)
 
这样比起只有一个 eth0, 只需要在 ha.cf 文件中多加下面一行 (其他的操作配置都不用变!)
ping_group group1 10.0.11.21 10.0.11.22      // 多加这一行
ping_group group1 172.16.60.204 172.16.60.205

7) 故障转移切换测试

1) 先关闭 HA 主节点的 heartbeat
[root@ha-master ~]# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.
 
[root@ha-master ~]# ps -ef|grep heartbeat
root    21625 17616  0 16:03 pts/0    00:00:00 grep heartbeat
 
发现关闭 heartbeat 服务后, 主节点的 ipvsadm 和 ldirectord 都会被自带关闭, VIP 资源也被转移走了, 即当前 master 节点不提供 lvs 转发服务
[root@ha-master ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:ac:50:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.60.206/24 brd 172.16.60.255 scope global eth0
    inet6 fe80::250:56ff:feac:509b/64 scope link
      valid_lft forever preferred_lft forever
 
[root@ha-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
 
[root@ha-master ~]# ps -ef|grep ldirectord
root    21630 17616  0 16:03 pts/0    00:00:00 grep ldirectord
 
查看此时 HA 主节点的 heartbeat 日志
[root@ha-master ~]# tail -1000 /var/log/ha-log
……..
Dec 25 16:02:38 ha-master heartbeat: [20886]: info: Heartbeat shutdown in progress. (20886)
Dec 25 16:02:38 ha-master heartbeat: [21454]: info: Giving up all HA resources.
ResourceManager(default)[21467]:        2018/12/25_16:02:38 info: Releasing resource group: ha-master IPaddr::172.16.60.111 ipvsadm ldirectord
ResourceManager(default)[21467]:        2018/12/25_16:02:38 info: Running /etc/init.d/ldirectord  stop
ResourceManager(default)[21467]:        2018/12/25_16:02:38 info: Running /etc/init.d/ipvsadm  stop
ResourceManager(default)[21467]:        2018/12/25_16:02:38 info: Running /etc/ha.d/resource.d/IPaddr 172.16.60.111 stop
IPaddr(IPaddr_172.16.60.111)[21563]:    2018/12/25_16:02:38 INFO: IP status = ok, IP_CIP=
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[21549]: 2018/12/25_16:02:38 INFO:  Success
 
接着查看 HA 备份节点的情况, 发现 VIP 已将已经切换到备份节点这边了, 说明当前备份节点提供 lvs 转发服务, 则备份节点的 ipvsadm 和 ldirectord 也被自带启动了
[root@ha-slave ha.d]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:ac:05:b5 brd ff:ff:ff:ff:ff:ff
    inet 172.16.60.207/24 brd 172.16.60.255 scope global eth0
    inet 172.16.60.111/24 brd 172.16.60.255 scope global secondary eth0
    inet6 fe80::250:56ff:feac:5b5/64 scope link
      valid_lft forever preferred_lft forever
 
[root@ha-slave ha.d]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  172.16.60.111:80 wlc persistent 600
  -> 172.16.60.204:80            Route  1      0          0       
  -> 172.16.60.205:80            Route  1      0          0 
 
[root@ha-slave ha.d]# ps -ef|grep ldirectord
root    22203    1  0 16:02 ?        00:00:01 /usr/bin/perl -w /usr/sbin/ldirectord start
root    22261 19163  0 16:07 pts/0    00:00:00 grep ldirectord
 
查看此时 HA 备份节点的 heartbeat 日志
[root@ha-slave ha.d]# tail -1000 /var/log/ha-log
………..
harc(default)[21887]:  2018/12/25_16:02:39 info: Running /etc/ha.d//rc.d/status status
mach_down(default)[21904]:      2018/12/25_16:02:39 info: Taking over resource group IPaddr::172.16.60.111
ResourceManager(default)[21931]:        2018/12/25_16:02:39 info: Acquiring resource group: ha-master IPaddr::172.16.60.111 ipvsadm ldirectord
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[21959]: 2018/12/25_16:02:39 INFO:  Resource is stopped
ResourceManager(default)[21931]:        2018/12/25_16:02:39 info: Running /etc/ha.d/resource.d/IPaddr 172.16.60.111 start
IPaddr(IPaddr_172.16.60.111)[22055]:    2018/12/25_16:02:39 INFO: Adding inet address 172.16.60.111/24 with broadcast address 172.16.60.255 to device eth0
IPaddr(IPaddr_172.16.60.111)[22055]:    2018/12/25_16:02:39 INFO: Bringing device eth0 up
IPaddr(IPaddr_172.16.60.111)[22055]:    2018/12/25_16:02:39 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-172.16.60.111 eth0 172.16.60.111 auto not_used not_used
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[22041]: 2018/12/25_16:02:39 INFO:  Success
ResourceManager(default)[21931]:        2018/12/25_16:02:39 info: Running /etc/init.d/ipvsadm  start
ResourceManager(default)[21931]:        2018/12/25_16:02:39 info: Running /etc/init.d/ldirectord  start
mach_down(default)[21904]:      2018/12/25_16:02:39 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired
mach_down(default)[21904]:      2018/12/25_16:02:39 info: mach_down takeover complete for node ha-master.
 
2) 然后在重新启动 HA 主节点的 heartbeat 服务
由于在 ha.cf 文件中配置了 ”auto_failback on “ 参数, 所以当主节点恢复后, 会将 VIP 资源自动抢占回来并替换备份节点重新接管 lvs 转发服务.
主节点的 heartbeat 恢复后, ipvsadm 和 ldirectord 也会被重新启动
 
[root@ha-master ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.
 
[root@ha-master ~]# ps -ef|grep heartbeat
root    21778    1  0 16:12 ?        00:00:00 heartbeat: master control process
root    21783 21778  0 16:12 ?        00:00:00 heartbeat: FIFO reader       
root    21784 21778  0 16:12 ?        00:00:00 heartbeat: write: bcast eth0 
root    21785 21778  0 16:12 ?        00:00:00 heartbeat: read: bcast eth0 
root    21786 21778  0 16:12 ?        00:00:00 heartbeat: write: ucast eth0 
root    21787 21778  0 16:12 ?        00:00:00 heartbeat: read: ucast eth0 
root    21788 21778  0 16:12 ?        00:00:00 heartbeat: write: ping_group group1
root    21789 21778  0 16:12 ?        00:00:00 heartbeat: read: ping_group group1
root    21809 21778  0 16:12 ?        00:00:00 /usr/lib64/heartbeat/ipfail
root    21812 21778  0 16:12 ?        00:00:00 heartbeat: master control process
root    21825 21812  0 16:12 ?        00:00:00 /bin/sh /usr/share/heartbeat/ResourceManager takegroup IPaddr::172.16.60.111 ipvsadm ldirectord
root    21949 21935  0 16:12 ?        00:00:00 /bin/sh /usr/lib/ocf/resource.d//heartbeat/IPaddr start
root    21956 17616  0 16:12 pts/0    00:00:00 grep heartbeat
 
[root@ha-master ~]# lsof -i:694
COMMAND    PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
heartbeat 21784 root    7u  IPv4  46306      0t0  UDP *:ha-cluster
heartbeat 21785 root    7u  IPv4  46306      0t0  UDP *:ha-cluster
heartbeat 21786 root    7u  IPv4  46312      0t0  UDP *:ha-cluster
heartbeat 21787 root    7u  IPv4  46312      0t0  UDP *:ha-cluster
 
[root@ha-master ~]# ps -ef|grep ldirectord   
root    22099    1  1 16:12 ?        00:00:00 /usr/bin/perl -w /usr/sbin/ldirectord start
root    22130 17616  0 16:12 pts/0    00:00:00 grep ldirectord
 
[root@ha-master ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:ac:50:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.60.206/24 brd 172.16.60.255 scope global eth0
    inet 172.16.60.111/24 brd 172.16.60.255 scope global secondary eth0
    inet6 fe80::250:56ff:feac:509b/64 scope link
      valid_lft forever preferred_lft forever
 
[root@ha-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  172.16.60.111:80 wlc persistent 600
  -> 172.16.60.204:80            Route  1      0          0       
  -> 172.16.60.205:80            Route  1      1          0
 
查看此时 HA 主节点的 heartbeat 日志
[root@ha-master ~]# tail -1000 /var/log/ha-log
……..
ResourceManager(default)[21825]:        2018/12/25_16:12:12 info: Acquiring resource group: ha-master IPaddr::172.16.60.111 ipvsadm ldirectord
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[21853]: 2018/12/25_16:12:13 INFO:  Resource is stopped
ResourceManager(default)[21825]:        2018/12/25_16:12:13 info: Running /etc/ha.d/resource.d/IPaddr 172.16.60.111 start
IPaddr(IPaddr_172.16.60.111)[21949]:    2018/12/25_16:12:13 INFO: Adding inet address 172.16.60.111/24 with broadcast address 172.16.60.255 to device eth0
IPaddr(IPaddr_172.16.60.111)[21949]:    2018/12/25_16:12:13 INFO: Bringing device eth0 up
IPaddr(IPaddr_172.16.60.111)[21949]:    2018/12/25_16:12:13 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-172.16.60.111 eth0 172.16.60.111 auto not_used not_used
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[21935]: 2018/12/25_16:12:13 INFO:  Success
ResourceManager(default)[21825]:        2018/12/25_16:12:13 info: Running /etc/init.d/ipvsadm  start
ResourceManager(default)[21825]:        2018/12/25_16:12:13 info: Running /etc/init.d/ldirectord  start
 
再观察此时 HA 备份节点的情况, 发现 VIP 资源在主节点的 heartbeat 恢复后就被主节点抢占回去了, 即此时备份节点没有 vip 资源, 也就不提供 lvs 转发服务了,
则备份节点的 ipvsadm 和 ldirectord 服务也会被关闭
[root@ha-slave ha.d]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:ac:05:b5 brd ff:ff:ff:ff:ff:ff
    inet 172.16.60.207/24 brd 172.16.60.255 scope global eth0
    inet6 fe80::250:56ff:feac:5b5/64 scope link
      valid_lft forever preferred_lft forever
 
[root@ha-slave ha.d]# ps -ef|grep ldirectord   
root    22516 19163  0 16:14 pts/0    00:00:00 grep ldirectord
 
[root@ha-slave ha.d]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
 
查看此时 HA 备份节点的 heartbeat 日志
[root@ha-slave ha.d]# tail -1000 /var/log/ha-log
…….
ResourceManager(default)[22342]:        2018/12/25_16:12:12 info: Releasing resource group: ha-master IPaddr::172.16.60.111 ipvsadm ldirectord
ResourceManager(default)[22342]:        2018/12/25_16:12:12 info: Running /etc/init.d/ldirectord  stop
ResourceManager(default)[22342]:        2018/12/25_16:12:12 info: Running /etc/init.d/ipvsadm  stop
ResourceManager(default)[22342]:        2018/12/25_16:12:12 info: Running /etc/ha.d/resource.d/IPaddr 172.16.60.111 stop
IPaddr(IPaddr_172.16.60.111)[22438]:    2018/12/25_16:12:12 INFO: IP status = ok, IP_CIP=
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.60.111)[22424]: 2018/12/25_16:12:12 INFO:  Success
Dec 25 16:12:12 ha-slave heartbeat: [22329]: info: foreign HA resource release completed (standby).
 
在上面 HA 主备节点故障切换的过程中, 客户端访问 http://172.16.60.111/ 都是不受影响的, 即对客户端访问来说是无感知的故障切换, 实现了 lvs 代理层的高可用!
 
3) 先后关闭两台 realserver 节点中的 nginx, 然后观察 lvs 的转发情况
[root@ha-master ~]# ipvsadm -Ln               
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  172.16.60.111:80 wlc persistent 600
  -> 172.16.60.204:80            Route  1      0          0       
  -> 172.16.60.205:80            Route  1      0          2 
 
先关闭 rs-204 的 nginx 服务
[root@rs-204 ~]# /etc/init.d/nginx stop
Stopping nginx:                                            [OK]
[root@rs-204 ~]# lsof -i:80
[root@rs-204 ~]#
 
rs-205 的 nginx 保留
[root@rs-205 ~]# ps -ef|grep nginx
root      5211    1  0 15:45 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx    5212  5211  0 15:45 ?        00:00:00 nginx: worker process                 
root      5313  4852  0 16:19 pts/0    00:00:00 grep nginx
 
查看 lvs 转发情况
[root@ha-master ~]# ipvsadm -Ln               
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  172.16.60.111:80 wlc persistent 600
  -> 172.16.60.205:80            Route  1      0          2       
 
这时候访问 http://172.16.60.111, 结果是 ”this is test page of realserver02:172.16.60.205″
 
接着启动 rs-204 的 nginx, 关闭 rs-205 的 nginx
[root@rs-204 ~]# /etc/init.d/nginx start
Starting nginx:                                            [OK]
[root@rs-204 ~]# lsof -i:80           
COMMAND  PID  USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
nginx  4883  root    6u  IPv4 143621      0t0  TCP *:http (LISTEN)
nginx  4884 nginx    6u  IPv4 143621      0t0  TCP *:http (LISTEN)
 
关闭 rs-205 的 nginx
[root@rs-205 ~]# /etc/init.d/nginx stop
Stopping nginx:                                            [OK]
[root@rs-205 ~]# lsof -i:80
[root@rs-205 ~]#
 
查看 lvs 转发情况
[root@ha-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  172.16.60.111:80 wlc persistent 600
  -> 172.16.60.204:80            Route  1      0          0 
 
这时候访问 http://172.16.60.111, 结果是 ”this is test page of realserver01:172.16.60.204″
 
然后把 rs-204 和 rs-205 两个节点的 nginx 都关闭
[root@rs-204 ~]# /etc/init.d/nginx stop
Stopping nginx:                                            [OK]
[root@rs-205 ~]# /etc/init.d/nginx stop
Stopping nginx:                                            [OK]
 
查看 lvs 转发情况
[root@ha-master ~]# ipvsadm -Ln               
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  172.16.60.111:80 wlc persistent 600
  -> 127.0.0.1:80                Local  1      0          0 
 
这时候访问 http://172.16.60.111, 结果是 ”Sorry, the access is in maintenance for the time being. Please wait a moment.”
 
上面可知, 在 realserver 节点发生故障后, 会从 lvs 集群中踢出来, 待 realserver 节点恢复后会再次重新加入到 lvs 集群中
这是因为在 ldirectord.cf 文件中配置了 ”quiescent=no “ 参数 , 这样就实现了代理节点的高可用! 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计35586字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7985978
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...