CentOS 7通过HeartBeat配置实现高可用HA

Posted think_mzs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7通过HeartBeat配置实现高可用HA相关的知识,希望对你有一定的参考价值。

Author:think

Date:2021-12-04

参考文章:CentOS7通过HeartBeat配置实现高可用HA-未来往事 (xxshell.com)

测试环境

  • 操作系统:CentOS 7 64位
  • 内核版本:3.10.0-1160.49.1.el7.x86_64

双节点高可用集群IP地址信息

  • 主节点(master):192.168.20.8
  • 从节点(slave):192.168.20.6
  • 虚拟IP(VIP):192.168.20.100

注意节点IP与虚拟IP在局域网内都不允许存在冲突

集群检测有两种检测方式,通过业务线检测和通过HA线检测。本次案例配置了业务线检测,如果需要配置HA检测线检测,可以修改ha.cf配置文件中的“ucast”。

基础环境配置

主从节点服务器都需要配置以下内容

  1. 设置主机名(配置完成之后需要重启主机)

    #配置master主机
    vim /etc/hostname
    将文件中的内容修改成如下内容:
    master
    #配置slave主机
    vim /etc/hostname
    将文件中的内容修改成如下内容:
    slave
    

    重启主从主机。

  2. 设置hosts主机名解析

    vim /etc/hosts
    在配置文件中增加以下内容:
    192.168.20.8 master
    192.168.20.6 slave
    
  3. 关闭Selinux;

    setenforce 0
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
    
  4. 关闭firewall防火墙;

    systemctl stop firewalld
    systemctl disable firewalld
    
  5. 配置集群操作系统SSH互信;

    #master主机上执行
    ssh-keygen -t rsa   #生成公钥一直回车即可
    ssh-copy-id -i  .ssh/id_rsa.pub root@slave   #当要输入密码时输入slave的密码即可
    
    #slave主机上执行
    ssh-keygen -t rsa   #生成公钥一直回车即可
    ssh-copy-id -i  .ssh/id_rsa.pub root@master    #当要输入密码时输入master的密码即可
    
  6. 核对两台服务器时间,最好使用NTP进行时间同步;

    date
    #如果时间已经一致则不需要同步,如果不同步则建议通过配置NTP来进行时间的同步
    

软件安装

在安装软件时如果感觉缓慢,则建议进行换源

  1. 安装编译环境;

    yum install -y gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc
    
  2. 创建用户和组;

    groupadd haclient
    useradd -g haclient hacluster
    
  3. 下载软件包;

    #官方渠道下载,可以版本换之后会失效
    wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
    wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
    wget  https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
    

    官方下载页面:Download - Linux-HA,当地址失效时,只需要进入下载页面之后找到相应的软件下载包地址,利用wget命令进行下载即可。

  4. 安装Reusable-Cluster-Components-glue;

    tar -jxvf 0a7add1d9996.tar.bz2   #压缩包名读者根据实际情况自行修改
    cd Reusable-Cluster-Components-glue--0a7add1d9996   #解压出来的目录名读者根据实际情况自行修改
    ./autogen.sh
    ./configure \\
    --prefix=/usr/local/heartbeat \\
    --with-daemon-user=hacluster \\
    --with-daemon-group=haclient \\
    --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
    make && make install
    echo $?
    cd ..
    

    注意以上命令中的反斜杠\\符号代表的是将一条命令进行换行操作。

  5. 安装resource-agents-3.9.6;

    tar -xzvf v3.9.6.tar.gz   #压缩包名读者根据实际情况自行修改
    cd resource-agents-3.9.6   #解压出来的目录名读者根据实际情况自行修改
    ./autogen.sh
    ./configure \\
    --prefix=/usr/local/heartbeat \\
    --with-daemon-user=hacluster \\
    --with-daemon-group=haclient \\
    --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
    make && make install
    echo $?
    cd ..
    
  6. 安装Heartbeat-3.0;

    tar -jxvf 958e11be8686.tar.bz2   #压缩包名读者根据实际情况自行修改
    cd Heartbeat-3-0-958e11be8686   #解压出来的目录名读者根据实际情况自行修改
    ./bootstrap
    export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
    ./configure \\
    --prefix=/usr/local/heartbeat \\
    --with-daemon-user=hacluster \\
    --with-daemon-group=haclient \\
    --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
    make && make install
    echo $?
    cd ..
    

