【转】HeartBeat搭建MySQL数据库双主热备高可用环境

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 地址:http://www.mysqlops.com/2011/10/18/heartbeat-mysql.html HeartBeat搭建MySQL数据库双主热备高可用环境 Posted on 2011年10月18日 by steven · 2 Comments 1. 简介 HeartBeat用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
地址:http://www.mysqlops.com/2011/10/18/heartbeat-mysql.html


HeartBeat搭建MySQL数据库双主热备高可用环境

1. 简介
HeartBeat用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
本文所提到试验环境为:
[root@alsme_probe3 tmp]#  cat /etc/redhat-release
Red Hat Enterprise Linux AS release 4 (Nahant Update 6)
heartbeat 2.1.3
2.安装
2.1. 准备

本试验环境共有2个主机,其IP分别为:
主机名             IP地址
alssme_probe3    172.18.158.23
alssme_probe4    172.18.158.24
如果/etc/hosts中没有配置的话, 则需要先配置/etc/hosts文件
2.2 创建用户和用户组
heartbeat需要haclient用户组和hacluster用户。
两个节点做同样的操作,并保证haclient和hacluster的ID一样。
groupadd haclient -g 1001
useradd -g haclient hacluster -u 1002
2.3. 安装
可以直接下载rpm包,或者自己下载源码包进行编译,在这里,我采用自己编译源码的方式。
安装heartbeat前, 需要先安装libnet包。
tar zxvf heartbeat-2.1.3.tar.gz
rpm -ivh libnet-1.1.2.1-2.2.el4.rf.rpm
[root@alsme_probe3 tmp]# cd heartbeat-2.1.3
[root@alsme_probe3 tmp]# ./configure
[root@alsme_probe3 tmp]# make
[root@alsme_probe3 tmp]# make install
同样地,在另一个主机上也是这么安装。
libnet包可以在 http://rpmfind.net/linux/rpm2html/search.php 这里搜索到。
3. 配置
heartbeat有三个配置文件:
  — ha.cf
  — authkyes
  — haresources
这些文件在每台机器都要保持一致.下面将一一介绍.
 cp /usr/local/share/doc/heartbeat-2.1.3/ha.cf /usr/local/etc/ha.d
 cp /usr/local/share/doc/heartbeat-2.1.3/haresources /usr/local/etc/ha.d
 cp /usr/local/share/doc/heartbeat-2.1.3/authkeys /usr/local/etc/ha.d
