日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql同步数据到另一张表_mysql:Otter跨机房数据同步(单向)

發布時間:2025/3/15 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql同步数据到另一张表_mysql:Otter跨机房数据同步(单向) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

重要說明:需要同步的表必須要有主鍵 主鍵 主鍵

otter是一款基于Java且免費、開源基于數據庫增量日志解析,準實時同步到本機房或異地機房的mysql/oracle數據庫的解決方案。

Otter目前支持了什么

1. 單向同步, mysql/oracle互相同步

2. 雙向同步,無沖突變更

3. 文件同步,本地/aranda文件

4. 雙A同步,沖突檢測&沖突補救

5. 數據遷移,中間表/行記錄同步

實際測試中,otter的同步速度相比于mysql的復制,約有5倍左右的性能提升,這取決于其同步算法的實現. 拋棄了強一致性,得到了性能提升。

原理描述

基于Canal開源產品,獲取數據庫增量日志數據。

典型管理系統架構,manager(web管理)+node(工作節點)

manager運行時推送同步配置到node節點

node節點將同步狀態反饋到manager上

基于zookeeper,解決分布式狀態調度的,允許多node節點之間協同工作.

工作流程:otter基于zookeeper解決分布式狀態調度,由manager(web管理)和node(工作節點)組成。manager運行時推送同步配置到node節點上,node節點將同步狀態反饋到manger上。

環境

Ip

操作系統

Mysql

Manager節點

Node節點

192.168.140.24

CenteOS 7.5.1804

Mysql5.7.26

192.168.140.136

CenteOS 7.5.1804

Mysql5.7.26

目標:

實現192.168.140.136到192.168.140.24的單向數據同步。

名詞解釋

Pipeline:從源端到目標端的整個過程描述,主要由一些同步映射過程組成

Channel:同步通道,單向同步中一個Pipeline組成,在雙向同步中有兩個Pipeline組成

DataMediaPair:根據業務表定義映射關系,比如源表和目標表,字段映射,字段組等

DataMedia : 抽象的數據介質概念,可以理解為數據表/mq隊列定義

DataMediaSource : 抽象的數據介質源信息,補充描述DateMedia

ColumnPair : 定義字段映射關系

ColumnGroup : 定義字段映射組

Node : 處理同步過程的工作節點,對應一個jvm

otter搭建

環境準備

[root@db192168140024 ~]# yum install java-1.8.0-openjdk-devel.x86_64

[root@db192168140024 ~]# yum install nc

[root@db192168140024software]#wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

[root@db192168140024 software]# tar -zxvf zookeeper-3.4.14.tar.gz

[root@db192168140024 software]# mv zookeeper-3.4.14 /usr/local/zookeeper

[root@db192168140024 software]# cd /usr/local/zookeeper/conf

[root@db192168140024 conf]# cp zoo_sample.cfg zoo.cfg

[root@db192168140024 conf]# cd ../bin

[root@db192168140024 bin]# ./zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@db192168140024 bin]# yum install *aria2*

aria2 是一款開源、輕量級的多協議命令行下載工具,支持 HTTP/HTTPS、FTP、SFTP、BitTorrent 和 Metalink 協議,擁有眾多第三方支持插件,被譽為「下一代下載工具」和「下載神器」

otter的安裝包以及腳本:

從https://github.com/alibaba/otter/releases下載,例如:

192.168.140.24

下載并分別解壓到/usr/local/otter_node,/usr/local/otter_manager目錄,如下:

192.168.140.136

下載node節點node.deployer-4.2.14.tar.gz 并解壓到/usr/local/otter_node

192.168.140.24

因為otter的配置信息存儲在mysql中,所有還有一個初始化腳本:

https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

網上和otter文檔均提及需要先安裝manager,我仔細看了下,是因為manager是被動連接的(很多應用的管理控制臺是主動去連接服務的,otter則把所有的配置都存儲在了manager中),node啟動的時候會連接到manager獲取同步相關的信息。生成nid這一步倒沒什么關系,事后不一致修改也可以。

