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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

什么是高可用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



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
Kubernetes 安全 Docker
在 K8s 集群中创建 DERP 服务器
在 K8s 集群中创建 DERP 服务器
|
15天前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
39 2
|
2月前
|
SQL 弹性计算 资源调度
云服务器 ECS产品使用问题之bin/spark-sql --master yarn如何进行集群模式运行
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
2月前
|
NoSQL 关系型数据库 MySQL
多机部署:打造内网服务器集群
在多机部署教程中,了解如何配置分布式应用如Laravel以使用Redis同步用户状态。关键步骤包括:修改MySQL的`bind-address`至内网IP,重启服务;同样修改Redis的`bind`,重启服务;以及调整Elasticsearch的`network.host`和`discovery.seed_hosts`,并重启。通过这些步骤,确保服务间能内网通信,实现多服务器状态同步。
66 2
|
3月前
|
Linux 网络安全
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
|
4月前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
68 1
|
4月前
|
SQL 弹性计算 分布式计算
实时计算 Flink版产品使用合集之如果产品是基于ak的,可以提交sql任务到ecs自建hadoop集群吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
177 1
|
4月前
|
Java 网络安全 Apache
搭建Zookeeper集群:三台服务器,一场分布式之舞
搭建Zookeeper集群:三台服务器,一场分布式之舞
438 0

热门文章

最新文章