3.1 编辑hertbeat主配置文件ha.cf,2个主机上的内容一样。
以下是需要打开的配置,ha.cf里面有详细说明。
[root@alsme_probe3 tmp]# vi /usr/local/etc/ha.d/ha.cf
## ha的日志文件记录位置。如没有该目录,则需要手动添加
logfile /var/log/ha-log   #File to write other messages to
logfacility local0       #这个是设置heartbeat的日志,这里是用的系统日志
##设定心跳(监测)时间时间为2秒
keepalive 2             #多长时间检测一次
warntime 5              #连续多长时间联系不上后开始警告提示
deadtime 20             #连续多长时间联系不上后认为对方挂掉了(单位是妙)
initdead 120            #这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)
#采用bond0的udp广播用来发送心跳信息
#bcast bond0
#采用网卡eth0的udp单播来通知心跳,ip应为对方IP,建议采用单播。当一个网段有多台这样cluster话,则一定要采用单播,否则每组cluster都会看到对方的节点,从而报错。
ucast eth0 172.18.57.154
##使用udp端口694 进行心跳监测
udpport 694
auto_failback off    #恢复正常后是否需要再自动切换回来,一般都设为off。
##节点1的HOSTNAME,必须要与 uname -n 指令得到的结果一致。
node alsme_probe3
##节点2的HOSTNAME
node alssme_probe4
##通过ping 网关来监测心跳是否正常
ping 172.18.158.254
hopfudge 1
deadping 5
#指定和heartbeat一起启动、关闭的进程
#respawn hacluster /usr/local/lib64/heartbeat/ipfail
#apiauth ipfail gid=haclient uid=hacluster
#是否采用v2 style模式,在三节点以上时一定要打开
#crm on
3.2 编辑双机互联验证文件:authkeys
[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/authkeys
auth 1
1 crc
[root@alsme_probe3 heartbeat-2.1.3]# chmod 600 /usr/local/etc/ha.d/authkeys
注意: authkeys的权限一定要是600.
3.3 编辑集群资源文件:haresources (切换时备机需要做的事情)
[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/haresources
alssme_probe3 IPaddr::172.18.158.111/24/bond0 mysql
#其中,172.18.158.111为VIP
如何配置,可以参见haresources,里面也有详细的说明。
有几个注意事项:
1).资源组的第一列是我们在ha.cf配置文件中的node之一,而且应该是当前准备作为primary节点的那一个node。
2).每一行代表一个资源组,如果一行写不下可以用” “换行
3).资源组启动顺序是从左往右,关闭的顺序是从右往左
4).脚本的参数通过::来分隔和传递
5).一个资源组里面不同资源之间以空格分隔
6).不同的资源组之间没有必然关系
7).每个资源都是一个角本,可以是在/etc/init.d目录下面的,也可以是/usr/local/etc/ha.d/resource.d目录下面的角本。这些角本必须要支持xxx start;xxx stop;模式。
8).关于service IP的资源设置格式详见haresources文件。
9).如果mysql是编译安装的话, 则需要修改/etc/init.d/mysql文件中的basedir和datadir两个参数
3.4 资源角本例子—drbd
下面是drbd的资源管理角本的例子:
[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/resource.d/drbd
#!/bin/sh
case “$1″ in
start)
#声明为drbd的primary节点
drbdadm primary db
#挂载文件系统
mount /dev/drbd0 /data
#启动相关服务
service mysql start
;;
stop)
#上面操作的反向
service mysql stop
umount /dev/drbd0 /data
drbdadm secondary db
;;esac
exit 0
我们测试的mysql是安装mysql时自带的,在/etc/init.d目录下面,它可以实现mysql的启动和关闭。
如果我们采用的是heartbeat+双master模式的话, 则不需要加上mysql资源组。
如果我们采用的是heartbeat+master/slave模式的话,则需要重新mysql角本,在start时将slave变成master。在stop时将master变成slave。
建议还是采用heartbeat+双master模式,这样将数据丢失降到最低。
4. 测试
测试切换不外乎以下几种:
1).手工调用heartbeat的节点切换脚本
2).拔掉网线,测试在primary节点的网络断开后的切换情况,通过测试,在拔掉网线后,当主节点发现无法和standby节点无法通信后,会在log中记录warn信息,如果延续时间达到在ha.cf中设定的时长后,会开始释放资源,standby节点发现无法和主节点通信一段时间(ha.cf设定)后,开始尝试启动资源并将自己active成primary节点。切换过程除ha.cf中设定的时长之外的时间段同样非常短。这里容易出现custer脑分裂的问题。如果采用双master的话,就不存在这个问题。
3). shutdown primary主机,测试是否能够正常切换。
4). 主节点机器掉电,是否能够正常切换。
第一种和第三种测试方法一定要测一下。
5.管理
启动和关闭heartbeat的方法:
# /etc/init.d/hearbeat start 或 service heartbeat start
# /etc/init.d/hearbeat stop  或 service heartbeat stop
….. 命令整理
6.其他
实际测试结果表明:如果采用myisam存储引擎,则在primary节点当掉的时候,总会丢失数据;而采用innodb存储引擎时,如果 primary节点本身没有程序往本机写数据的话,那么基本上不会发生数据丢失;而如果primary节点本身有程序在写数据,则在当机瞬间,本机上的程序可能还会写入部分数据,而如果是其他主机程序连接过来的话,基本上不会发生丢数据的情况。
建议:在drbd+hb的环境中,最好是采用innodb存储引擎,并且设置innodb_flush_log_at_trx_commit = 1,这使得几乎每个提交的事务都能记录在 ib_logfile* 中,在 secondary 节点上能得到恢复,减小损失。
heartbeat有两种模式,默认的模式只支持两个节点。如果cluster里面有2个以上节点的话,则需要采用cib模式,即v2 style:
1).把三个节点都加到ha.cf里,然后在ha.cf里加上”crm 1″
2).然后用/usr/local/lib64/heartbeat/haresources2cib.py 把原来的/usr/local/etc/ha.d/haresources 转换成 /usr/local/var/lib/heartbeat/crm/cib.xml.
“/usr/local/lib64/heartbeat/haresources2cib.py  /usr/local/etc/ha.d/haresources /usr/local/var/lib/heartbeat/crm/cib.xml”
3).把haresources清空
另外如果只起一个节点的话,则service IP地址需要2分钟才能生效。这个时间不知道是如何控制的。
heartbeat默认模式是没法监控资源的,也就是说其中某个资源要是crash掉了,也不会发生任何动作,它只有当它认为对方机器dead后才会发生动作。也就是机器crashed,网络断掉了之类。这显然没法达到我们的目标。
 为了达到我们的目标就要采用crm(cluster resource management)模式了。
首先,先按默认模式配置heartbeat(详见heartbeat新手上路)。
默认模式配置成功后,再按下面的步骤操作:
1)在ha.cf里面增加
    crm on
2)将haresources资源文件转换成cib.xml文件,2.1.3自带有转换脚本
   /usr/local/lib64/heartbeat/haresources2cib.py /usr/local/etc/ha.d/haresources
   输出文件在/usr/local/var/lib/heartbeat/crm/cib.xml
3)如果hacluster和haclient用户和用户组是在安装heartbeat之后创建的话,则需要执行下面命令修改权限
    修改heartbeat目录权限,可以用以下命令:
  find / -type d -name “heartbeat” -exec chown -R hacluster {} ;
  find / -type d -name “heartbeat” -exec chgrp -R haclient {} ;
4)在2.0的版本中ipfail与crm 模式有冲突,所以在ha.cf中不可打开ipfail。
5) cib.xml文件的修改
    如果在IPaddr中有下面两行,则删除:
    
    
     2.1.3版本生成的cib.xml文件中,mysql资源是ocf格式的,而它自带的mysql角本是无法启动mysql的,所以需要修改,有两种方法。在修改前先介绍一下ocf和lsb格式的区别:
