MySQL异地同步 otter 单向同步实践

搭建

Posted by dbstack on May 4, 2018

MySQL 异地 双机房同步之otter

  阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,
同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。
目前同步规模:
1、同步数据量6亿
2、文件同步1.5TB(2000w张图片)
3、涉及200+个数据库实例之间的同步
4、80+台机器的集群规模

工作原理

原理描述:

  1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击

  2. 典型管理系统架构,manager(web管理)+node(工作节点)

    a. manager运行时推送同步配置到node节点

    b. node节点将同步状态反馈到manager上

  3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

    项目官方地址

    Otter项目地址:https://github.com/alibaba/otter
    Otter文档地址:https://github.com/alibaba/otter/wiki
    

    为何我们要使用otter

    Otter能解决什么问题 技术最终是解决业务问题的,不然还是耍流氓!我们来一同看看 Otter 到底能解决我们在开发中遇到的那些场景中的问题

    1、异构库同步
      Otter支持从Mysql同步到Mysql/oracle,我们可以把mysql同步到oracle。
    2、单机房同步
      可以作为一主多从同步方案,对于单机房内网来说效率非常高,还可以做为数据库版本升级,数据表迁移,二级索引等这类功能。
    3、异地机房同步
      异地机房同步可以说是Otter最大的亮点之一,可以解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景可以做到数据多机房容灾。
    4、双向同步
      双向同步是在数据同步中最难搞的一种场景,Otter可以很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,
    数据保证最终一致性。
    5、文件同步
      站点镜像,进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片
    

    服务器环境

    • centos7.3 2vcpu 3G内存
    • MySQL master 10.0.52.199
    • MySQL slave 10.0.52.200

      1、所需软件

      aria2-1.33.1.tar.gz
      jdk-8u151-linux-x64.tar.gz
      manager.deployer-4.2.15.tar.gz
      node.deployer-4.2.15.tar.gz
      zookeeper-3.4.11.tar.gz
      

      2、安装数据库

      此处不再介绍,参考网上的注意 row格式与sever-id 要不同

      3、安装jdk otter

      mannage和node节点都安装

      [root@master otter]#mkdir /usr/java && tar -xf jdk-8u151-linux-x64.tar.gz -C /usr/java
      [root@master otter]#sed -i '57a export JAVA_HOME=/usr/java/jdk1.8.0_151\nexport JRE_HOME=/usr/java/jdk1.8.0_151/jre\nexport PATH=$PATH:/usr/java/jdk1.8.0_151/bin\nexport CLASSPATH=./:/usr/java/jdk1.8.0_151/lib:/usr/java/jdk1.8.0_151/jre/lib ' /etc/profile
      [root@master otter]#source /etc/profile
      [root@master otter]# java -version
      java version "1.8.0_151"
      Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
      Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
      

      4. 安装配置zookeeper

      [root@master otter]#tar zxvf zookeeper-3.4.11.tar.gz -C /usr/local/ && cd /usr/local/ && mv zookeeper-3.4.11 zookeeper
      [root@master otter]#cd zookeeper
      [root@master zookeeper]#mv conf/zoo_sample.cfg conf/zoo.cfg
      [root@master zookeeper]#mkdir data
      [root@master zookeeper]#echo 1 > data/myid #将本节点id设定到data/myid文件中
      [root@master zookeeper]#echo 'export PATH=/usr/local/zookeeper/bin:$PATH'>>/etc/profile
      [root@master zookeeper]#source /etc/profile
      [root@master zookeeper]#zkServer.sh start
      [root@master zookeeper]#zkServer.sh status
      MX enabled by default
      Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
      Mode: standalone
      

      5. 安装配置manager

      [root@master /]#mkdir /opt/module/manager -p
      [root@master /]#tar -xf manager.deployer-4.2.15.tar.gz -C /opt/module/manager
      [root@master /]#wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql 
      由于默认脚本是MySQL5.6版本,而我的是5.7的需要修改下slq_mode
      mysql>set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
      [root@master /]#cd /opt/module/manager
      [root@master /]#mysql -u root -p otter </opt/module/otter-manager-schema.sql
      输入mysql密码
      修改vim conf/otter.properties 配置文件
      otter.domainName = 10.0.52.199   
      otter.port = 8080
      otter.database.driver.url = jdbc:mysql://127.0.01:3306/ottermanager
      otter.database.driver.username = root
      otter.database.driver.password = 123456
      otter.zookeeper.cluster.default = 127.0.0.1:2181
      启动manager
      [root@master manager]#./bin/startup.sh
      [root@master manager]#tail -200f logs/manager.log 
      the manager server is running now ......
      以上输出则为启动成功
      

6. 安装配置node

1、node节点需要安装aria2,aria2它是一个文件通道来保证需要同步的数据用过极快的速度同步到需要同步的服务器上
[root@master /]tar -xf aria2-1.33.1.tar.gz
[root@master /]./configure
[root@master /]make
[root@master /]make install
验证安装是否成功
[root@master /]aria2c -v
aria2 版本 1.33.1
Copyright (C) 2006, 2017 Tatsuhiro Tsujikawa

本程序为自由软件;您可自由再版或修改它,惟须遵守 GNU 通用公共许可证,
第 2 版或更新版本(依您所愿)的条款,以自由软件基金会发布的版本为准。

我们本着希望有用的态度发行此软件,但 *从未做出任何保证*,甚至不暗示对
于适销性或对某一特定用途的适用性的保证。参见 GNU 通用公共许可证以获取
更多信息。

** 配置 **
已开启的特性: BitTorrent, Firefox3 Cookie, GZip, HTTPS, Message Digest, Metalink, XML-RPC
哈希算法: sha-1, sha-224, sha-256, sha-384, sha-512, md5, adler32
库: zlib/1.2.7 libxml2/2.9.1 sqlite3/3.7.17 OpenSSL/1.0.2k
编译器: gcc 4.8.5 20150623 (Red Hat 4.8.5-16)
  built by  x86_64-pc-linux-gnu
  on        Dec  7 2017 18:57:43
系统: Linux 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64

报告问题至 https://github.com/aria2/aria2/issues
访问 https://aria2.github.io/
2、安装node
node主要负责接收mannage下发的任务处理
[root@master /]mkdir -p /opt/module
[root@master /]tar -xf node.deployer-4.2.15.tar.gz -C /opt/module
[root@master /]cd /opt/module/node
nid配置node的ID,多个node协同工资时不能重复
[root@slave node]# echo 1 >conf/nid
修改配置文件
[root@slave node]# vim conf/otter.properties
主要修改链接mamager地址是否正确
otter.manager.address = 10.0.52.199:1099

等待mannage启动后再启动node
3、关联manager ,zookeeper和node
先登录manager

10.0.52.199:8080

  • 使用默认用户名密码admin:admin登陆进去:

  • 找到机器管理的zookeeper配置点击进去:

  • 选择添加一个zookeeper:

  • 填好自己本地的zookeeper地址和端口保存:

  • 在选择机器管理的node管理点击进去:

  • 这个时候就可以启动我们的node了:

  • [root@slave node]cd ./bin && ./startup.sh
  • 注意:如果发现启动不了可以查看node的日志

  • 等带一段时间后刷新会发现状态已经变为了启动,这个时候就已经成功了:

  • 并且这个时候我们在zookeeper页面点击查看选项可以看到zookeeper已经在运行了:

  • 注意:如果发现一直都是未启动状态可以查阅/opt/module/node/logs中的日志