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集群 的架构如下:

clip_image002

针对MySQL集群,可以使用Oracle GoldenGate进行数据的实时抽取和投递。本文就MySQL Cluster的安装及GoldenGate抽取配置进行简单说明。

GoldenGate建议部署架构

clip_image004

以上架构中,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/

clip_image006

所有节点使用同一份安装介质。

安装管理节点

# 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”,(略过)

在管理节点上查看所有节点的状态

clip_image007

至此,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

clip_image009

安装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.*;

增量数据捕获测试

在其中一个节点上操作数据

clip_image011

在OGG中查看捕获情况

clip_image013

可以看到,OGG可以顺利的捕获到MySQL集群中的增量数据。

小结

通过本文的验证,可以看到,Oracle GoldenGate可以按普通MySQL一样的部署方式,捕获MySQL集群的增量数据或从其它数据源将数据写入到MySQL集群,从而利用MySQL集群带来的分布式性能和高可用特性。

posted @ 2020-08-24 17:38  margiex  阅读(367)  评论(0编辑  收藏  举报