DRBD+Heartbeat+MySQL高可用

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

一、规划

系统              CentOS 64bit

DRBD版本          9.0.0

Heartbeat版本     3.0.6

MySQL版本         5.6.27

DRBD磁盘          /dev/sdb1 

主机名(IP)        node1(192.168.10.132)   

                  node2(192.168.10.133)                 

注:已关闭SeLinux和Firewalld。


二、安装

Heartbeat安装:http://wangzhijian.blog.51cto.com/6427016/1708694

DRBD安装:http://wangzhijian.blog.51cto.com/6427016/1710926

MySQL安装:

1
2
3
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm     ##安装MySQL源
# yum -y install mysql-server  mysql-devel       ##安装MySQL


三、配置互信

HA-01:

1
2
ssh -keygen -t rsa -f ~/. ssh /id_rsa  -P  ''
ssh -copy- id  -i . ssh /id_rsa .pub root@192.168.10.133

HA-02:

1
2
ssh -keygen -t rsa -f ~/. ssh /id_rsa  -P  ''
ssh -copy- id  -i . ssh /id_rsa .pub root@192.168.10.132


四、配置


①配置DRBD


a.主配置文件drbd.conf

1
2
3
4
# cat /etc/drbd.conf
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include  "drbd.d/global_common.conf" ;
include  "drbd.d/*.res" ;


b.配置global_common.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# cat /etc/drbd.d/global_common.conf|grep -v "#" 
global {
usage-count no;        ##是否参加drbd的使用者统计,默认此选项为YES
}
common {
handlers {
}
startup {
}
options {
}
disk {
}
net {
}
}


c.新建res资源配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# vi /etc/drbd.d/drbd.res                    ##新建一个名为drbd的res资源
resource r1 {                                 ##定义资源组名称为r1
          net {
                cram-hmac-alg sha1;              ##使用sha1加密
                shared-secret  "123456" ;             ##生成共享密钥
          }
          volume 1 {                           ##定义卷组
                device     /dev/drbd1 ;         ##逻辑设备路径(建立块设备)
                disk       /dev/sdb1 ;         ##物理设备路径(用于复制的分区)
                meta-disk internal;         ##meta data信息存放的方式,该处为内部存储,
                                             即和真实数据放在一起存储
         
          on node1 {                     ##on开头,后面是主机名称(需与uname -n相同)
                node- id     0;
                address    192.168.10.132:7000;       ##设置drbd监听地址和端口
           }
           on node2 {
                node- id     1;
                address    192.168.10.133:7000;
           }
           connection {
                host node1  port 7000;
                host node2  port 7000;
                net {
                        protocol C; ##使用drbd的第三种同步协议,表示收到对方主机写入确认后,则认为写入完成
                }
           }
}


d.挂载新磁盘

# fdisk /dev/sdb 

-----> n

-----> 1

-----> 默认

-----> +300M -----> w



f.创建设备元数据并格式化磁盘

1
2
3
4
5
6
# dd if=/dev/zero of=/dev/sdb1 bs=1M count=10       ##用指定大小的块拷贝一个文件
# drbdadm -c /etc/drbd.conf create-md all           ##创建设备元数据
# mkfs.ext4 /dev/drbd1                              ##格式化虚拟磁盘
# mkdir -pv /data/mysql 
# chown -R mysql.mysql /data/mysql/
# ln -s /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/    ##建立drbddisk脚本至heartbeat的/etc/ha.d/resource.d/的软链接


②Heartbeat配置

     Heartbeat的配置主要涉及到ha.cf、haresources、authkeys这三个文件。其中ha.cf是主配置文件,haresource用来配置要让Heartbeat托管的服务,authkey是用来指定Heartbeat的认证方式。


a.配置ha.cf

1
2
3
4
5
6
7
8
9
10
11
# cat /usr/local/heartbeat/etc/ha.d/ha.cf  |grep ^[^#]                
logfile   /var/log/ha-log                        ##日志文件记录
logfacility   local0
keepalive  2                          ##设定心跳(监测)时间时间为2秒
deadtime  30             ##指定若备用节点在30秒内未收到主节点心跳信号,则接管主服务器资源  warntime  10                   ##指定心跳延迟的时间
initdead  120           ##系统启动或重启后预留的忽略时间段,取值至少为deadtime的两倍      udpport  694                       ##广播/单播通讯使用的Udp端口
ucast  eno16777736  192.168.10.133  ##采用网卡eno16777736的udp单播来组织心跳,后面为对端IP
auto_failback  on                         ##定义当主节点恢复后,是否将服务自动切回
node    node1                              ##节点名称,与uname -n显示一致
node    node2
ping   192.168.10.1


b.配置haresources

1
2
3
# cp resource-agents-3.9.6/heartbeat/mysql /usr/local/heartbeat/etc/ha.d/resource.d/   ##复制MySQL脚本至heartbeat的/etc/ha.d/resource.d/下
# cat /usr/local/heartbeat/etc/ha.d/haresources |grep ^[^#]
node1  IPaddr::192.168.10.222 /24/eno16777736  drbddisk::r1 Filesystem:: /dev/drbd1 :: /data ::ext4  mysql

node1是HA集群的主节点,IPaddr为heartbeat自带的执行脚本,heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 192.168.10.222/24 start的操作,即虚拟一个子网掩码为255.255.255.0,IP为192.168.10.222的地址,此IP为heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口,接着,指定使用的DRBD的资源,然后,Heartbeat将执行共享磁盘分区的挂载操 作,"Filesystem::/dev/sdb1::/data::ext4"相当于在命令行下执行mount操作,即"mount -t ext4 /dev/sdb1 /data",最后依次启动MySQL服务。


c.配置authkeys

1
2
3
# grep -v "#" /usr/local/heartbeat/etc/ha.d/authkeys 
auth 2
2 sha1 HI!

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


d.复制配置文件至node2

1
# scp /usr/local/heartbeat/etc/ha.d/* root@192.168.10.133:/usr/local/heartbeat/etc/ha.d/

注:需更改ha.cf的ucast中的IP为node1的IP(该处为192.168.10.132)。


③配置MySQL 

1
2
# vi /etc/my.cnf
datadir= /data/mysql                  ##修改MySQL的数据存储目录


五、测试

1
2
3
4
5
# drbdadm up r1                                    ##启用该资源
# drbd-overview 
  1:r1 /1   Connected(2*) Secondary(2*) UpToDa /UpToDa 
# systemctl start mysql
# systemctl start heartbeat

wKioL1ZAJ1XATr0tAABnJGHoKAU755.png

已实现自动挂载


②故障切换测试

node1:

1
# systemctl stop heartbeat

node2:

wKioL1ZALsCDQab5AABJUoscj8o546.png

wKiom1ZAL8KxJ5P9AAAv2BPV6ho492.png

已实现正常切换

本文转自  结束的伤感  51CTO博客,原文链接:http://blog.51cto.com/wangzhijian/1713052
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
28天前
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
15 0
|
28天前
|
缓存 关系型数据库 MySQL
如何实现mysql高可用集群
如何实现mysql高可用集群
14 0
|
1月前
|
安全 关系型数据库 MySQL
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
|
3月前
|
运维 容灾 关系型数据库
介绍几种 MySQL 官方高可用方案
MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。
535 3
介绍几种 MySQL 官方高可用方案
|
1月前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
66 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
308 2
|
4月前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
162 9
|
4月前
|
Kubernetes 关系型数据库 MySQL
MySQL在Kubernetes上的高可用实现
【5月更文挑战第1天】
457 5
|
4月前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型

热门文章

最新文章