Heartbeat+Nginx实现高可用集群

适用于访问量较小的业务,配置较为简单。

创建一个虚拟的IP提供给客户端来访问,虚拟IP会在两台服务器之间来回切换,heartbeat以脚本的方式检测两台服务器的存活状态,以此来实现高可用性。

1)安装Nginx

https://nginx.org/download/nginx-1.20.2.tar.gz
(1)安装相关依赖包

这里通过挂载镜像的方式进行安装(挂载镜像步骤略)

yum install -y pcre pcre-devel zlib zlib-devel gcc*
(2)解压下载的软件包
tar -zxvf nginx-1.20.2.tar.gz 
(3)编译安装
 ./configure --prefix=/usr/local/nginx
make && make install 
(4)挂载NFS共享服务器目录

NFS服务搭建步骤

vim /etc/fstab
将共享服务器的目录挂载至nginx的网页文件存放目录
10.10.10.14:/opt/web1   /usr/local/nginx/html          nfs     defaults,_netdev        0 0
(5)启动nginx
#要想通过nginx命令直接启动,需要先从nginx安装目录中拷贝启动脚本到/usr/sbin/目录下
cp /usr/local/nginx/sbin/nginx /usr/sbin/

#启动nginx
nginx -c /usr/local/nginx/conf/nginx.conf
#停止nginx
nginx -s stop

2)安装Heartbeat

(1)下载Heartbeat包
#需要下载的rpm包
cluster-glue-1.0.5-6.el6.x86_64.rpm
cluster-glue-libs-1.0.5-6.el6.x86_64.rpm
heartbeat-3.0.4-2.el6.x86_64.rpm
heartbeat-libs-3.0.4-2.el6.x86_64.rpm
perl-TimeDate-2.30-2.el7.noarch.rpm
PyXML-0.8.4-27.99.fc19.x86_64.rpm
resource-agents-4.1.1-61.el7.x86_64.rpm

#在这两个地址搜索下载所需软件包
http://www.rpmfind.net/
https://crpm.cn/
(2)使用yum进行安装
yum install heartbeat* -y
(3)配置时间同步

注释掉官方提供的ntp服务器

 vim /etc/ntp.conf
#添加ntp服务器为本地时间
server 127.127.1.0    #127.127.1.0 是NTP中预定义的,用于表示本地时钟源的地址.
fudge 127.127.1.0 stratum 10    #设置时钟源层级为10
#只允许10.10.10.0/24网段的地址使用ntp服务同步时间
restrict 10.10.10.0 mask 255.255.255.0 nomodify notrap
(4)在备份服务器上进行时间同步
ntpdate -u 主机IP       
(5)配置主机名解析

在vim /etc/sysconfig/network 添加使其永久生效

NETWORKING=yes
HOSTNAME=nginx-server1

#修改保存后重新加载配置
systemctl restart network
(6)从默认的程序文档目录中拷贝配置文件
#ha.cf主配置文件;authkeys认证文件;haresources源文件,拷贝到heartbeat的默认存放目录中
cd /usr/share/doc/heartbeat-3.0.4/
cp -a ha.cf authkeys haresources /etc/ha.d/
(7)配置认证文件

生成随机数MD5值,提高安全性

tr -dc '0-9-a-z-A-Z-!-?' </dev/urandom |head -c 512|openssl md5

选择认证方式为MD5,将我们随机生成的MD5值填写进去

vim authkeys

在这里插入图片描述

authkeys的权限必须为600,如果不设置为600会判定为不安全禁止启动。

(8)配置主配置文件

配置心跳检测网卡,如果有多个网卡则根据示例进行添加

配置node前必须确保通过uname -n 能够搜索到

添加主服务器虚拟IP以及使用的脚本类型

#指定主服务器名使用IPaddr2的脚本,添加一个IP为10.10.10.100子网掩码为24的ens33:0子接口
nginx-server1   IPaddr2::10.10.10.100/24/ens33:0

3)故障切换测试

当主服务器故障时会自动切换至备份服务器,以此来实现高可用。

4)heartbeat优化

由于heartbeat在检测过程中只是针对服务器本身进行检测,如果只是nginx服务故障,而服务器状态正常就不会触发切换。

编写一个简单的shell脚本用来监控nginx的状态使用while循环每3秒检查一次,以此来弥补heartbeat的不足之处。

#!/bin/bash
function http_code(){
code=$(curl -I  -s   10.10.10.11|grep HTTP|cut -d' ' -f2)
if [ "$code" != 200 ];then
        echo "open fail!"
        systemctl stop heartbeat.service
elif [ "$code" == 200 ];then
        heartbeat_status=$(/etc/init.d/heartbeat status |grep "No")
        if [ "$heartbeat_status" ];then
                echo "Starting [heartbeat]......"
                systemctl start heartbeat.service
                if [ $? -eq 0 ];then
                    echo "starting Success!"
                fi
        fi
fi
}
while true
do
        http_code
        sleep 3
done

脚本测试效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值