Otter-安装配置

简介
OTTER是阿里巴巴公司为了解决杭州/美国机房数据间同步研发的一个开源软件。OTTER基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库,是一个分布式数据库同步系统。

工作原理图:

concept_jpeg

原理描述:

  1. 基于Canal开源产品,获取数据库增量日志数据。
  2. 典型管理系统架构,manager(web管理)+node(工作节点)

    1. manager运行时推送同步配置到node节点
    2. node节点将同步状态反馈到manager上
  3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

一、准备前--otter配置流程

1、**otter名词解释:**

  • 数据源:读取的源实例信息,和写入的目标实例信息

  • 数据表:配置映射用的,用于配置,源实例,什么库,什么表,同步到目标什么库,什么表

  • canal:otter是做增量同步的,增量同步基于mysql的binlog日志,并且是row格式。这里需要配置你读取binlog的信息,和数据源里面的源实例信息可以说是同一个。

  • 通道配置: otter采用一个实例一个通道方式。一个实例可以多个配置多个库

  • pipeline:主要核心功能如下

  • (1)选择你的canal配置,读取哪个实例的binlog。

  • (2)选择整个同步是在哪个节点上进行,例如我们部署了三个node节点,可以由node1进行读取的操作,可以由node2进行目标实例写入操作。也可以同时放到一个节点上。

  • (3)binlog位置,默认不写就读最新位置的。

  • (4)高级配置里面有是否跳过DDL,传输模式,负载均衡算法等,一般保持默认即可。

  • **流程:**

  • (1)新增数据源,一般最少配置2个,一个读取的源库,一个目标

  • (2)数据表,配置映射关系,从哪里同步到哪里。

  • (3)Canal,配置读取binlog的信息

  • 上面步骤创建好后,我们就可以正式开始配置通道了

  • (4)创建通道

  • (5)创建pipeline

  • (6)创建表映射关系

  • (7)启动通道

2、下载包

otter的环境需要mysql ,jdk, zookeeper , node , manager,aria2

wget https://github.com/aria2/aria2/releases/download/release-1.30.0/aria2-1.30.0.tar.gz

wget https://github.com/alibaba/otter/releases/download/otter-4.2.17/manager.deployer-4.2.17.tar.gz

wget https://github.com/alibaba/otter/releases/download/otter-4.2.17/node.deployer-4.2.17.tar.gz

 wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
 
 wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz

3、安装包

3.1 需要软件
需要软件:java,MYSQL5.x,manager,node,ZOOKEEPER,aria2
3.2MYSQL

mysql 、java 安装

java 安装

yum install java-1.8.0-openjdk.x86_64 -y

java -version

或者

查看当前系统是否已安装JDK

yum list installed |grep java

如果没有就选择yum库中的包进行安装,查看yum库中JDK列表

yum -y list java*

该命令执行后,会列出JDK版本,选择自己合适的进行安装

安装命令:

yum -y install java-1.8.0-openjdk*

 

mysql 安装

CentOS7 yum方式安装MySQL5.7

下载并安装MySQL官方的 Yum Repository

