MYSQL 高可用性测试

  1. 概述
  1. 集群现有MySQL HA

Mysql 共享存储数据库架构 mysql共享存储高可用_linux

   

 

现有HA架构下,主备metastore指向同一个MySQL,备用MySQL为只读状态,实时同步主MySQL。当主节点发生故障,需手动将MySQL切换状态。但是当主节点突然故障,由于无法保证备用MySQL在故障瞬间与主MySQL的状态完全一致,该架构存在一定缺陷。

  1. 新的MySQL架构概述

Mysql 共享存储数据库架构 mysql共享存储高可用_MySQL_02

 

   新的MySQL高可用方案采用磁盘阵列存储MySQL数据,共享盘采用raid5阵列,独立在主备节点之外。备用MySQL不与主MySQL实时同步,只是与主MySQL拥有相同的数据盘目录。当主节点失效,直接启用备用节点MySQL。

  1. 环境准备

测试环境采用虚拟机的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数据。

    首先要保证集群状态正常。

Mysql 共享存储数据库架构 mysql共享存储高可用_linux_03

Mysql 共享存储数据库架构 mysql共享存储高可用_linux_04

其中lbtest1是主MySQL节点,lbtest2是备MySQL节点。

建一张测试表插入几条数据

Mysql 共享存储数据库架构 mysql共享存储高可用_linux_05

  1. 测试环境准备
  1. 安装NFS

yum install nfs-utils portmap

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_06

  1. 配置 NFS
  2. 创建NFS共享文件夹并修改权限

这里把共享文件夹放在lbtest3节点

 [root@lbtest3 ~]# mkdir /mnt/disk1/MySQLnfs

 [root@lbtest3 ~]# chown -R MySQL:MySQL /mnt/disk1/MySQLnfs

  1. 修改配置文件

让另外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)

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_07

执行如下命令让配置生效:

exportfs -rv

Mysql 共享存储数据库架构 mysql共享存储高可用_linux_08

 

  1. 客户端配置
  1. 创建数据文件夹

登陆主MySQL节点192.168.100.107,创建一个共享盘的远程连接目录:

[root@lbtest1 ~]# mkdir -p /mnt/disk1/MySQL1

  1. 挂载相应文件夹

首先打开磁盘配置文件

vim /etc/fstab

添加:

192.168.100.109:/mnt/disk1/MySQLnfs /mnt/disk1/MySQL1 nfs defaults 0 0

Mysql 共享存储数据库架构 mysql共享存储高可用_MySQL_09

 

挂载:

[root@lbtest1 ~]# mount -a

如果长时间没有反应 ,看一下NFS服务有没有器起

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_10

 

如果没有启动,用如下命令启动下:

[root@lbtest1 ~]# service nfs start

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_11

 

记得所有节点都要起来。

  1. 另一个节点做同样操作

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

  1. MySQL 配置
  1. Inceptor 服务停掉

首先保证停止之前inceptor是正常的

Mysql 共享存储数据库架构 mysql共享存储高可用_Mysql 共享存储数据库架构_12

 

  1. dump MySQL中的数据

在MySQL的主节点执行下面的命令:

[root@lbtest1 ~]# MySQLdump -uroot  --all-databases > /tmp/all.sql

Mysql 共享存储数据库架构 mysql共享存储高可用_Mysql 共享存储数据库架构_13

 

  1. 创建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

  1. 修改配置文件配置

分别修改2个MySQL节点的配置文件把数据目录和临时文件目录改为之前创建的文件夹,首先打开配置文件

vim /etc/my.cnf

将如下图

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_14

改为

Mysql 共享存储数据库架构 mysql共享存储高可用_linux_15

datadir   = /mnt/disk1/MySQL1/data/data

log-bin   = MySQL-bin

tmpdir    = /mnt/disk1/MySQL1/data/tmp

注意:原备用MySQL会有read_only=1这行,需要删除或者注释这一行,如下图

Mysql 共享存储数据库架构 mysql共享存储高可用_mysql_16

 

然后重启MySQL:

[root@lbtest1 disk1]# /etc/init.d/MySQLd start

Mysql 共享存储数据库架构 mysql共享存储高可用_mysql_17

 

  1. 同步数据

登陆到主的MySQL 执行命令:

MySQL> source /tmp/all.sql;

Mysql 共享存储数据库架构 mysql共享存储高可用_linux_18

 

  1. 启动inceptor

  启动inceptor,并登陆beeline,查询环境准备时建的那张表是否可以查询。

  1. 切换测试
  1. 验证主节点
  1. 建测试表

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_19

 

如果能建成功 证明集群inceptor正常

  1. 验证MySQL

在MySQL中查询刚刚建立的表,能够查询证明MySQL正常

Mysql 共享存储数据库架构 mysql共享存储高可用_MySQL_20

 

  1. 验证备用节点效果
  1. 停止主节点

  首先停止主MySQL以及该节点的相关服务,模拟节点故障。

  1. 修改集群配置文件

修改每个节点/etc/inceptorsql1/conf/hive-site.xml文件,将如下图的2个配置参数的MySQL从原来的主节点改为备用节点主机名:

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_21

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_22

 

  1. 重启备用节点

