前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >heartbeat实现web服务器高可用

heartbeat实现web服务器高可用

作者头像
胡齐
发布2019-09-26 15:57:48
1.7K1
发布2019-09-26 15:57:48
举报
文章被收录于专栏:运维猫运维猫

1、heartbeat概述

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

官方网站:

下载heartbeat

http://www.linux-ha.org/wiki/Download

2、下载heartbeat

http://www.linux-ha.org/wiki/Download

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 # 起搏器

ˈpāsˌmākər 起搏器

Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2 #可重复使用的群集组件

端口号:**694**

代码语言:javascript
复制
 [root@localhost ~]# cat /etc/services | grep 694**
 ha-cluster      694/tcp                         # Heartbeat HA-cluster**
 ha-cluster      694/udp                         # Heartbeat HA-cluster**

3、谁管理着TCP/UDP公共服务的端口定义

IANA 就是指(Internet Assigned Numbers Authority) ,Internet号分配的机构。负责对IP地址分配规划以及对TCP/UDP公共服务的端口定义。

IANA的所有任务可以大致分为三个类型:

3.1域名。

IANA管理DNS域名根和.int,.arpa域名以及IDN(国际化域名)资源。

3.2数字资源。

IANA协调全球IP和AS(自治系统)号并将它们提供给各区域Internet注册机构。

注: AS自治系统号,是BGP路由协议中的号。

3.3协议分配。

IANA与各标准化组织一同管理协议编号系统。

官网:http://www.iana.org/

4、使用heartbeat实现web服务器高可用

172.17.1.150 主web

172.17.1.152 从web

172.17.1.151 NFS

浮动资源:

公网IP地址

HTTP服务

存储:NFS挂载 172.17.1.151 docker-02

准备工作:172.17.1.150 docker-01 172.17.1.152 docker-03

4.1 修改主机名,永久生效

代码语言:javascript
复制
 [root@localhost ~]# vim /etc/sysconfig/network
 HOSTNAME=docker-02

4.2 解析(三台主机共同配置)

代码语言:javascript
复制
 [root@docker-02 ~]# vim /etc/hosts
 172.17.1.150 docker-01
 172.17.1.151 docker-02
 172.17.1.152 docker-03

4.3 关防火墙,关掉selinux

代码语言:javascript
复制
 [root@docker-02 ~]# iptables -F
 [root@docker-02 ~]# setenforce 0
 [root@docker-02 ~]# getenforce 
 Disabled

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

5.1安装NFS服务器:3台主机均安装

代码语言:javascript
复制
 [root@docker-02 ~]# yum -y install nfs-utils
 [root@docker-02 ~]# mkdir /wwwdir
 [root@docker-02 ~]# echo 'yumweimao'> /wwwdir/index.html
 [root@docker-02 ~]# cat /etc/exports
 /wwwdir   172.17.1.0/20(rw)

5.2配置好目录权限:

代码语言:javascript
复制
 [root@docker-02 ~]# ll -d /wwwdir/
 drwxr-xr-x 2root root 40969月  2420:46 /wwwdir/
 [root@docker-02 ~]# chmod 777 -R /wwwdir/
 [root@docker-02 ~]# ll -d /wwwdir/
 drwxrwxrwx 2root root 40969月  2420:46 /wwwdir/

5.3开启nfs服务并解决启动报错问题

代码语言:javascript
复制
 启动服务发现报错
 [root@docker-02 ~]# service nfs start
 Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111(Connection refused)
 解决报错:
 [root@docker-02 ~]# service rpcbind restart
 [root@docker-02 ~]# service nfs restart
 [root@docker-02 ~]# showmount -e   #查看一下
 Export list fordocker-02:
 /wwwdir 172.17.1.0/20

5.4测试172.17.1.152nfs 存储挂载并安装httpd web服务器

代码语言:javascript
复制
 [root@docker-03 ~]# yum install nfs-utils httpd -y
 [root@docker-03 ~]# service rpcbind restart
 [root@docker-03 ~]# service nfs restart
 [root@docker-03 ~]# showmount -e 172.17.1.151
 Export list for172.17.1.151:
 /wwwdir 172.17.1.0/20
 [root@docker-03 ~]# mount -t nfs 172.17.1.151:/wwwdir /var/www/html/
 [root@docker-03 ~]# service httpd restart
 [root@docker-03 ~]# yum install elinks -y
 [root@docker-03 ~]# elinks --dump 172.17.1.152
   yumweimao

5.5卸载资源:后期这些资源通过heartbeat直接加载

代码语言:javascript
复制
 [root@docker-03 ~]# umount /var/www/html/
 [root@docker-03 ~]# service httpd stop

6、测试172.17.1.150nfs 存储挂载并安装httpd web服务器

6.1安装NFS服务器

代码语言:javascript
复制
 [root@docker-01 ~]# yum install nfs-utils httpd -y 
 [root@docker-01 ~]# service rpcbind restart
 [root@docker-01 ~]# service nfs start
 [root@docker-01 ~]# showmount -e 172.17.1.151
 Export list for172.17.1.151:
 /wwwdir 172.17.1.0/20
 [root@docker-01 ~]# mount -t nfs 172.17.1.151:/wwwdir /var/www/html/
 [root@docker-01 ~]# service httpd restart   
 [root@docker-01 ~]# yum install elinks -y
 [root@docker-01 ~]# elinks --dump 172.17.1.150
   yumweimao

6.2卸载资源:后期这些资源通过heartbeat直接加载

代码语言:javascript
复制
 [root@docker-01 ~]# umount /var/www/html/
 [root@docker-01 ~]# service httpd stop

7、安装172.17.1.150 172.17.1.152 heartbeat

7.1下载:http://www.linux-ha.org/wiki/Downloads,从官方下载最新的HeartBeat版本:

Heartbeat 3.0.6

Cluster Glue 1.0.12

Resource Agents 3.9.6

7.2安装依赖包(172.17.1.150 172.17.1.152)

代码语言:javascript
复制
 [root@docker-01 ~]# yum install -y bzip2 bzip2-devel gcc gcc-c++ autoconf automake libtool e2fsprogs-devel glib2-devel libxml2 libxml2-devel libtool-ltdl-devel asciidoc libuuid-devel docbook 

7.3编译Cluster Glue(172.17.1.150 172.17.1.152)

代码语言:javascript
复制
 [root@docker-01 opt]# tar xvf resource-agents-3.9.6.tar
 [root@docker-01 opt]# tar -xvf 0a7add1d9996.tar.bz2
 [root@docker-01 opt]# tar -xvf 958e11be8686.tar.bz2 
 [root@docker-01 opt]# ls
 0a7add1d9996.tar.bz2       resource-agents-3.9.6
 958e11be8686.tar.bz2       resource-agents-3.9.6.tar
 Heartbeat-3-0-958e11be8686 Reusable-Cluster-Components-glue--0a7add1d9996
 [root@docker-01 Reusable-Cluster-Components-glue--0a7add1d9996]# cd Reusable-Cluster-Components-glue--0a7add1d9996/
 [root@docker-01 Reusable-Cluster-Components-glue--0a7add1d9996]# groupadd haclient #创建组
 [root@docker-01 Reusable-Cluster-Components-glue--0a7add1d9996]# useradd -g haclient hacluster #创建用户
 [root@docker-01 Reusable-Cluster-Components-glue--0a7add1d9996]# ./autogen.sh
 [root@docker-01 Reusable-Cluster-Components-glue--0a7add1d9996]# ./configure --prefix=/usr/local/heartbeat/
 [root@docker-01 Reusable-Cluster-Components-glue--0a7add1d9996]# make && make install

7.4编译Resource Agents(172.17.1.150 172.17.1.152)

代码语言:javascript
复制
 [root@docker-01 resource-agents-3.9.6]# cd resource-agents-3.9.6
 [root@docker-01 resource-agents-3.9.6]# ./autogen.sh
 [root@docker-01 resource-agents-3.9.6]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
 [root@docker-01 resource-agents-3.9.6]# make && make install

7.5编译Heartbeat(172.17.1.150 172.17.1.152)

代码语言:javascript
复制
 [root@docker-01 Heartbeat-3-0-958e11be8686]# cd Heartbeat-3-0-958e11be8686/
 [root@docker-01 Heartbeat-3-0-958e11be8686]# ./bootstrap
 [root@docker-01 Heartbeat-3-0-958e11be8686]# export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
 [root@docker-01 Heartbeat-3-0-958e11be8686]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
 [root@docker-01 Heartbeat-3-0-958e11be8686]# make
 [root@docker-01 Heartbeat-3-0-958e11be8686]# make install

7.6生成配置文件(172.17.1.150 172.17.1.152)

代码语言:javascript
复制
 [root@docker-01 ha.d]# cd /usr/local/heartbeat/etc/ha.d/
 [root@docker-01 ha.d]# cp /opt/Heartbeat-3-0-958e11be8686/doc/{ha.cf,haresources,authkeys} .
 [root@docker-01 ha.d]# chkconfig --add heartbeat
 [root@docker-01 ha.d]# chkconfig heartbeat on
 [root@docker-01 ha.d]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys 
 [root@docker-01 ha.d]# mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat
 [root@docker-01 ha.d]# cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
 [root@docker-01 ha.d]# ln -sv /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/

8、配置Heartbeat

Heartbeat的配置主要涉及到ha.cf、haresources、authkeys这三个文件。

ha.cf: 主配置文件,

haresource: 用来配置要让Heartbeat托管的服务,

authkey: 是用来指定Heartbeat的认证方式。

8.1配置ha.cf----主配置文件

代码语言:javascript
复制
 [root@docker-01 ha.d]# cd /usr/local/heartbeat/etc/ha.d/
 [root@docker-01 ha.d]# grep -v "^#" ha.cf | grep -v "^$"
 debugfile /var/log/ha-debug  ##用于记录heartbeat的调试信息
 logfile/var/log/ha-log ##用于记录heartbeat的日志信息
 logfacilitylocal0  ##设置heartbeat的日志,这里用的是系统日志
 keepalive 2 ##设定心跳(监测)时间时间为2秒
 deadtime 30 ##指定若备用节点在30秒内未收到主节点心跳信号,则接管主服务器资源
 warntime 10 ##指定心跳延迟的时间为10秒,10秒内备节点不能接收主节点心跳信号,即往日志写入警告日志,但不会切换服务
 initdead 120 ##系统启动或重启后预留的忽略时间段,取值至少为deadtime的两倍
 udpport694 ##广播/单播通讯使用的Udp端口
 ucast eth0 172.17.1.152 ##采用网卡eth32的udp单播来组织心跳,ip地址为监听对方从web的ip地址
 auto_failback on  ##定义当主节点恢复后,是否将服务自动切回
 nodedocker-01  ##主节点名称
 nodedocker-03  ##备用节点名称
 ping172.17.0.1  ##通过ping网关检测心跳是否正常,仅用来测试网络(网关地址)
 respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail ##指定和heartbeat一起启动、关闭的进程
 apiauth ipfail gid=haclient uid=hacluster ##设置启动IPfail的用户和组

8.2 配置haresources-----资源文件

Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址及启动服务集群资源,文件每一行可包含一个或多个资源脚本名,资源间使用空格隔开,参数间使用两个冒号隔开,主节点和备份节点中资源文件haresources要完全一样。

一般格式为:

node-name network <resource-group>

