MYSQL 高可用性测试
- 概述
- 集群现有MySQL HA
现有HA架构下,主备metastore指向同一个MySQL,备用MySQL为只读状态,实时同步主MySQL。当主节点发生故障,需手动将MySQL切换状态。但是当主节点突然故障,由于无法保证备用MySQL在故障瞬间与主MySQL的状态完全一致,该架构存在一定缺陷。
- 新的MySQL架构概述
新的MySQL高可用方案采用磁盘阵列存储MySQL数据,共享盘采用raid5阵列,独立在主备节点之外。备用MySQL不与主MySQL实时同步,只是与主MySQL拥有相同的数据盘目录。当主节点失效,直接启用备用节点MySQL。
- 环境准备
测试环境采用虚拟机的TDH集群,节点信息如下:
IP | hostname |
192.168.100.107 | lbtest1 |
192.168.100.108 | lbtest2 |
192.168.100.109 | lbtest3 |
192.168.100.110 | lbtest4 |
用NFS共享磁盘代替磁盘阵列存储MySQL数据。
首先要保证集群状态正常。
其中lbtest1是主MySQL节点,lbtest2是备MySQL节点。
建一张测试表插入几条数据
- 测试环境准备
- 安装NFS
yum install nfs-utils portmap
- 配置 NFS
- 创建NFS共享文件夹并修改权限
这里把共享文件夹放在lbtest3节点
[root@lbtest3 ~]# mkdir /mnt/disk1/MySQLnfs
[root@lbtest3 ~]# chown -R MySQL:MySQL /mnt/disk1/MySQLnfs
- 修改配置文件
让另外MySQL节点可以远程共享lbtest3的磁盘,在配置文件里写上另外2个MySQL节点的IP和共享的目录
vim /etc/exports
添加:
/mnt/disk1/MySQLnfs 192.168.100.107(insecure,rw,async,no_root_squash)
/mnt/disk1/MySQLnfs 192.168.100.108(insecure,rw,async,no_root_squash)
执行如下命令让配置生效:
exportfs -rv
- 客户端配置
- 创建数据文件夹
登陆主MySQL节点192.168.100.107,创建一个共享盘的远程连接目录:
[root@lbtest1 ~]# mkdir -p /mnt/disk1/MySQL1
- 挂载相应文件夹
首先打开磁盘配置文件
vim /etc/fstab
添加:
192.168.100.109:/mnt/disk1/MySQLnfs /mnt/disk1/MySQL1 nfs defaults 0 0
挂载:
[root@lbtest1 ~]# mount -a
如果长时间没有反应 ,看一下NFS服务有没有器起
如果没有启动,用如下命令启动下:
[root@lbtest1 ~]# service nfs start
记得所有节点都要起来。
- 另一个节点做同样操作
192.168.100.108
[root@lbtest2 ~]# mkdir -p /mnt/disk1/MySQL2/data
vim /etc/fstab
添加:
192.168.100.109:/mnt/disk1/MySQLnfs /mnt/disk1/MySQL2nfs defaults 0 0
挂载:
mount -a
- MySQL 配置
- Inceptor 服务停掉
首先保证停止之前inceptor是正常的
- dump MySQL中的数据
在MySQL的主节点执行下面的命令:
[root@lbtest1 ~]# MySQLdump -uroot --all-databases > /tmp/all.sql
- 创建MySQL配置目录
由于是共享盘,所以以下操作只要在某一个MySQL节点执行就行,注意需要修改权限:
[root@lbtest1 tmp]# mkdir /mnt/disk1/MySQL1/data/data
[root@lbtest1 tmp]# mkdir /mnt/disk1/MySQL1/data/tmp
[root@lbtest1 disk1]# chown -R MySQL:MySQL MySQL1
- 修改配置文件配置
分别修改2个MySQL节点的配置文件把数据目录和临时文件目录改为之前创建的文件夹,首先打开配置文件
vim /etc/my.cnf
将如下图
改为
datadir = /mnt/disk1/MySQL1/data/data
log-bin = MySQL-bin
tmpdir = /mnt/disk1/MySQL1/data/tmp
注意:原备用MySQL会有read_only=1这行,需要删除或者注释这一行,如下图
然后重启MySQL:
[root@lbtest1 disk1]# /etc/init.d/MySQLd start
- 同步数据
登陆到主的MySQL 执行命令:
MySQL> source /tmp/all.sql;
- 启动inceptor
启动inceptor,并登陆beeline,查询环境准备时建的那张表是否可以查询。
- 切换测试
- 验证主节点
- 建测试表
如果能建成功 证明集群inceptor正常
- 验证MySQL
在MySQL中查询刚刚建立的表,能够查询证明MySQL正常
- 验证备用节点效果
- 停止主节点
首先停止主MySQL以及该节点的相关服务,模拟节点故障。
- 修改集群配置文件
修改每个节点/etc/inceptorsql1/conf/hive-site.xml文件,将如下图的2个配置参数的MySQL从原来的主节点改为备用节点主机名:
- 重启备用节点
重启备用节点的MySQL及节点相关服务。
- 验证备用节点效果
登陆incptor,查看测试表是否可以查询。
MySQL高可用性调整方案
- 方案概述
计划将数仓数湖的MySQL迁移导zk节点中端服务器,并利用一块共享磁盘阵列存储MySQL数据,多个MySQL节点,实现MySQL高可用性。
需要共享磁盘阵列空间共200G,采用raid5保证数据安全,独立与MySQL节点使用光纤连接。数据湖与数仓集群各识别100G独立的存储空间。
- 方案架构
- MySQL节点分布
数据湖
ip | 主机名 | 服务 | 当前状态 |
10.1.203.41 | cpbd-core-zk1 | zk, MySQL | 有zk,无MySQL |
10.1.203.42 | cpbd-core-zk2 | zk, MySQL | 有zk,无MySQL |
10.1.203.43 | cpbd-core-zk3 | zk, MySQL | 有zk,无MySQL |
数仓
ip | 主机名 | 服务 | 当前状态 |
10.1.204.27 | cpbd-dw-zk1 | zk, MySQL | 有zk,无MySQL |
10.1.204.105 | cpbd-dw-zk2 | zk, MySQL | 无zk,无MySQL |
10.1.204.106 | cpbd-dw-zk3 | zk, MySQL | 无zk,无MySQL |
- MySQL高可用性架构图
新的MySQL高可用方案采用磁盘阵列存储MySQL数据,共享盘采用raid5阵列,独立在主备节点之外。备用MySQL不与主MySQL实时同步,只是与主MySQL拥有相同的数据盘目录。当主节点失效,直接启用备用节点MySQL。MySQL节点与磁盘整列之间使用光纤连接,能够识别100G的独立存储空间。
- MySQL高可用性部署步骤
以数仓为例介绍MySQL高可用部署的操作步骤。
- 集群环境简介
数仓集群现有100个节点,其中涉及到本次操作的主要角色分布如下:
角色 | 主机名 | IP |
Metastore、MySQL | cpbd-dw-dn005, cpbd-dw-dn015 | 10.1.204.9,10.1.204.19 |
Inceptor server | cpbd-dw-dn[005-014], cpbd-dw-dn028 | 10.1.204.[9-18],10.1.204.35 |
Datanode | cpbd-dw-dn[001-095] | 10.1.204.[5-24,28-38,40-48,50-104] |
- 集群MySQL高可用性总体规划
计划增加两个中端服务器cpbd-dw-zk2、cpbd-dw-zk3,与另外一台中端服务器zk1组成3台MySQL节点服务器,以识别到的磁盘阵列作为MySQL数据的存储目录。
- 集群MySQL高可用配置步骤
- 配置共享磁盘阵列
共享磁盘空间已经划分完毕,在三个MySQL节点服务器上分别创建VG、LV,只有主节点的VG处于激活和正常读写状态,另外两个备节点的VG处于去激活状态。
共享磁盘VG配置过程如下:
- zk1节点
创建pv、vg和lv
# pvcreate /dev/map01
# vgcreate vgmysql /dev/map01
# lvcreate -L 100G -n lvmysql vgmysql
将文件系统umount
# umount /mnt/mysql
将LV和VG 去激活
# lvchange -an /dev/vgmysql/lvmysql
# vgchange -an vgmysql
导出VG map信息
# vgexport vgmysql
- zk2节点:
将zk1上导出的VG map信息拷贝至zk2节点
导入VG
# vgimport vgmysql
激活VG,MOUNT 文件系统:
# vgchange -ay vgmysql
# mount /dev/vgmysql/lvmysql /hadoop/mysql
3. zk3节点操作与zk2相同
- 安装MySQL
在三个zk节点安装与集群版本对应的MySQL服务。
- 配置MySQL
打开MySQL配置文件,将对应的数据存储路径和临时文件路径修改成指向共享磁盘路径。
修改完后重启MySQL。
- 停止集群Inceptor服务
首先保证停止之前inceptor是正常的。
- 导出并同步MySQL数据
登陆主MySQL节点使用命令:MySQLdump -uroot --all-databases > /tmp/all.sql
导出MySQL元数据,并将元数据拷贝到新的MySQL主节点。
登陆新的主MySQL节点,登陆MySQL,使用命令:
MySQL> source /tmp/all.sql;
同步MySQL的数据。
- 配置hiveuser用户
GRANT ALL PRIVILEGES ON *.* TO 'hiveuser'@'cpbd-dw-zk2' IDENTIFIED BY 'password';
- 修改inceptor配置文件
修改相关节点的hive-site.xml文件,将下图中的MySQL连接的主机名改为新的MySQL节点的主机名。
- 重启相关服务
重启inceptor,重启MySQL。
- 切换操作步骤
- 停止主MySQL
设备故障等情况下,停止主MySQL,或者主MySQL服务无法启动。
- 修改Inceptor配置文件
将Inceptor服务停止,修改/etc/inceptorsql1/conf/hive-site.xml l配置文件,将MySQL连接像3.3.3.4节一样,将原主MySQL的节点主机名改为备用节点MySQL的主机名。
- 重启相关服务
重启MySQL,重启Inceptor。
MYSQL高可用性方案及硬件资源需求
- 方案概述
计划将数仓数湖的mysql迁移导zk节点中端服务器,并利用一块共享磁盘阵列存储mysql数据,多个mysql节点,实现mysql高可用性。
共享磁盘阵列空间200G,采用raid5保证数据安全,独立与mysql节点使用光纤连接。
- 方案架构
2.1 mysql节点分布
数湖
ip | 主机名 | 服务 | 当前状态 |
10.1.203.41 | cpbd-core-zk1 | Zk,mysql | 有zk,无mysql |
10.1.203.42 | cpbd-core-zk2 | Zk,mysql | 有zk,无mysql |
10.1.203.43 | cpbd-core-zk3 | Zk,mysql | 有zk,无mysql |
数仓
ip | 主机名 | 服务 | 当前状态 |
10.1.204.27 | cpbd-dw-zk1 | Zk,mysql | 有zk,无mysql |
10.1.204.39 | cpbd-dw-zk2 | Zk,mysql | 无zk,无mysql |
10.1.204.49 | cpbd-dw-zk3 | Zk,mysql | 无zk,无mysql |
MySQL服务部署的节点都选择中端服务器,部署在TDH集群的管理节点(zk)上。以上节点需要有光线连到磁盘阵列,并且服务器能够识别到存储空间。
其中,数仓集群目前有一个独立的zk节点是中端服务器,建议新增两个中端服务器部署MySQL。
2.2 mysqlHA架构图
新的MySQL高可用方案采用磁盘阵列存储MySQL数据,共享盘采用raid5阵列,独立在主备节点之外。备用MySQL不与主MySQL实时同步,只是与主MySQL拥有相同的数据盘目录。当主节点失效,直接启用备用节点MySQL。MySQL节点与磁盘整列之间使用光纤连接。