[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

  使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。

[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm

  之后就开始安装MySQL服务器。

[root@localhost ~]# yum -y install mysql-community-server

  这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb。

systemctl start  mysqld.service

此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

  grep "password" /var/log/mysqld.log
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

yum 安装Mysql8.0

系统: CentOS 7(在CentOS 7中默认有安装MariaDB,这个是mysql的分支,一般来说还是使用自己安装的MySQL比较好)

1、下载并安装MySQL

wget -i -c https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

下载到指定位置后,就可以执行安装了

yum -y install mysql80-community-release-el7-3.noarch.rpm
yum -y install mysql-community-server

启动MySQL

启动MySQL服务:systemctl start  mysqld.service

查看MySQL服务:systemctl status  mysqld.service

  mysqld.service

查看MySQL是不是开机自启,可以执行命令查看开机自启列表

1

systemctl list-unit-files|grep enabled

此时如果要进入MySQL得找出root用户的密码,输入命令

grep "password" /var/log/mysqld.log

得到密码后,登录mysql,输入命令

mysql -uroot -p

然后回车,提示你输入密码,记得不要输错,输入时密码是不显示的。登录成功如下图

此时,你需要给你的MySql重新设置密码,因为MySQL默认的就是必须修改密码后才能操作数据库。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Left@zuo123.';

设置密码的时候需要遵守MySQL密码设置规范,如果不符合规范是不能修改成功的。

如下图,我将密码设置为123456,它提示我 密码不符合规范

总之呢,我们先将密码设置成比较复杂的就好,比如 Abc@123...,先登录了再说。

如果想要设置简单好记的密码,可以修改密码设置规范,毕竟你不登录你就不能修改规范。

查看密码规范

SHOW VARIABLES LIKE 'validate_password%';

 

密码的长度是由validate_password_length决定的,而validate_password_length的计算公式是:

validate_password_length = validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
这时候我们将密码设置规范修改一下:
set global validate_password.policy=0;
set global validate_password.length=1;

这时候就可以设置简单的密码了,比如123456

最后一步,设置允许远程连接。

如果直接使用命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 会提示一个语法错误,有人说是mysql8的分配权限不能带密码隐士创建账号了,要先创建账号再设置权限。也有的说8.0.11之后移除了grant 添加用户的功能。

创建新用户 admin

创建用户:CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
允许远程连接:GRANT ALL ON *.* TO 'admin'@'%';
本人测试过,使用 update user set host = '%'  where user = 'root'; 也可以修改

 如果使用客户端连接提示了plugin caching_sha2_password错误,这是因为MySQL8.0的密码策略默认为caching_sha2_password

 使用命令修改策略

ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 

箭头指的两个用户是我修改过的

 然后关闭防火墙,测试连接成功!!

 

 

mysql配置:

    show variables like 'binlog_format'   #binlong 格式必须是row
    show variables like '%server_id%'     #必须有server_id,该参数跟数据库复制有关,详情看官网
    show variables like '%char%'   #字符集character_set_server 必须是utf8,否则配置数据源表验证不通过。

    #/ETC/MY.CNF
    [mysqld]  添加以下配置
    character-set-server=utf8   
    collation-server=utf8_general_ci
    binlog_format=row
    log-bin=mysql-bin
    server_id=1

sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'


 3.3、Centos7安装Zookeeper 3.5.5步骤

1、下载zookeeper安装包

进入zookeeper官网选择下载链接如下: https://www-eu.apache.org/dist/zookeeper/

选择最新稳定版本3.5.5,选择下载apache-zookeeper-3.5.5-bin.tar.gz,文件说明:

1)apache-zookeeper-3.5.5.tar.gz  源码包

2)apache-zookeeper-3.5.5-bin.tar.gz  安装包

2、vim修改配置文件 /etc/hosts ,增加如下内容:

192.168.3.71   edu-provider-01

3、保存后,执行 /etc/init.d/network restart 使配置文件 hosts生效

4、上传下载好的 apache-zookeeper-3.5.5-bin.tar.gz 包到 /usr/local/src 目录下

5、执行 tar -zxvf /usr/local/apache-zookeeper-3.5.5-bin.tar.gz 解压tar包

6、进入解压好的目录中创建 data 和 logs文件夹,命令如下:

[root@localhost apache-zookeeper-3.5.5-bin]#   cd /usr/local//apache-zookeeper-3.5.5-bin/

[root@localhost apache-zookeeper-3.5.5-bin]#   mkdir data

[root@localhost apache-zookeeper-3.5.5-bin]#   mkdir logs

7、进入conf文件夹,并拷贝一份.cfg文件并编辑,编辑后的结果如图,保存

[root@localhost apache-zookeeper-3.5.5-bin]# cd conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# vim zoo.cfg

 

请注意:edu-provider-01名称为hosts文件中输入的内容

8、进入data文件夹,创建myid文件,并输入1,保存

[root@localhost conf]# cd ../data/
[root@localhost data]# vim myid

请注意: 这里输入的1 是zoo.cfg文件中server.1的1

9、编辑profile文件,并加入zookeeper的环境变量

[root@localhost data]# vim /etc/profile

10、执行 命令使profile文件生效

[root@localhost data]# source /etc/profile

11、防火墙中添加允许zookeeper访问的端口,并重启防火墙

[root@localhost data]# firewall-cmd --permanent --zone=public --add-port=2181/tcp
[root@localhost data]# firewall-cmd --permanent --zone=public --add-port=2888/tcp
[root@localhost data]# firewall-cmd --permanent --zone=public --add-port=3888/tcp
[root@localhost data]# systemctl restart firewalld.service
12、启动 zookeeper服务并测试是否正常启动

[root@localhost data]# cd /usr/local/src/apache-zookeeper-3.5.5-bin/bin/
[root@localhost bin]# ./zkServer.sh start

图片说明已经正常启动,还可以使用jps命令查看,是否有 QuorumPeerMain

13、如果想要关闭执行stop命令

[root@localhost bin]# ./zkServer.sh stop

  

3.4、aria2 安装