配置Heartbeat

  1. 在主服务器master上复制HeartBeat包中doc下列文件到指定目录;

    #进入到heartbeat包中
    cd Heartbeat-3-0-958e11be8686
    cp doc/ha.cf,haresources,authkeys /usr/local/heartbeat/etc/ha.d/
    
  2. 在主服务器master上编辑ha.cf配置文件;

    #备份ha.cf文件
    cp /usr/local/heartbeat/etc/ha.d/ha.cf /usr/local/heartbeat/etc/ha.d/ha.cf.bak
    #编辑配置文件,注释掉配置文件中的其他内容,配置如下内容,ipfail文件路径可能不同,添加时候find一下。
    vim /usr/local/heartbeat/etc/ha.d/ha.cf
    debugfile /var/log/ha-debug
    logfile /var/log/ha-log
    logfacility local0
    keepalive 1
    deadtime 10
    warntime 5
    initdead 60
    udpport 694
    ucast ens33 192.168.20.6
    auto_failback on
    node master
    node slave
    ping 192.168.20.1
    respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
    

    配置文件各项参数解释:

    debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息。
    logfile /var/log/ha-log:heartbeat的日志文件。
    keepalive 1:心跳的时间间隔,默认时间单位为秒s。
    deadtime 10:心跳超时时间,超过该则认为对方已经失效。
    warntime 5:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
    initdead 60:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
    udpport 694:设置广播通信使用的端口,694为默认使用的端口号。
    ucast ens33 192.168.20.6:设置单播对方机器心跳检测的网卡和IP,其中网卡的名称在我的机子是ens33,在其他机子上可能是ens192,读者需要注意自己的网卡名称,如果不清楚自己的网卡名称可以使用ifconfig命令来查看。
    auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。

    ping 192.168.20.1:后面的IP地址为网关(路由器)的地址。

    respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。

  3. 在主服务器master上编辑haresources配置文件

    vim /usr/local/heartbeat/etc/ha.d/haresources
    #在第一行添加以下内容
    master 192.168.20.100/24/ens33
    

    192.168.20.100:为虚拟IP(VIP)。
    24:该网段的子网掩码。
    ens33:为业务网卡名称,实测中就是master主机连接网络的网卡名称。
    master 192.168.20.100/24/ens33 【进程名称】:后面还可以添加进程名称,用来同时监控服务器与进程。

  4. 在主服务器master上编辑authkeys,配置加密参数并附加权限;

    vim /usr/local/heartbeat/etc/ha.d/authkeys
    #在最后添加加密参数
    auth 2
    2 md5 Hello
    

    笔者自己的配置如下:

    auth 2:表示使用id为2的验证 下边需要定义一个2的验证算法 。
    2 md5 Hello :ID为2的验证加密为md5,Hello为密码。

    笔者选用的是ID为2的加密方式为sha1,密码为Think!,在实际环境中密码可能更为复杂。

    #给authkeys配置权限
    chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
    
  5. 拷贝配置文件到slave服务器上;

    这就需要到之前配置的SSH互信。

    #将文件传输至从主机上
    scp /usr/local/heartbeat/etc/ha.d/ha.cf,haresources,authkeys root@slave:/usr/local/heartbeat/etc/ha.d/
    

    注意:拷贝完成后登录slave修改ha.cf配置文件将ucast的IP地址修改为“ucast ens33 192.168.20.8”。

  6. 配置网卡支持文件;

    mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
    cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
    ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
    ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
    

    注意:一般启动时会报错因为 ping和ucast这些配置都需要插件支持 需要将lib64下面的插件软连接到lib目录 才不会抛出异常。

  7. 两台节点上启动heartbeat服务;

    systemctl enable heartbeat   #设置heartbeat为开机自启动
    systemctl start heartbeat   #启动heartbeat服务
    

测试高可用性

在这里使用httpd来进行高可用性测试。

  1. 安装启动httpd服务;

    yum install -y httpd
    systemctl enable httpd
    systemctl start httpd
    
  2. 替换和修改默认index.html页面;

    cd /usr/share/httpd/noindex/
    mv index.html index.html.backup
    vim index.html
    #为主备服务器添加不同的文字,如主服务器
    我是主服务器master
    #从服务器
    我是从服务器slave
    
  3. 访问192.168.20.100;

    如果出现以下页面表明虚拟IP已经正常提供服务。

  4. 关掉主服务器192.168.20.8;

    如果关掉主服务器master之后快速地访问192.168.20.100,若出现如下界面表明主从切换功能正常。

  5. 开启主服务器192.168.20.8;

    如果开启主服务器master,等到服务器全部启动完成之后访问192.168.20.100,若出现如下界面表明重连切换功能正常。

至此CentOS 7通过Heartbeat配置实现高可用HA测试已经完成。

以上是关于CentOS 7通过HeartBeat配置实现高可用HA的主要内容,如果未能解决你的问题,请参考以下文章

heartbeat 非联网安装(通过配置本地yum文件库安装heartbeat)

34补-2 HA Cluster基础及heartbeat实现HA

使用HeartBeat实现高可用HA的配置过程详解

在 centOS 7 服务器中使用 Peacemaker 创建 ocf:heartbeat:apache 资源时出错

heartbeat配置资源切换操作笔记(原创)

CentOS 6.5上部署drbd