node-name表示主节点的主机名,必须和ha.cf文件中指定的节点名一致。network用于设定集群的

IP地址、子网掩码和网络设备标识等。resource-group用于指定需Heartbeat托管的服务(即这些

服务可由Heartbeat来启动和关闭)。

注意:这里指定的IP地址就是集群对外服务的IP地址

如要托管这些服务,必须将服务写成可通过start/stop来启动或关闭的脚本,放到/etc/init.d/

或/etc/ha.d/resource.d/目录下,Heartbeat会根据脚本名称自动去/etc/init.d或者

/etc/ha.d/resource.d目录下找到相应脚本进行启动或关闭操作。

例:

代码语言:javascript
复制
 [root@docker-01 ha.d]# grep -v "^#" haresources | grep -v "^$"
 docker-01 IPaddr::172.17.1.170/20/eth0 Filesystem::172.17.1.151:/wwwdir::/var/www/html::nfs httpd #

注:docker-01是主服务器的主机名, docker-03上不需要修改。这样资源默认会加这个主机上。当docker-01坏了,docker-03会再接管。

IPaddr::172.17.1.170/20/eth0 #指定VIP及绑定到哪个网卡上

Filesystem::172.17.1.151:/wwwdir::/var/www/html::nfs #指定要挂载的存储

httpd #指定要启动的服务。这个服务必须是在/etc/init.d下或者/usr/local/heartbeat/etc/ha.d/resource.d目录下

8.3配置authkeys-----心跳密钥验证文件

代码语言:javascript
复制
 [root@docker-01 ha.d]# grep -v "^#" authkeys | grep -v "^$"
 auth 3
 3md5 Hello!

注:auth后填序号,可任意填写,但第二行开头必须为序号名,然后为验证方式,支持三种( crc md5 sha1 )方式验证,最后面是自定义密钥。我应该选哪种验证?

如果Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但也希望降低CPU使用,则使用md5。最后,如果想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。

8.4编写httpd启动脚本

代码语言:javascript
复制
 [root@docker-01 ha.d]# vim /usr/local/heartbeat/etc/ha.d/resource.d/httpd 
 [root@docker-01 ha.d]# cat /usr/local/heartbeat/etc/ha.d/resource.d/httpd 
 #!/bin/bash
 servicehttpd $1

8.5复制配置文件至备机

代码语言:javascript
复制
 [root@docker-01 ha.d]# scp authkeys ha.cf haresources root@172.17.1.152:/usr/local/heartbeat/etc/ha.d/
 [root@docker-01 ha.d]# scp -rp resource.d/httpd root@172.17.1.152:/usr/local/heartbeat/etc/ha.d/resource.d/

8.6备机172.17.1.152上配置heartbeat

代码语言:javascript
复制
 [root@docker-03 ha.d]# chmod 600 authkeys
 [root@docker-03 ha.d]# vim ha.cf
 改:
 ucast eth0 172.17.1.152
 为:
 ucast eth0 172.17.1.150

9、测试:

