服务器集群之高可用集群—HA Cluster(High Available)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

什么是高可用HA?

    HA(High Available), 高可用性群集,是保证业务连续性的有效解决方案,避免了因为单点故障带来的风险,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点,各节点之间会传递心跳信息确认对方是否运行正常。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。


Messaging Layer Cluster Infrastucture 集群的基础架构层:提供底层的高可用服务。

Cluster Resource Manager 集群资源管理器:通过收集底层的心跳信息来确定哪个节点依然存活,它能够接受上层服务的委托,与底层通信,管理哪个服务运行在哪个节点上,它可以实现,想要提供高可用服务实现高可用性,但本身不具备高可用能力,也无法与基础架构层通信的服务,都作为资源来管理。 需要在各节点转移的,都可称为资源,如 IP,Web服务,ftp服务等。

资源约束:

    位置约束:约束资源优先运行在哪个节点上。

    排列约束:用于定义资源与资源间的关系,资源之间能否运行在一起,比如约束当某个资源启动时,另一个才可以启动,如果它没启动那另一个也一定不会启动。

    顺序约束:定义资源与资源间的启动顺序。


RA(Resource Agent) 资源代理:

    LSB:Linux Standard Base      Linux基础标准   

    OCF:Open Cluster Framework    开放集群框架

RA还会实现资源的检测,当服务运行不正常时,会尝试重启该服务,再不行会通知CRM实施转移。

DC(Designated Coordinator):

    是节点中自动推举的协调员,负责收集心跳信息,协调各个节点。

LRM (Local Resource Manager):每个节点都有运行一个LRM作为CRM的一部分存在,运行流程DC——>LRM——>RA——>执行脚本启动服务。

实验一、使用heartbeat构建一个Web高可用集群。

实验规划:

    主节点:admin1.tuchao.com 192.168.18.201/24

    备节点:admin2.tuchao.com 192.168.18.202/24

    vip:192.168.18.222/24

    myip:192.168.18.220/24

    NFS服务器:192.168.18.203/24 

实验目标:    

    1、主节点上面提供HTTP服务,运行着一个动态Blog站点。备节点上提供了MySQL服务。

    2、当主节点故障时,备节点在运行MySQL的情况下,会自动启动httpd服务,接续主节点提供Web服务

    3、当备节点故障时,主节点会启动MySQL服务接续工作,这就实现了两个节点之间互为主备。

    4、网站程序与MySQL数据目录,存放至NFS服务器上,实现共享存储。

    准备存储,先配置NFS服务器:

  • mkdir /mysqldata --用于存放MySQL数据文件

  • mkdir /http --用于存放网站程序

  • vim /etc/exports --修改配置文件,加入以下行。

  • /http      192.168.18.0/24(rw,no_root_squash)

  • /mysqldata      192.168.18.0/24(rw,no_root_squash)

  • /etc/init.d/nfs start --启动nfs服务

  • useradd -r -u 300 mysql --添加mysql用户

  • chown -R mysql.mysql  /mysqldata --给予权限

    主节点admin1.tuchao.com配置:

MySQL的安装 略

  • cp support-files/mysql.server  /etc/init.d/mysqld  --复制服务脚本

  • chkconfig --add mysqld  --添加到系统服务

  • chkconfig mysqld off  --禁止开机自启动,注意如果要作为高可用集群的话,一定要禁止。

  • useradd -r -u 300 mysql --添加mysql用户

  • mkdir /mydata  --创建挂载点

  • mount -t nfs 192.168.1.110:/mysqldata /mydata  --挂载共享存储

  • mkdir /mydata/data  --创建数据目录

  • 修改/etc/my.cnf文件,指定datadir=/mydata/data

初始化MySQL,创建库,创建用户,授权用户。(给网站程序连接数据库时使用)

  • ./scripts/mysql_install_db  --user=mysql --datadir=/mydata/data

  • service mysqld start

  • create database wpdb;

  • create user wpuser;

  • grant all on wpdb.* to 'wpuser'@'192.168.18.%' identified by '123456';