manager配置

首先在計劃保存otter配置信息的mysql數據庫執行otter-manager-schema.sql腳本。

manager的配置文件主要是manager/conf/otter.properties,如下所示(下面列出了建議和需要修改的):

[root@v-03-01-00223 conf]# cat otter.properties

## otter manager domain name

otter.domainName = 192.168.140.24 ## 建議改成所在服務器的ip,而不是默認的127.0.0.1,否則到時候啟動的時候所有的連接指向的目標都是localhost,因為通常otter跑在linux環境,很多linux環境是沒有圖形化界面的,感覺這是個bug

## otter manager http port

otter.port = 8088 ## 如果非專用或者已經有了一些web應用在同一臺服務器,建議改成其他的避免端口沖突,這里的端口號要和jetty.xml中的保持一致,這里也是,直接用個非8080端口就更友好了,比如weblogic 控制臺7001,es控制臺9200,rabbitmq控制臺15672

## jetty web config xml

otter.jetty = jetty.xml

## otter manager database config

otter.database.driver.class.name = com.mysql.jdbc.Driver

otter.database.driver.url = jdbc:mysql://192.168.160.24:3306/otter ## otter配置信息維護的數據庫地址,庫名一般為otter/otter_manager/manager

otter.database.driver.username = root

otter.database.driver.password = 123456

## otter communication port

otter.communication.manager.port = 1099 ## node和manager通信的接口,一般不用修改

## otter communication pool size

otter.communication.pool.size = 10

## default zookeeper address

otter.zookeeper.cluster.default =192.168.160.24:2181 ## zk地址

## default zookeeper sesstion timeout = 60s

otter.zookeeper.sessionTimeout = 60000

## otter arbitrate connect manager config

otter.manager.address = ${otter.domainName}:${otter.communication.manager.port}

## should run in product mode , true/false

otter.manager.productionMode = true

## self-monitor enable or disable

otter.manager.monitor.self.enable = true

## self-montir interval , default 120s

otter.manager.monitor.self.interval = 120

## auto-recovery paused enable or disable

otter.manager.monitor.recovery.paused = true

# manager email user config

otter.manager.monitor.email.host = smtp.gmail.com

otter.manager.monitor.email.username =

otter.manager.monitor.email.password =

otter.manager.monitor.email.stmp.port = 465

上述配置修改之后,就可以啟動manager了。

[root@v-03-01-00223 bin]# pwd
/usr/local/otter_manager/bin

./startup.sh

查看日志

tail -fn 100 ../logs/manager.log

2019-09-11 09:24:55.223 [] INFO com.alibaba.otter.manager.deployer.JettyEmbedServer - ##Jetty Embed Server is startup!

2019-09-11 09:24:55.223 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## the manager server is running now ......

Wed Sep 11 09:26:58 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

接下去就可以驗證manager了。

用瀏覽器打開http://192.168.160.24: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(可以默認,不用做任何修改)如下:

[root@v-03-01-00223 conf]# 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 = 192.168.140.24:1099

啟動node

cd NODE_HOME/bin

./startup.sh

[root@v-03-01-00223 node]# 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.
2018-07-03 15: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等如下:

可以看出后面基本上都在io等待了,一般來說數據庫服務器io等待持續到10%之后,系統就很慢了,所以總體來說,如果不做太多的字段重命名、二次處理,otter性能本身還是不錯的。

otter高可用

對外開源部分HA這一塊基本上沒有比較完善的。對于canal連接到db主從切換,可以參考:https://www.cnblogs.com/f-zhao/p/7681960.html,已經講到位了。如果是半同步模式或者基于GTID的話,沒有必要回退60s。

在otter中配置canal的主從切換依賴于groupKey,后面測了會補充。

總結

以上是生活随笔為你收集整理的mysql同步数据到另一张表_mysql:Otter跨机房数据同步(单向)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。