• 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集群带来的分布式性能和高可用特性。

  • 相关阅读:
    有限状态机(FSM)的简单理解和Python实现
    【Papers】Lane-Detection 近期车道线检测论文阅读总结
    刷LeetCode的简易姿势
    数码时代的效率生活
    轻量化模型训练加速的思考(Pytorch实现)
    编程之美!从线程池状态管理来看二进制操作之美
    没想到,Git居然有3种“后悔药”!
    交易系统高并发下的幂等性设计原则
    集群环境中使用Zookeeper实现分布式幂等控制
    Elasticsearch 入门到高手的成长阶梯-索引的基本操作(2)-索引的收缩和拆分
  • 原文地址:https://www.cnblogs.com/margiex/p/13555211.html
Copyright © 2020-2023  润新知