zoukankan      html  css  js  c++  java
  • Heartbeat实现web服务器高可用

    一、Heartbeat概述:

      Heartbeat的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。

    Heartbeat-3.X版本以后被分为了4个模块,这些安装包都可以从官网:
      http://www.linux-ha.org/wiki/Downloads下载得到:
    目前的这些版本是:
      ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz #集群实验资源代理
      Heartbeat-3-0-7e3a82377fa8.tar.bz2 # 心跳主程序包
      pacemaker-1.1.9-1512.el6.src.rpm # 起搏器
      Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2 #可重复使用的群集组件

    扩展: 谁管理着TCP/UDP公共服务的端口定义
      IANA 就是指(Internet Assigned Numbers Authority) ,Internet号分配的机构。负责对IP地址分配规划以及对TCP/UDP公共服务的端口定义。
      IANA的所有任务可以大致分为三个类型:
        一、域名。IANA管理DNS域名根和.int,.arpa域名以及IDN(国际化域名)资源。
        二、数字资源。IANA协调全球IP和AS(自治系统)号并将它们提供给各区域Internet注册机构。
          注: AS自治系统号,是BGP路由协议中的号。
        三、协议分配。IANA与各标准化组织一同管理协议编号系统。
      官网:http://www.iana.org/

    二、实战:使用Heartbeat实现web服务器高可用

    主机名 ip地址  系统  角色
    docker-01 192.168.1.220 CentOS Linux release 7.4.1708 (Core)  主
    docker-02 192.168.1.221 CentOS Linux release 7.4.1708 (Core)  备
    docker-03 192.168.1.222 CentOS Linux release 7.4.1708 (Core) NFS

    2.准备工作:docker-01、docker-02

    [root@docker-01 ha.d]# hostname
    docker-01
    [root@docker-02 ha.d]# hostname
    docker-02
    [root@docker-02 ha.d]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.1.220   docker-01
    192.168.1.221   docker-02
    关防火墙,关掉selinux
    [root@docker-02 ha.d]# setenforce 0
    [root@docker-02 ha.d]# systemctl stop firewalld && systemctl disable firewalld

    3、配置docker-03为NFS服务器,提供存储资源  

    [root@docker-03 ~]# yum install nfs-utils rpcbind
    [root@docker-03 ~]# mkdir /wwwdir
    [root@docker-03 ~]# echo 'Heartbeat web test'> /wwwdir/index.html
    [root@docker-03 ~]# cat /wwwdir/index.html
    Heartbeat web test
    [root@docker-03 ~]# vi /etc/exports
    /wwwdir 192.168.1.0/24(rw)
    [root@docker-03 ~]# chmod 777 -R /wwwdir/
    [root@docker-03 ~]# ll -d /wwwdir/
    drwxrwxrwx 2 root root 24 2月  25 20:11 /wwwdir/
    [root@docker-03 ~]# systemctl start nfs
    [root@docker-03 ~]# systemctl enable nfs
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
    [root@docker-03 ~]# showmount -e
    Export list for docker-03:
    /wwwdir 192.168.1.0/24

    4、docker-01、docker-02测试nfs 存储挂载并安装httpd web服务器(基本操作是一致)

    [root@docker-01 ~]# yum install nfs-utils httpd -y
    [root@docker-01 ~]# systemctl start nfs
    [root@docker-01 ~]# showmount -e 192.168.1.222
    Export list for 192.168.1.222:
    /wwwdir 192.168.1.0/24
    [root@docker-01 ~]# mount -t nfs 192.168.1.222:/wwwdir /var/www/html/
    [root@docker-01 ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/mapper/centos-root   19G  2.1G   17G   11% /
    devtmpfs                 226M     0  226M    0% /dev
    tmpfs                    237M     0  237M    0% /dev/shm
    tmpfs                    237M  8.7M  228M    4% /run
    tmpfs                    237M     0  237M    0% /sys/fs/cgroup
    /dev/sda1                247M  105M  142M   43% /boot
    tmpfs                     48M     0   48M    0% /run/user/0
    192.168.1.222:/wwwdir     19G  1.9G   17G   10% /var/www/html
    [root@docker-01 ~]# systemctl restart httpd
    [root@docker-01 ~]# systemctl enable httpd
    Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
    #卸载资源:后期这些资源通过heartbeat直接加载
    [root@docker-01 ~]# umount /var/www/html/
    [root@docker-01 ~]# systemctl stop httpd
    [root@docker-01 ~]# systemctl disable httpd

    docker-01安装heartbeat

    同步时间

    [root@docker-01 ~]# crontab -l
    */5 * * * *     /usr/sbin/ntpdate ntp1.aliyun.com
    [root@docker-02 ~]# crontab -l
    */5 * * * *     /usr/sbin/ntpdate ntp1.aliyun.com

    配置主机间ssh互信,免密钥认证

    5、开始安装

    • 安装基础环境包:
    yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc
    • 创建用户和组
    groupadd haclient
    useradd -g haclient hacluster
    • 下载软件包:Reusable-Components-glue、resource-agents、heartbeat
    http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
    http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
    https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
    • 安装glue
    tar xf 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 ..
    • 安装Resource Agents
    tar xf 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 ..
    • 安装HeartBeat
    tar xf 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 $?
    • 配置网卡支持插件文件
    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/

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

    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/

    #以上在docker-01上安装完成,在docker-02上执行以上同样的步骤

    配置heartbeat

    #拷贝三个模版配置文件到 /usr/local/heartbeat/etc/ha.d 目录下 

    cp doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/

    配置ha.cf配置文件

    #该配置文件用于配置 心跳的核心配置

    [root@docker-01 ~]# cat /usr/local/heartbeat/etc/ha.d/ha.cf
    debugfile /var/log/ha-debug  #表示调试的日志文件 一般测试建议开启
    logfile /var/log/ha-log  #表示系统的的日志文件路径
    logfacility     local0  #表示使用系统日志与上面只能开启一个
    keepalive 2  #主备之间的心跳间隔时间单位:s
    deadtime 30  #表示如果连接对方30s还无法连接,表示节点死亡需要考虑vip转移
    warntime 10  #表示10s时间未收到心跳时发出警告日志
    initdead 120  #有时机器启动后需要一段时间网卡才能正常工作 需要预留一定的时间后,再开始判断心跳检测
    udpport 694  #多播的udp端口
    #baud   19200  #串行端口的波特率
    #serial /dev/ttyS0      # Linux  #串口的接口名
    #serial /dev/cuaa0      # FreeBSD
    #serial /dev/cuad0      # FreeBSD 6.x
    #serial /dev/cua/a      # Solaris
    #bcast  eth0            # Linux #传播心跳的广播网卡信息
    #bcast  eth1 eth2       # Linux
    #bcast  le0             # Solaris
    #bcast  le1 le2         # Solaris
    #mcast eth0 225.0.0.1 694 1 0  #多播传送心跳的网卡 多播组 端口 跃点数 是否回环内传送
    ucast ens33 192.168.1.220 #设置单播心跳,设置对方的ip地址,此处使用单播
    auto_failback on  #表示如果主机停止后,从机接管设置为on当主机从新启动后,主机立即接管vip off从机不会释放vip给主机
    node    docker-01  #配置主从的节点信息,要与uname -n保持一致
    node    docker-02
    #############################################
    #使用ping模式 有时当主机挂掉或者heartbeat挂掉后vip才会转移  有时出现某个进程挂掉 切换需要使用脚本 
    #ping模式用于测试 如果网卡ping不同 某个主机 就认为当前断网 需要转移vip 
    #respawn root     /usr/local/heartbeat/libexec/heartbeat/ipfail 表示当ping不通时 自动调用 ipfail这个脚本
    #apiauth ipfail gid=haclient uid=hacluster 表示有权限操作ipfail脚本的组和用户
    ############################################
    ping 192.168.1.1  #通过ping网关检测心跳是否正常,仅用来测试网络
    #ping组的所有主机
    #ping_group group1 10.10.10.254 10.10.10.253
    #respawn userid /path/name/to/run
    #指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。
    #respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
    #apiauth ipfail gid=haclient uid=hacluster ##设置启动IPfail的用户和组

    配置authkeys配置文件

    #该文件表示发送心跳时 机器用于验证的key的hash算法,节点之间必须配置成一致的密码

    [root@docker-01 ~]# cat /usr/local/heartbeat/etc/ha.d/authkeys
    auth 2  #表示使用id为2的验证 下边需要定义一个2的验证算法 
    2 sha1 1a2b3c  #ID 2的验证加密为shal,并添加密码
    或者
    auth 3
    3 md5 Hello!
    注:auth后填序号,可任意填写,但第二行开头必须为序号名,然后为验证方式,支持三种( crc md5 sha1 )方式验证,最后面是自定义密钥。我应该选哪种验证?
    如果Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但也希望降低CPU使用,则使用md5。最后,如果想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。

    更改权限为600

    chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys

    配置haresources配置文件

    #该文件表示资源的管理,如果是主机,当主机启动后自动加载该文件中配置的所有启动资源,资源脚本默认在haresources同级目录下的resource.d目录下

    [root@docker-01 ~]# cat /usr/local/heartbeat/etc/ha.d/haresources
    #指定节点主机名,和VIP地址,以双冒号分隔资源,此处以apache为例进行配置
    docker-01 192.168.1.230 apache::/etc/httpd/conf/httpd.conf

    docker-02上准备配置文件

    #拷贝三个配置好的文件到docker-02上,只需修改ha.cf配置文件中的单播地址为对方地址即可(ucast ens33 192.168.1.220)。

    安装httpd资源服务

    #在两个节点上安装httpd服务并测试

    yum install httpd
    echo "<h1>Heartbeat web test</h1>" >>/var/www/html/index.html
    systemctl start httpd

    测试httpd服务正常后关闭httpd服务并关闭自启动

    systemctl stop httpd
    systemctl disable httpd

    .启动服务

    #启动每个节点上heartbeat服务

    systemctl enable heartbeat
    systemctl start heartbeat
    ssh docker-02 'systemctl start heartbeat'

    测试结果

    [root@docker-01 ~]# curl 192.168.1.230
    Heartbeat web test
    #使用heartbeat自带脚本切换主备节点
    [root@docker-01 ~]# /usr/local/heartbeat/share/heartbeat/hb_standby
    Going standby [all].
    [root@docker-01 ~]# curl 192.168.1.230
    Heartbeat web test
  • 相关阅读:
    LVS基于DR模式负载均衡的配置
    Linux源码安装mysql 5.6.12 (cmake编译)
    HOSt ip is not allowed to connect to this MySql server
    zoj 3229 Shoot the Bullet(无源汇上下界最大流)
    hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割
    poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
    URAL 1430 Crime and Punishment
    hdu 2048 神、上帝以及老天爷(错排)
    hdu 3367 Pseudoforest(最大生成树)
    FOJ 1683 纪念SlingShot(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12363743.html
Copyright © 2011-2022 走看看