代码语言:javascript
复制
 [root@docker-01 ha.d]# cd /usr/local/heartbeat/etc/ha.d/resource.d/
 [root@docker-01 resource.d]# ./IPaddr 172.171.1.170/20/eth0 start
 INFO: Using calculated netmask for172.171.1.170: 255.255.240.0
 DEBUG: Using calculated broadcast for172.171.1.170: 172.171.15.255
 INFO: eval ifconfig eth0:0 172.171.1.170 netmask 255.255.240.0 broadcast 172.171.15.255
 DEBUG: Sending Gratuitous Arp for172.171.1.170 on eth0:0 [eth0]
 ARPING 172.171.1.170 from 172.171.1.170 eth0
 INFO: Success
 INFO: Success
 [root@docker-01 ha.d]# ip add
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc 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
 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP qlen 1000
   link/ether 02:00:31:b2:04:17 brd ff:ff:ff:ff:ff:ff
   inet 172.17.1.150/20 brd 172.17.15.255 scope global eth0
   inet 172.17.1.170/20 brd 172.17.15.255 scope global secondary eth0:0
 [root@docker-01 resource.d]# ./Filesystem 172.17.1.151:/wwwdir /var/www/html/ nfs stop
 INFO: Running stopfor172.17.1.151:/wwwdir on /var/www/html
 INFO: Trying to unmount /var/www/html
 INFO: unmounted /var/www/html successfully
 INFO: Success
 INFO: Success
 ##172.17.1.150 172.17.1.151同时启动服务
 [root@docker-01 resource.d]# service heartbeat start
 [root@docker-01 resource.d]# service httpd start
 [root@docker-01 resource.d]# df -Th
 Filesystem           Type   Size Used Avail Use% Mounted on
 /dev/sda3           ext4   97G  2.7G   89G   3% /
 tmpfs               tmpfs  7.8G     0 7.8G   0% /dev/shm
 /dev/sda1           ext4   190M   52M 129M  29% /boot
 172.17.1.151:/wwwdir nfs     97G  2.7G   89G   3% /var/www/html

停止其中一个服务,会自动切换到备机。

10、扩展

heartbeat自带的断网切换的工具-ipfailipfail断网切换的原理:关于ipfail这个断网切换的原理很简单,首先heartbeat要判断自己的网络是否正常其实就是通过ping某个ip,如果可以ping的通,说明网络是通的,如果ping不通了,说明是网络断了,或者是主服务器的网卡坏了,然后执行切换的动作。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、heartbeat概述
  • 2、下载heartbeat
  • 3、谁管理着TCP/UDP公共服务的端口定义
    • 3.1域名。
      • 3.2数字资源。
        • 3.3协议分配。
        • 4、使用heartbeat实现web服务器高可用
          • 公网IP地址
            • HTTP服务
              • 存储:NFS挂载 172.17.1.151 docker-02
                • 4.1 修改主机名,永久生效
                  • 4.2 解析(三台主机共同配置)
                    • 4.3 关防火墙,关掉selinux
                    • 5、配置docker-02为NFS服务器,提供存储资源
                      • 5.1安装NFS服务器:3台主机均安装
                        • 5.2配置好目录权限:
                          • 5.3开启nfs服务并解决启动报错问题
                            • 5.4测试172.17.1.152nfs 存储挂载并安装httpd web服务器
                              • 5.5卸载资源:后期这些资源通过heartbeat直接加载
                              • 6、测试172.17.1.150nfs 存储挂载并安装httpd web服务器
                                • 6.1安装NFS服务器
                                  • 6.2卸载资源:后期这些资源通过heartbeat直接加载
                                  • 7、安装172.17.1.150 172.17.1.152 heartbeat
                                    • 7.1下载:http://www.linux-ha.org/wiki/Downloads,从官方下载最新的HeartBeat版本:
                                      • 7.2安装依赖包(172.17.1.150 172.17.1.152)
                                        • 7.3编译Cluster Glue(172.17.1.150 172.17.1.152)
                                          • 7.4编译Resource Agents(172.17.1.150 172.17.1.152)
                                            • 7.5编译Heartbeat(172.17.1.150 172.17.1.152)
                                              • 7.6生成配置文件(172.17.1.150 172.17.1.152)
                                              • 8、配置Heartbeat
                                                • 8.1配置ha.cf----主配置文件
                                                  • 8.2 配置haresources-----资源文件
                                                    • 8.3配置authkeys-----心跳密钥验证文件
                                                      • 8.4编写httpd启动脚本
                                                        • 8.5复制配置文件至备机
                                                          • 8.6备机172.17.1.152上配置heartbeat
                                                          • 9、测试:
                                                          • 10、扩展
                                                          相关产品与服务
                                                          容器镜像服务
                                                          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                                                          领券
                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档