重启备用节点的MySQL及节点相关服务。

  1. 验证备用节点效果

    登陆incptor,查看测试表是否可以查询。

Mysql 共享存储数据库架构 mysql共享存储高可用_MySQL_23

 

MySQL高可用性调整方案

  • 方案概述

计划将数仓数湖的MySQL迁移导zk节点中端服务器,并利用一块共享磁盘阵列存储MySQL数据,多个MySQL节点,实现MySQL高可用性。

需要共享磁盘阵列空间共200G,采用raid5保证数据安全,独立与MySQL节点使用光纤连接。数据湖与数仓集群各识别100G独立的存储空间。

  • 方案架构
  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.105

cpbd-dw-zk2

zk, MySQL

无zk,无MySQL

10.1.204.106

cpbd-dw-zk3

zk, MySQL

无zk,无MySQL

  1. MySQL高可用性架构图

Mysql 共享存储数据库架构 mysql共享存储高可用_数据库_24

 

新的MySQL高可用方案采用磁盘阵列存储MySQL数据,共享盘采用raid5阵列,独立在主备节点之外。备用MySQL不与主MySQL实时同步,只是与主MySQL拥有相同的数据盘目录。当主节点失效,直接启用备用节点MySQL。MySQL节点与磁盘整列之间使用光纤连接,能够识别100G的独立存储空间。

  • MySQL高可用性部署步骤

以数仓为例介绍MySQL高可用部署的操作步骤。

  1. 集群环境简介

数仓集群现有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]

  1. 集群MySQL高可用性总体规划

计划增加两个中端服务器cpbd-dw-zk2、cpbd-dw-zk3,与另外一台中端服务器zk1组成3台MySQL节点服务器,以识别到的磁盘阵列作为MySQL数据的存储目录。

  1. 集群MySQL高可用配置步骤
  2. 配置共享磁盘阵列

共享磁盘空间已经划分完毕,在三个MySQL节点服务器上分别创建VG、LV,只有主节点的VG处于激活和正常读写状态,另外两个备节点的VG处于去激活状态。

共享磁盘VG配置过程如下:

  1. 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

  1. zk2节点:

将zk1上导出的VG map信息拷贝至zk2节点

导入VG

# vgimport vgmysql

激活VG,MOUNT 文件系统:

# vgchange -ay vgmysql

# mount /dev/vgmysql/lvmysql /hadoop/mysql

3. zk3节点操作与zk2相同

  1. 安装MySQL

在三个zk节点安装与集群版本对应的MySQL服务。

  1. 配置MySQL

打开MySQL配置文件,将对应的数据存储路径和临时文件路径修改成指向共享磁盘路径。

Mysql 共享存储数据库架构 mysql共享存储高可用_linux_25

修改完后重启MySQL。

  1. 停止集群Inceptor服务

首先保证停止之前inceptor是正常的。

  1. 导出并同步MySQL数据

登陆主MySQL节点使用命令:MySQLdump -uroot  --all-databases > /tmp/all.sql

导出MySQL元数据,并将元数据拷贝到新的MySQL主节点。

登陆新的主MySQL节点,登陆MySQL,使用命令:

MySQL> source /tmp/all.sql;

同步MySQL的数据。

Mysql 共享存储数据库架构 mysql共享存储高可用_Mysql 共享存储数据库架构_26

  1. 配置hiveuser用户

GRANT ALL PRIVILEGES ON *.* TO 'hiveuser'@'cpbd-dw-zk2' IDENTIFIED BY 'password';

  1. 修改inceptor配置文件

修改相关节点的hive-site.xml文件,将下图中的MySQL连接的主机名改为新的MySQL节点的主机名。

Mysql 共享存储数据库架构 mysql共享存储高可用_MySQL_27

Mysql 共享存储数据库架构 mysql共享存储高可用_mysql_28

 

  1. 重启相关服务

重启inceptor,重启MySQL。

  • 切换操作步骤
  1. 停止主MySQL

设备故障等情况下,停止主MySQL,或者主MySQL服务无法启动。

  1. 修改Inceptor配置文件

将Inceptor服务停止,修改/etc/inceptorsql1/conf/hive-site.xml l配置文件,将MySQL连接像3.3.3.4节一样,将原主MySQL的节点主机名改为备用节点MySQL的主机名。

  1. 重启相关服务

重启MySQL,重启Inceptor。

MYSQL高可用性方案及硬件资源需求

  1. 方案概述

   计划将数仓数湖的mysql迁移导zk节点中端服务器,并利用一块共享磁盘阵列存储mysql数据,多个mysql节点,实现mysql高可用性。

   共享磁盘阵列空间200G,采用raid5保证数据安全,独立与mysql节点使用光纤连接。

  1. 方案架构

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共享存储高可用_Mysql 共享存储数据库架构_29

      

新的MySQL高可用方案采用磁盘阵列存储MySQL数据,共享盘采用raid5阵列,独立在主备节点之外。备用MySQL不与主MySQL实时同步,只是与主MySQL拥有相同的数据盘目录。当主节点失效,直接启用备用节点MySQL。MySQL节点与磁盘整列之间使用光纤连接。