修改hosts文件。

  • vim /etc/hosts

192.168.18.201   admin1.tuchao.com admin1

192.168.18.202   admin2.tuchao.com admin2

安装PHP,配置httpd服务,解压网站程序,配置接口。

首页可以访问到了,代表Web服务和MySQL配置是没问题的。

wKiom1PSJpCxnKBEAAGIUoWMR_E040.jpg


现在停止服务卸载共享存储,安装heartbeat,开始配置高可用集群:

  • /etc/init.d/httpd stop

  • /etc/init.d/mysqld stop

  • chkconfig httpd off   //这里注意一旦打算把服务定义为集群资源,一定不能设置开机启动。

  • chkconfig mysqld off

  • umount /var/www/html

  • umount /mydata

  • yum install heartbeat-2.1.4-12.el6.i686.rpm  heartbeat-stonith-2.1.4-12.el6.i686.rpm heartbeat-gui-2.1.4-12.el6.i686.rpm  ipvsadm-1.26-2.el6.i686.rpm  libnet-1.1.6-7.el6.i686.rpm  heartbeat-pils-2.1.4-12.el6.i686.rpm 

复制配置文件

  • cd /usr/share/doc/heartbeat-2.1.4/

  • cp authkeys   ha.cf /etc/ha.d/

生成随机数,配置authkeys文件,用于认证。

  • chmod 600 authkeys

  • openssl rand -hex 8 >> authkeys

wKiom1PSJ82Cz38jAACbBjRAO6I111.jpg

配置ha.cf文件,启动heartbeat服务。

crm respawn,也可以使用crm on,crm yes  //用于启动额外的crm

#下面是对传输的数据进行压缩,是可选项

compression     bz2

compression_threshold 2


wKiom1O-K1jwLpziAADnsEj-V88977.jpg


wKioL1O-Kzni3fUhAAHdHW-KF5s341.jpg


keepalive 2  //持久连接

deadtime 30  //30秒后认为节点死亡

initdead 30  //在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”initdead”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍。

udpport 694  //侦听的UDP端口,这个值是默认的。

bcast   eth0 eth1  //广播接口

auto_failback  on  //是否开启,节点恢复后资源自动返回原节点。

启动heartbeat关闭selinux和防火墙。

  • service heartbeat start

  • /etc/init.d/iptables stop

  • chkconfig iptables off

  • setenforce 0

备节点admin2.tuchao.com,配置和主节点相同,只需要安装好程序,然后把配置文件拷贝过去就可以了。

  • scp authkeys ha.cf  admin2:/etc/ha.d

  • scp /etc/hosts  admin2:/etc/hosts

  • scp /etc/httpd/conf/httpd.conf  admin2:/etc/httpd/conf/httpd.conf

  • scp /etc/my.cnf  admin2:/etc

  • scp /etc/ld.so.conf.d/mysql.conf  admin2:/etc/ld.so.conf.d/mysql.conf

  • scp /etc/profile.d/mysql.sh  admin2:/etc/profile.d/mysql.sh

  • ldconfig

  • . /etc/profile.d/mysql.sh

  • service heartbeat start

启动heartbeat后,需要给hacluster用户一个密码,就可以使用hb_gui图形界面来配置资源。

  • hb_gui &

  • echo 123456 |passwd --stdin hacluster 

配置资源

我将资源分为以下两组:

webserver    运行在主节点

vip:192.168.18.222    cidr_netmask 24

store device:192.168.18.203:/http  directory:/var/www/html fstype:nfs

httpd //这个使用的是LSB标准类型,没有额外参数。

mysql    运行在备节点

myip:192.168.18.220    cidr_netmask 24

mystore device:192.168.18.203:/mysqldata directory:/mydata fstype:nfs

mysqld //LSB类型

定义完成后,启动成功如下图:

wKioL1PTjLGSizPqAAKIzLoT6a4358.jpg


我们访问vip对应解析的域名(www.tuchao.com)

可以正常访问到我们的站点