LSB格式的角本必须支持status功能,必须能接收start,stop,status,三个参数;而如果是OCF格式,则必须支持start,stop,monitor三个参数.其中status和monitor参数是用来监控资源的,非常重要.
例如LSB风格的脚本,运行./mysql status时候,
返回值包含OK或则running则表示资源正常
返回值包含stopped或者No则表示资源不正常。
假如是OCF风格的脚本,运行./mysql monitor时候,
返回0表示资源是正常的,
返回7表示资源出现问题.
ocf格式的启动角本在/usr/lib/ocf/resource.d/heartbeat(也许你的机器上目录不是这个,可以搜索ocf来查找)
lsb格式的启动角本在/usr/lib/lsb/resource.d/heartbeat目录下。
两种修改方法
1.修改cib.xml,将mysql的ocf改成lsb。然后在/usr/lib/lsb/resource.d/heartbeat(如果该目录不存在,则手工创建,并将权限赋给hacluster:haclient)下面执行ln -s /etc/init.d/mysql mysql。
#  rm /usr/heartbeat/var/lib/heartbeat/crm/cib.xml.* -f
#  vi /usr/heartbeat/var/lib/heartbeat/crm/cib.xml
2.修改/usr/lib/ocf/resource.d/heartbeat下面的mysql的角本,使之能正常工作。或者将/etc/init.d/mysql拷过来,修改使它支持monitor操作
6) 然后启动heartbeat即可。Service heartbeat start.
7)如果mysql采用双master的话,则在stop资源后,记的将mysql手动起来。
Heartbeat CRM模式管理
1)查看所有资源
[root@alssme_probe3 sbin]# crm_resource -L
Resource Group: group_1
    IPaddr_172_18_158_111       (heartbeat::ocf:IPaddr)
    mysql_2     (lsb:mysql)
2)查看资源跑在哪个节点上
[root@alssme_probe3 sbin]# crm_resource -W -r mysql_2
resource mysql_2 is running on: alssme_probe3
4)启动/停止资源(cluster不会发生切换,手工停mysql,将会重新启动或者发生切换)
[root@alssme_probe4 crm]# crm_resource -r mysql_2 -p target_role -v started
 [root@alssme_probe3 sbin]# crm_resource -r mysql_2 -p target_role -v stopped
5)查看资源在cib.xml中的定义
[root@alssme_probe3 sbin]# crm_resource -x -r mysql_2
mysql_2 (lsb:mysql):    Started alssme_probe3
raw xml:
 
  
    
  
  
    
      
    
  
 
    即每60秒检测资源运行情况,如果发现资源不在,则尝试启动资源,如果30s后还未启动成功,则资源切换向另节点。时间可以修改( mysql一般建议采用这个时间值)。
6)将资源移向指定节点
  crm_resource -M -r mysql_2 -H alssme_probe4
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
运维 监控 关系型数据库
MySQL高可用方案:MHA与Galera Cluster对比
本文深入对比了MySQL高可用方案MHA与Galera Cluster的架构原理及适用场景。MHA适用于读写分离、集中写入的场景,具备高效写性能与简单运维优势;而Galera Cluster提供强一致性与多主写入能力,适合对数据一致性要求严格的业务。通过架构对比、性能分析及运维复杂度评估,帮助读者根据自身业务需求选择最合适的高可用方案。
|
2月前
|
SQL 监控 关系型数据库
MySQL主从复制:构建高可用架构
本文深入解析MySQL主从复制原理与实战配置,涵盖复制架构、监控管理、高可用设计及性能优化,助你构建企业级数据库高可用方案。
|
4月前
|
数据可视化 BI API
无缝对接云数据库:自定义报表生成工具在混合云环境下的部署指南
自定义报表生成工具通过拖拽设计、多数据源整合及自动化输出,帮助业务人员零代码创建个性化报表,解决传统工具灵活性不足、技术门槛高的问题。文章对比其与传统报表差异,列举行业应用场景(如财务、零售),并给出选型建议与主流工具(如FineReport、Power BI、板栗看板)的优劣势分析。
157 0
|
7月前
|
存储 关系型数据库 分布式数据库
|
6月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
407 11
|
7月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
303 28
|
7月前
|
Java 关系型数据库 MySQL
JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用
以上就是JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用的基本步骤。这些步骤可能会因为你的具体需求和环境而有所不同,但是基本的思路是一样的。希望这些信息能够帮助你更好地理解和使用这些工具。
229 17
|
7月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:高可用-无感切换篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,单位成本仅0.8元人民币。PolarDB通过VotingDisk实现秒级故障切换,RPO=0,提供高可用性。PolarDB还推出国产轻量版,兼具高性能与低成本,满足多样化需求。
|
9月前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
11月前
|
人工智能 容灾 关系型数据库
【AI应用启航workshop】构建高可用数据库、拥抱AI智能问数
12月25日(周三)14:00-16:30参与线上闭门会,阿里云诚邀您一同开启AI应用实践之旅!

推荐镜像

更多
下一篇
开通oss服务