下载解压aria2 到/usr/local/aria2/aria2-1.15.2(目录没有统一好,因为之前装了一个新版本1.33.1,在编译时要GCC>4.7 )

    [root@master aria2-1.15.2]# ./configure
    [root@master aria2-1.15.2]# make
    [root@master aria2-1.15.2]# make install
    #########标准源码安装三部曲############
    [root@master aria2-1.15.2]# aria2c -v    
  或者YUM 安装

 [root@test6 ~]# yum install epel-release
[root@test6 ~]# yum install aria2 -y
  

3.5、manager安装
  1 下载sql文件并导入
     wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
     source otter-manager-schema.sql
  2 下载安装包
     wget https://github.com/alibaba/otter/releases/download/v4.2.15/manager.deployer-4.2.15.tar.gz
     tar xzvf manager.deployer-4.2.15.tar.gz -C /usr/local/otter-manager
  3 修改配置文件otter.properties

cat otter.properties |grep -v ^#|grep -v ^$


      otter.zookeeper.cluster.default = zk地址:2181
      otter.domainName =本机IP地址
      otter.database.driver.url = jdbc:mysql://IP:3306/otter
      otter.database.driver.username = 用户名
      otter.database.driver.password = 密码 //otter管理节点需要使用数据库,这里设置的是连接这台数据库的用户名密码

例:

  4 启动manager

./bin/startup.sh

PS:manager 编译时间大约需要1分钟

检查日志:cat logs/manager.log

  5 manager启动测试
    访问地址 http://IP:8080/login.htm,初始密码为:admin/admin

用浏览器打开http://172.18.1.97:8088/ 

默认情况下,进去的是匿名账户,只有只读查看的权限,登录为管理员才可以有操作权限,管理员账号为admin/admin(otter自带)。

注:默认情况下是没有channel的,因为笔者的环境已经配置了在单向同步的,所以有显示一个channel。

manager启动之后,需要配置使用的zk、canal、node等地址、端口等信息。

zk配置

node配置

 

 

 端口建议不要修改。

机器添加完成以后,机器管理的列表中第一列就是nid(这个就是到时候要保存到node/conf/nix文件中的值),如下:

 

上述三种类型的节点配置完成后,manager前期的配置就完成了。

manager配置完成之后,需要先启动相应的node节点,node节点启动之后,就可以配置真正的同步任务了。

node配置

首先cd NODE_HOME/conf

echo 1 > nid

node配置文件otter.properties(可以默认,不用做任何修改)如下:

cat otter.properties 
# otter node root dir
otter.nodeHome = ${user.dir}/../
## otter node dir
otter.htdocs.dir = ${otter.nodeHome}/htdocs
otter.download.dir = ${otter.nodeHome}/download
otter.extend.dir= ${otter.nodeHome}/extend

## default zookeeper sesstion timeout = 60s
otter.zookeeper.sessionTimeout = 60000

## otter communication pool size
otter.communication.pool.size = 10

## otter arbitrate & node connect manager config
otter.manager.address = IP:1099

启动node

cd NODE_HOME/bin

./startup.sh

 more node.log
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=96m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
5:13:09.364 [main] INFO com.alibaba.otter.node.deployer.OtterLauncher - INFO ## the otter server is running now ......

此时再查看manager控制台的机器管理,可以发现机器状态为已启动,如下:

manager/node都启动之后,就可以真正开始配置同步任务了。

例:

同步任务配置 

分为下列几个步骤(不熟悉术语概念的建议回到页首重新review下):

1、添加canal

 

 

 点位可以通过在主库执行show master status和select unix_timestamp()得到。

 

2、添加数据源

 设置主库和从库的数据源

 

3、添加同步表

 

 

 

4、添加channel

 

 

5、添加pipeline

 pipeline里面主要选择节点和canal。

6、添加映射关系

 

 

7、启动同步

 

注意:默认会同步ddl,对于分库分表同步到从库的时候,建议不要同步ddl以及跳过ddl。

插入数据试试看吧。。。。

otter同步异常问题排查与监控

笔者一开始启动后,确实报错了,如下:

TODO,等后续梳理确保都可重复执行之后,再补充。

otter简单性能测试

创建了一个简单的表使用mysqlslap进行测试。

注:我们因为环境受限,zk、manager、node、mysql主从均在一台服务器上,配置为16c/8GB阿里云服务器,无swap。

CREATE TABLE `otter_test_table1` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

测试100w条插入

 mysqlslap --defaults-file="/etc/my.cnf.57" --concurrency=50 --iterations=1 --create-schema=otter_test --query="insert into otter_test_table1 values(FLOOR(0 + (RAND() * 10000000)),'name93923') ON DUPLICATE KEY UPDATE name='wifeufwuwwu'" --number-of-queries=1000000 -uroot -p123456 -P3307 -h127.0.0.1

延迟、tps等如下:

 

测试2000w条插入

mysqlslap --defaults-file="/etc/my.cnf.57" --concurrency=100 --iterations=1 --create-schema=otter_test --query="insert into otter_test_table1 values(FLOOR(1000000 + (RAND() * 100000000)),'namefwei8388dfe88827d7f8fjfjweifiwewifeweuwewuweuewuweuuusyfyeywewew23') ON DUPLICATE KEY UPDATE name='wifeufwuwwu'" --number-of-queries=20000000 -uroot -p123456 -P3307 -h127.0.0.1

延迟、tps、cpu、io等待等如下:

 

 

 

可以看出后面基本上都在io等待了,一般来说数据库服务器io等待持续到10%之后,系统就很慢了,所以总体来说,如果不做太多的字段重命名、二次处理,otter性能本身还是不错的。

otter高可用

对外开源部分HA这一块基本上没有比较完善的。对于canal连接到db主从切换,可以参考:https://www.cnblogs.com/f-zhao/p/7681960.html,已经讲到位了。如果是半同步模式或者基于GTID的话,没有必要回退60s。

在otter中配置canal的主从切换依赖于groupKey,后面测了会补充。

 

其他参考

https://wenku.baidu.com/view/930a5723227916888586d70b.html 

https://github.com/alibaba/otter/wiki/Faq

https://my.oschina.net/dxqr/blog/524795

http://shift-alt-ctrl.iteye.com/blog/2399603

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于部署 Otter-Server,可以使用 Docker 镜像进行部署。具体步骤如下: 1. 下载 Otter-Server 的 Docker 镜像: ``` docker pull alibaba/otter ``` 2. 创建并启动容器: ``` docker run -d --name otter-server -p 8080:8080 -p 1099:1099 -p 2088:2088 \ -e JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xmx2g -Xms2g -Xmn512m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/heapdump" \ -v /yourpath/otter/data:/data -v /yourpath/otter/logs:/logs \ alibaba/otter ``` 其中,`/yourpath/otter/data` 和 `/yourpath/otter/logs` 是宿主机器上存储 Otter-Server 数据和日志的路径,可以自行修改。 3. 进入容器内部: ``` docker exec -it otter-server /bin/bash ``` 4. 修改 Otter-Server 配置文件: Otter-Server 的配置文件位于 `/data/otter/conf/otter.properties`,可以使用 `vi` 命令进行编辑。 在配置文件中,需要添加以下配置: ``` otter.amqp.addresses=amqp://guest:guest@<your-rabbitmq-host>:5672 otter.clickhouse.addresses=<your-clickhouse-host>:8123 ``` 其中,`<your-rabbitmq-host>` 和 `<your-clickhouse-host>` 分别为 RabbitMQ 和 ClickHouse 的地址。 5. 重启 Otter-Server: ``` /data/otter/bin/stop.sh /data/otter/bin/startup.sh ``` 至此,Otter-Server 的部署完成。 关于消费 RabbitMQ 并写入 ClickHouse 的问题,需要在 Otter-Server 中配置 Canal,具体步骤如下: 1. 在 Otter-Server 配置文件中添加 Canal 配置: ``` otter.canal.zookeeper.cluster=<your-zookeeper-host>:2181 ``` 其中,`<your-zookeeper-host>` 为 ZooKeeper 的地址。 2. 在 Otter-Server 中创建 Canal 实例: 使用 `otter-admin` 工具创建 Canal 实例,具体命令如下: ``` cd /data/otter/otter-admin/bin ./otter.sh create --type canal --mode memory --zoohost <your-zookeeper-host>:2181 --canalId <your-canal-id> --destination <your-destination> ``` 其中,`<your-canal-id>` 和 `<your-destination>` 分别为 Canal 实例的 ID 和名称。 3. 在 Otter-Server 中配置 Canal 映射关系: 使用 `otter-admin` 工具配置 Canal 映射关系,具体命令如下: ``` cd /data/otter/otter-admin/bin ./otter.sh canal --c <your-canal-id> --s <your-rabbitmq-exchange> --d <your-clickhouse-table> --m <your-field-mapping> ``` 其中,`<your-rabbitmq-exchange>` 和 `<your-clickhouse-table>` 分别为 RabbitMQ 的 Exchange 和 ClickHouse 的表名,`<your-field-mapping>` 为字段映射配置。 至此,Otter-Server 就可以消费 RabbitMQ 并将数据写入 ClickHouse 中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值