wKioL1PUPYTynD31AAGnQ-mlM4s449.jpg


模拟故障,这时把我们主节点的network服务给stop。

/etc/init.d/network stop

尝试用备节点ping 主节点,已经ping不通了。

wKiom1PUPmOiWTv4AAHunCbO9qU937.jpg

这时尝试下我们的站点还能不能正常访问。

wKioL1PUQDmCWzxXAAHITg3cLJQ182.jpg

哈哈,访问正常,我们明明把提供http服务的admin1节点的网络功能给停了呀。

我们来看看heartbeat。

wKiom1PUQDeSkzMIAAJsT8_vKNI793.jpg

这里显示主节点已关闭,主节点的资源组已经自动切换到备节点上来了。


wKioL1PUQ4iB57u3AAMX-kAwDQM192.jpg


wKiom1PUQoiC0I8rAAGxBaBTlY4996.jpg


wKioL1PUQ7_Aj1sJAAJvxH2b9n8636.jpg

现在我们把主节点网络功能给恢复,因为这里开启了auto_failback on,资源又会自动切换回主节点了。


wKiom1PURerhL3QFAAIlPMn4kFA742.jpg

我们把备节点网络功能给关掉,主节点也会自动接替备节点的工作。

这就实现了互为主备的高可用模型。


wKiom1PUSVTgpmcEAAHK6y-lEU4068.jpg


实验二、LVS负载均衡+高可用,使用heartbeat-ldirectord对后端RealServer做健康状况检测。

实验环境:

    RHEL6.4

    主节点:admin1.tuchao.com 192.168.18.201/24

    备节点:admin2.tuchao.com 192.168.18.202/24

安装ipvsadm

  • yum install ipvsadm -y

安装heartbeat-ldirectord,复制配置文件样列。

  • yum install heartbeat-ldirectord -y

  • cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf  /etc/ha.d/

编辑配置文件:

checktimeout=3  //等待超时时间

checkinterval=1  //检查时间间隔

#fallback=127.0.0.1:80  

autoreload=yes  //自动装载配置文件

#logfile="/var/log/ldirectord.log"  //定义服务自我管理的日志

#logfile="local0"  //定义日志发送给rsyslog

#emailalert="admin@x.y.z"  //管理员邮箱

#emailalertfreq=3600  //邮件发送频率

#emailalertstatus=all 

quiescent=yes  //是否以静默模式工作(当某一个Realserver故障了如何处理,yes表示把realserver权重设置为0,no表示把realserver删除。

virtual=192.168.18.100:80  //定义虚拟IP

        real=192.168.18.191:80 gate  //定义RealServer,gate表示DR模型。

        real=192.168.18.192:80 gate 3

        fallback=127.0.0.1:80 gate  //当RealServer全部故障时,使用本机响应请求。

        service=http  //当检测类型为协商的时候,指定检测方式是基于什么服务实现的。

        request=".test.html"

        receive="OK"

        virtualhost=www.tuchao.com  //虚拟主机

        scheduler=wrr  //指定调度算法

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate  //检查类型为协商

        checkport=80

配置文件写好以后,复制一份到备节点。

启动图像界面定义资源

vip

wKioL1PUiVbSHXxsAAJdsS7jLpc009.jpg

ldirectord

wKiom1PUiFvR1YFgAAJWcPWuclc684.jpg


配置好两台realserver分别是192.168.18.191,192.168.18.192。

  • 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

  • ifconfig lo:0 192.168.18.100  broadcast 192.168.18.100 netmask 255.255.255.255 up

  • route add -host 192.168.18.100 dev lo:0

创建首页文件  略

创建检测文件

echo "OK" > /var/www/html/.test.hmtl

启动httpd服务

service httpd start

第二台RealServer配置相同。

启动资源

wKioL1PUiwOSkfeSAAF1gow8KQg690.jpg

资源运行在了节点二上

wKiom1PUitiBzEXWAAGvEPmKnBM819.jpg

我们访问下director试试。

wKiom1PUiv-S6LKmAAEahW23W5A686.jpg


刷新一下,这里为了更好的分别有没有生效,设置了两个不同的网页内容。

wKiom1PUi0qBjoT6AAEbM2ihwC4880.jpg

现在模拟节点二故障,在节点二上执行halt。

资源已经自动切换到节点一上来了,负载均衡正常运作。

wKioL1PUjeDDa9zMAAFTrdwS69Q491.jpg

配置节点一与节点二httpd服务,实现fallback功能。

echo “Server is repairing”>/var/www/html/index.html

service httpd start

这时候模拟realserver全部都故障了,ldirectord会自动把故障的realserver权重标记为0。

wKioL1PUkK3w0xrbAAGChzWrdDQ312.jpg


尝试下访问,这时director就响应我们了。

wKiom1PUj9jzYdSCAADKeymUd9g143.jpg






HA高可用实验完成,这里提一个小细节,实际工作中配置heartbeat还是不要启用auto_failback,当损坏的节点突然好了以后,资源切回来有时会出错,要手动到clearup一下资源就可以了。


有更好的建议欢迎大家与我多多交流QQ:1183710107


本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1436086



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
Kubernetes 安全 Docker
在 K8s 集群中创建 DERP 服务器
在 K8s 集群中创建 DERP 服务器
|
3月前
|
Rust Ubuntu Linux
【一起学Rust | 进阶篇 | RMQTT库】RMQTT消息服务器——安装与集群配置
【一起学Rust | 进阶篇 | RMQTT库】RMQTT消息服务器——安装与集群配置
122 0
|
1月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
140 1
|
8月前
|
存储 NoSQL 网络协议
一台服务器上部署 Redis 伪集群
一台服务器上部署 Redis 伪集群
|
3月前
|
弹性计算 人工智能 监控
ECS如何构建弹性高可用|开发者分享会
本期内容主要分享阿里云ECS构建弹性高可用的应用,即弹性伸缩(简称ESS),是指根据业务需求和策略自动调整计算能力(即实例数量)的服务。全文围绕ECS构建弹性高可用应用的挑战、构建弹性高可用应用最佳实践以及用户案例分享这3个主题进行讲解。
|
3月前
|
存储 关系型数据库 分布式数据库
在PolarDB中,集群地址对应一个代理服务器,主地址也是对应一个代理服务器吗?
在PolarDB中,集群地址对应一个代理服务器,主地址也是对应一个代理服务器吗?
32 0
|
4月前
|
存储 Java 网络安全
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
50 0
|
6月前
|
监控 应用服务中间件 nginx
服务器端集群搭建、下载站点、用户认证模块
Nginx实现服务器端集群搭建 Nginx与Tomcat部署 Nginx在高并发场景和处理静态资源是非常高性能的,但是在实际项目中除了静态资源还有就是后台业务代码模块,一般后台业务都会被部署在Tomcat,weblogic或者是websphere等web服务器上。那么如何使用Nginx接收用户的请求并把请求转发到后台web服务器? 步骤分析: 1.准备Tomcat环境,并在Tomcat上部署一个web项目 2.准备Nginx环境,使用Nginx接收请求,并把请求分发到Tomat上 1 2 环境准备(Tomcat) 浏览器访问: http://192.168.200.146:8080/
75 0
|
6月前
|
弹性计算 应用服务中间件 网络安全
企业级ECS集群构建实践
本实验向您介绍了如何使用ROS模板来创建并部署一个Linux+PHP+MYSQL的应用环境,其中创建的云资源包括基础网络资源VPC和VSwitch、基础弹性计算资源ECS,并通过传统负载均衡CLB提供应用的高可用能力。
企业级ECS集群构建实践
|
7月前
|
存储 分布式计算 资源调度
搭建Flink集群、集群HA高可用以及配置历史服务器
本文介绍了如何搭建一个Flink集群、Flink集群HA高可用,并配置历史服务器以记录Job任务执行的详细信息和状态。
193 1

热门文章

最新文章