GoldenGate在MySQL 集群中的应用
简介
MySQL Cluster 是由MySQL官方提供的一个集群平台,由一组计算机构成,适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
MySQL NDB cluster主要由三种类型的服务组成:
- NDB Management Server:管理服务器主要用于管理cluster中的其他类型节点(Data Node和SQL Node),通过它可以配置Node信息,启动和停止Node。
- SQL Node:在MySQL Cluster中,一个SQL Node就是一个使用NDB引擎的MySQL server进程,用于供外部应用提供集群数据的访问入口。
- Data Node:用于存储集群数据;系统会尽量将数据放在内存中。
MySQL Cluster集群 的架构如下:
针对MySQL集群,可以使用Oracle GoldenGate进行数据的实时抽取和投递。本文就MySQL Cluster的安装及GoldenGate抽取配置进行简单说明。
GoldenGate建议部署架构
以上架构中,OGG部署在NFS存储上,任何一个SQL节点可以启动OGG,并在本节点当掉之后,从其它的SQL节点也可以继续运行OGG,从而确保OGG在MySQL集群中的高可用。本测试中,为了简化步骤,直接将OGG部署到SQL Node1上,未实现OGG的高可用。
配置步骤简要说明
- 安装MySQL集群
- 安装管理节点
- 安装数据节点
- 安装sql节点
- OGG安装及配置
- 测试增量数据捕获
安装MySQL NDB Cluster
测试环境:
Mgm-server:mgt, 192.168.164.10
Sql node 1: sql1, 192.168.164.11
Sql node 2: sql2, 192.168.164.12
Data node1: data1, 192.168.164.21
Data node2: data2, 192.168.164.22
每个节点先关闭防火墙:
# systemctl disable firewalld
并根据上面的主机名和IP配置/etc/hosts。
下载MySQL NDB Cluster:https://dev.mysql.com/downloads/cluster/
所有节点使用同一份安装介质。
安装管理节点
# tar -xvf mysql-cluster-gpl-7.5.16-linux-glibc2.12-x86_64.tar.gz
# mv mysql-cluster-gpl-7.5.16-linux-glibc2.12-x86_64 /usr/local/mysql
# cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
# mkdir /data/mysql-cluster
# vi /data/mysql-cluster/config.ini
config.ini 的配置:
[ndbd default] NoOfReplicas=1 DataMemory=512M IndexMemory=18M [ndb_mgmd] Nodeid=1 HostName=mgt DataDir=/data/mysql-cluster [ndbd] Nodeid=11 HostName=data1 DataDir=/data/mysql/db_file [ndbd] Nodeid=12 HostName=data2 DataDir=/data/mysql/db_file [mysqld] Nodeid=21 HostName=sql1 [mysqld] Nodeid=22 HostName=sql2 |
初始化管理节点:
#/usr/local/bin/ndb_mgmd -f /data/mysql-cluster/config.ini –initial
安装Data node和SQL node
以下步骤data和sql节点操作一样。
新增mysql用户和组,并安装软件
#groupadd mysql
#useradd -g mysql -s /bin/false mysql
# tar -xvf mysql-cluster-gpl-7.5.16-linux-glibc2.12-x86_64.tar.gz
# mv mysql-cluster-gpl-7.5.16-linux-glibc2.12-x86_64 /usr/local/mysql
# chown -R mysql:mysql /usr/local/mysql
# mkdir -p /data/mysql/db_file
# mkdir -p /data/mysql/log
# mkdir -p /data/mysql/log_bin
# chown -R mysql:mysql /data/mysql
针对data node
编辑/etc/my.cnf
[mysqld]
Ndbcluster
ndb-connectstring=mgt
[mysql_cluster]
ndb-connectstring=mgt
启动进程
[root@data1 ~]# /usr/local/mysql/bin/ndbd
2020-04-14 21:48:09 [ndbd] INFO -- Angel connected to 'mgt:1186'
2020-04-14 21:48:09 [ndbd] INFO -- Angel allocated nodeid: 11
针对sql node
编辑/etc/my.cnf
[mysqld]
basedir=/usr/local/mysql/
datadir=/data/mysql/db_file
socket=/usr/local/mysql/mysql.sock
log-error=/data/mysql/log/sqlnode.err
ndbcluster
ndb-connectstring=mgt
default_storage_engine=ndbcluster # Define default Storage Engine used by MySQL
#以下参数用于OGG解析日志时使用
server-id=1
skip-slave-start=true
log-bin=/data/mysql/log_bin/log-bin.bin
log-bin-index=/data/mysql/log_bin/log-bin.index
binlog_format=ROW
[mysql_cluster]
ndb-connectstring=mgt
[client]
socket=/usr/local/mysql/mysql.sock
初始化 MySQL:
/usr/local/mysql/bin/mysqld –initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/db_file
注意:初始化数据库会在日志文件中出现数据库的root密码,后面登录mysql时会用到。
启动MySQL节点:
# /etc/init.d/mysql.server start
登录mysql并修改root的密码为”root”,(略过)
在管理节点上查看所有节点的状态
至此,MySQL NDB Cluster安装完成。
创建测试库表
mysql>create database testdb;
mysql>create table testdb.tb1(id int primary key, name varchar(50)) engine=ndb;
mysql>create table testdb.tb2(id int , name2 varchar(50)) engine=ndb;
OGG安装及配置
GoldenGate现在可以远程抽取和投递到MySQL数据库,理论上不需要安装到MySQL节点上。在本示例中,我们将OGG部署到sql node1上。
OGG安装
下载OGG for mysql :
https://www.oracle.com/middleware/technologies/goldengate-downloads.html
安装OGG
# unzip 191003_ggs_Linux_x64_MySQL_64bit.zip
# tar –xvf ggs_Linux_x64_MySQL_64bit.tar –C /data/share/ogg
# cd /data/share/ogg
[root@localhost ogg]# ./ggsci
GGSCI 1>create subdirs
GGSCI 2>dblogin sourcedb test@localhost:3306,userid root,password root
OGG配置
配置MGR进程:
GGSCI 3> edit param mgr
port 7809
配置extract进程:
GGSCI 4> add extract ex1,tranlog,begin now
GGSCI 5> add exttrail ./dirdat/es,extract ex1
GGSCI 5> edit param ex1
extract ex1
setenv(MYSQL_UNIX_PORT=/usr/local/mysql/mysql.sock)
sourcedb testdb,userid root,PASSWORD root
exttrail ./dirdat/es
tranlogoptions altlogdest /data/mysql/log_bin/log-bin.index
gettruncates
TABLE testdb.*;
增量数据捕获测试
在其中一个节点上操作数据
在OGG中查看捕获情况
可以看到,OGG可以顺利的捕获到MySQL集群中的增量数据。
小结
通过本文的验证,可以看到,Oracle GoldenGate可以按普通MySQL一样的部署方式,捕获MySQL集群的增量数据或从其它数据源将数据写入到MySQL集群,从而利用MySQL集群带来的分布式性能和高可用特性。