您的位置:首页 > 运维架构 > Docker

基于 Docker 虚拟化技术快速搭建 Otter 测试环境

2018-02-02 14:02 861 查看

背景

由于公司的业务在高速发展的过程当中需要往海外进行扩张,就导致了海外访问内地的服务出现延迟极高的问题直接影响了终端用户的使用体验,为了应对这个问题我们设想的解决方案是分区域进行一整套环境部署,从而来彻底解决这个问题;但是分区域部署涉及到的主要问题就是数据库的读写与同步,并且如何保证数据的一致性,所以基于这一系列的问题我对 Otter 进行了一些调研并写此篇文章。

说明

此篇文章不会介绍:什么是
Docker
、什么是
Otter
、以及什么是
Canal
,请需要的朋友可到相关官方文档库查阅资料,Otter&Canal 官方代码及文档Docker 官方网站;我这边为了对环境进行快速搭建,采用了
docker-compose
进行处理,配置文件仓库地址:https://github.com/caryyu/dockerfiles/tree/master/otter ,此配置文件会构建以下几样容器用来做预备虚机或容器:

mysqla - 用此台虚机或容器当作国内数据库;

mysqlb - 用此台虚机或容器当作海外数据库;

managerdb - 用此台虚机或容器当作
Manager
的数据库;

manager - 用此台虚机或容器当作
Otter
Manager


node1 - 用此台虚机或容器当作
Otter
的国内
Node


node2 - 用此台虚机或容器当作
Otter
的海外
Node


zkServer - 用来给以上的实例进行依赖的服务(如:服务协调、元数据存储等),理论上也需要区分国内与海外的集群,为了直观所以就只弄了一个,有兴趣的朋友可以自己搭建多个。

注意:我这里并未封装
Otter
环境所需的
Docker
镜像,容器里只是一个很简单的空的操作系统,需要自行再安装对应所需的软件;另外,我这里之所以分配静态 IP 地址给每个容器是因为
Otter
的机器配置里面对
Hostname
的支持不太好;顺便说一句:
docker-compose
文件里面我注释了
Canal
是因为
Node
已经内嵌了一个。

环境配置

好了,说到这里我们就能进入正题开始进行环境配置了,在环境配置之前请先下载对应所需的发布程序以及数据库相关
Otter
所需的核心脚本进行准备着。

wget https://github.com/alibaba/otter/releases/download/v4.2.15/manager.deployer-4.2.15.tar.gz wget https://github.com/alibaba/otter/releases/download/v4.2.15/node.deployer-4.2.15.tar.gz wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql wget https://raw.github.com/alibaba/otter/master/node/deployer/src/main/resources/sql/otter-system-ddl-mysql.sql[/code] 

启动
docker-compose
命令

docker-compose up -d


执行
ManagerDB
的脚本

ManagerDB
数据库中对
otter-manager-schema.sql
的脚本进行执行。

执行 国内与海外DB 的脚本

在两个国内与海外两个数据库都分别进行执行
otter-system-ddl-mysql.sql
脚本,给
双A同步
做准备。

安装
Manager
并配置

容器文件复制

首先,我们先利用
docker cp
命令把文件复制到容器中去,如下所示:

docker cp ./manager.deployer-4.2.15.tar.gz otter_manager_1:/


进入容器

然后,进入容器中,如下所示:

docker exec -it otter_manager_1 sh


解压文件

然后,创建文件夹
otter
并复制文件到此目录中再进行解压,如下所示:

cd /
mkdir otter && mv manager.deployer-4.2.15.tar.gz otter
tar zxf manager.deployer-4.2.15.tar.gz
rm manager.deployer-4.2.15.tar.gz


核心配置

配置文件
conf/jetty.xml
进行修改,如下所示:

<Set name="port">8080</Set>`


Jetty
的端口固定为 8080,记住有两处端口,不要取
otter.port
属性值。

配置文件
conf/otter.properties
进行三处修改,如下所示:

otter.port = 8888
otter.database.driver.url = jdbc:mysql://otter_managerdb_1:3306/otter
otter.zookeeper.cluster.default = otter_zkServer1_1:2181


启动

好了,我们开始启动脚本
bin/startup.sh
吧,如下所示:

sh bin/startup.sh


如果没有报错就访问地址:http://localhost:8888 ,能打开说明
Manager
启动成功了。

安装
Node
并配置

由于有两个
Node
,我这里只做一次,所以第二次需要你们自己再做一遍,容器名称别搞错了。

容器文件复制

首先,我们先利用
docker cp
命令把文件复制到容器中去,如下所示:

docker cp ./node.deployer-4.2.15.tar.gz otter_node1_1:/


进入容器

然后,进入容器中,如下所示:

docker exec -it otter_node1_1 sh


解压文件

然后,创建文件夹
otter
并复制文件到此目录中再进行解压,如下所示:

cd /
mkdir otter && mv node.deployer-4.2.15.tar.gz otter
tar zxf node.deployer-4.2.15.tar.gz
rm node.deployer-4.2.15.tar.gz


管理控制台界面配置

访问 http://localhost:8888 进行核心配置 (右上角一定要显示超级管理员,否则退出重新登录),如下所示:

图一



图二



图三



图四



这个时候机器显示的状态都是
未启动
的,所以接下来我们要开始启动
Node
的准备工作,图片这里所示的序号编号很重要,第一列的编号序列需要写到对应的
Node
配置中的。

核心配置

Node
的序号和之前添加机器的序号编号对应起来,如下所示:

echo 1 > conf/nid


配置文件
conf/otter.properties
进行修改,如下所示:

otter.manager.address = otter_manager_1:1099


补充容器系统缺少的几个重要文件与命令,如下所示:

touch /root/.bash_profile
cp /bin/sh /bin/bash
apk update
apk add aria2


启动

好了,我们开始启动脚本
bin/startup.sh
吧,如下所示:

sh bin/startup.sh


如果在
Manager
界面的机器管理中状态变成
已启动
说明就好了。

数据源

配置国内与海外的数据库数据源。

数据表

把需要同步的表进行预设配置好,随便创建一个
test
数据库,然后创建一张
student
表用来测试,脚本如下:

注意:脚本需要再国内与海外数据库都要进行执行创建操作。

CREATE DATABASE test;
USE test;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;


Canal 配置

这里使用
root
账号就可以了,总共要配置两个,一个对应国内的数据库,一个对应海外的数据库。

单向同步

在同步管理里面创建一个
channel
然后再进去创建一个
pipeline
即可,把源数据和目标数据配置好就可以了,比较简单。

双向同步

在同步管理里面创建一个
channel
然后再进去创建二个
pipeline
,把其中一个
pipeline
主站点
设置为
true
,然后再把其中一个
pipeline
的高级设置中的
支持ddl同步
设置为
false


测试

我们在国内数据库插入一行数据,看海外数据库是否同步成功;

我们在海外数据库插入一行数据,看国内数据库是否同步成功;

我们在海外与国内数据库同时写入看具体的表现又是如何。

结论

根据此篇文章的描述已经初步完成了同步的工作,但是投入生产还往往不够,因为根据我的测试,某一个 DB 宕机之后再次启动发现同步会失效等系列问题,而且
Otter
的社区一堆
Issues
未进行有效解决,总之想要直接投入生产还是需要慎重再慎重,还需要对源码进行改造等工作;如果一旦选择使用此方案来做同步,请建立一个团队进行维护与改造,数据乃是重中之重,数据一旦出现问题,后果不堪设想。

以上就是本人一些简单的见解,有任何问题请留言。

更多资料

https://github.com/alibaba/otter/wiki/Manager%E9%85%8D%E7%BD%AE%E4%BB%8B%E7%BB%8D
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: