日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

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

重要說(shuō)明:需要同步的表必須要有主鍵 主鍵 主鍵

otter是一款基于Java且免費(fèi)、開(kāi)源基于數(shù)據(jù)庫(kù)增量日志解析,準(zhǔn)實(shí)時(shí)同步到本機(jī)房或異地機(jī)房的mysql/oracle數(shù)據(jù)庫(kù)的解決方案。

Otter目前支持了什么

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

2. 雙向同步,無(wú)沖突變更

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

4. 雙A同步,沖突檢測(cè)&沖突補(bǔ)救

5. 數(shù)據(jù)遷移,中間表/行記錄同步

實(shí)際測(cè)試中,otter的同步速度相比于mysql的復(fù)制,約有5倍左右的性能提升,這取決于其同步算法的實(shí)現(xiàn). 拋棄了強(qiáng)一致性,得到了性能提升。

原理描述

基于Canal開(kāi)源產(chǎn)品,獲取數(shù)據(jù)庫(kù)增量日志數(shù)據(jù)。

典型管理系統(tǒng)架構(gòu),manager(web管理)+node(工作節(jié)點(diǎn))

manager運(yùn)行時(shí)推送同步配置到node節(jié)點(diǎn)

node節(jié)點(diǎn)將同步狀態(tài)反饋到manager上

基于zookeeper,解決分布式狀態(tài)調(diào)度的,允許多node節(jié)點(diǎn)之間協(xié)同工作.

工作流程:otter基于zookeeper解決分布式狀態(tài)調(diào)度,由manager(web管理)和node(工作節(jié)點(diǎn))組成。manager運(yùn)行時(shí)推送同步配置到node節(jié)點(diǎn)上,node節(jié)點(diǎn)將同步狀態(tài)反饋到manger上。

環(huán)境

Ip

操作系統(tǒng)

Mysql

Manager節(jié)點(diǎn)

Node節(jié)點(diǎn)

192.168.140.24

CenteOS 7.5.1804

Mysql5.7.26

192.168.140.136

CenteOS 7.5.1804

Mysql5.7.26

目標(biāo):

實(shí)現(xiàn)192.168.140.136到192.168.140.24的單向數(shù)據(jù)同步。

名詞解釋

Pipeline:從源端到目標(biāo)端的整個(gè)過(guò)程描述,主要由一些同步映射過(guò)程組成

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

DataMediaPair:根據(jù)業(yè)務(wù)表定義映射關(guān)系,比如源表和目標(biāo)表,字段映射,字段組等

DataMedia : 抽象的數(shù)據(jù)介質(zhì)概念,可以理解為數(shù)據(jù)表/mq隊(duì)列定義

DataMediaSource : 抽象的數(shù)據(jù)介質(zhì)源信息,補(bǔ)充描述DateMedia

ColumnPair : 定義字段映射關(guān)系

ColumnGroup : 定義字段映射組

Node : 處理同步過(guò)程的工作節(jié)點(diǎn),對(duì)應(yīng)一個(gè)jvm

otter搭建

環(huán)境準(zhǔn)備

[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 是一款開(kāi)源、輕量級(jí)的多協(xié)議命令行下載工具,支持 HTTP/HTTPS、FTP、SFTP、BitTorrent 和 Metalink 協(xié)議,擁有眾多第三方支持插件,被譽(yù)為「下一代下載工具」和「下載神器」

otter的安裝包以及腳本:

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

192.168.140.24

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

192.168.140.136

下載node節(jié)點(diǎn)node.deployer-4.2.14.tar.gz 并解壓到/usr/local/otter_node

192.168.140.24

因?yàn)閛tter的配置信息存儲(chǔ)在mysql中,所有還有一個(gè)初始化腳本:

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

網(wǎng)上和otter文檔均提及需要先安裝manager,我仔細(xì)看了下,是因?yàn)閙anager是被動(dòng)連接的(很多應(yīng)用的管理控制臺(tái)是主動(dòng)去連接服務(wù)的,otter則把所有的配置都存儲(chǔ)在了manager中),node啟動(dòng)的時(shí)候會(huì)連接到manager獲取同步相關(guān)的信息。生成nid這一步倒沒(méi)什么關(guān)系,事后不一致修改也可以。

manager配置

首先在計(jì)劃保存otter配置信息的mysql數(shù)據(jù)庫(kù)執(zhí)行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 ## 建議改成所在服務(wù)器的ip,而不是默認(rèn)的127.0.0.1,否則到時(shí)候啟動(dòng)的時(shí)候所有的連接指向的目標(biāo)都是localhost,因?yàn)橥ǔtter跑在linux環(huán)境,很多l(xiāng)inux環(huán)境是沒(méi)有圖形化界面的,感覺(jué)這是個(gè)bug

## otter manager http port

otter.port = 8088 ## 如果非專用或者已經(jīng)有了一些web應(yīng)用在同一臺(tái)服務(wù)器,建議改成其他的避免端口沖突,這里的端口號(hào)要和jetty.xml中的保持一致,這里也是,直接用個(gè)非8080端口就更友好了,比如weblogic 控制臺(tái)7001,es控制臺(tái)9200,rabbitmq控制臺(tái)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配置信息維護(hù)的數(shù)據(jù)庫(kù)地址,庫(kù)名一般為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

上述配置修改之后,就可以啟動(dòng)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.

接下去就可以驗(yàn)證manager了。

用瀏覽器打開(kāi)http://192.168.160.24:8088/

默認(rèn)情況下,進(jìn)去的是匿名賬戶,只有只讀查看的權(quán)限,登錄為管理員才可以有操作權(quán)限,管理員賬號(hào)為admin/admin(otter自帶)。

注:默認(rèn)情況下是沒(méi)有channel的,因?yàn)楣P者的環(huán)境已經(jīng)配置了在單向同步的,所以有顯示一個(gè)channel。

manager啟動(dòng)之后,需要配置使用的zk、canal、node等地址、端口等信息。

zk配置

node配置

端口建議不要修改。

機(jī)器添加完成以后,機(jī)器管理的列表中第一列就是nid(這個(gè)就是到時(shí)候要保存到node/conf/nix文件中的值),如下:

上述三種類型的節(jié)點(diǎn)配置完成后,manager前期的配置就完成了。

manager配置完成之后,需要先啟動(dòng)相應(yīng)的node節(jié)點(diǎn),node節(jié)點(diǎn)啟動(dòng)之后,就可以配置真正的同步任務(wù)了。

node配置

首先cd NODE_HOME/conf

echo 1 > nid

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

[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

啟動(dòng)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 ......

此時(shí)再查看manager控制臺(tái)的機(jī)器管理,可以發(fā)現(xiàn)機(jī)器狀態(tài)為已啟動(dòng),如下:

manager/node都啟動(dòng)之后,就可以真正開(kāi)始配置同步任務(wù)了。

同步任務(wù)配置

分為下列幾個(gè)步驟(不熟悉術(shù)語(yǔ)概念的建議回到頁(yè)首重新review下):

1、添加canal

點(diǎn)位可以通過(guò)在主庫(kù)執(zhí)行show master status和select unix_timestamp()得到。

2、添加數(shù)據(jù)源

設(shè)置主庫(kù)和從庫(kù)的數(shù)據(jù)源

3、添加同步表

4、添加channel

5、添加pipeline

pipeline里面主要選擇節(jié)點(diǎn)和canal。

6、添加映射關(guān)系

7、啟動(dòng)同步

注意:默認(rèn)會(huì)同步ddl,對(duì)于分庫(kù)分表同步到從庫(kù)的時(shí)候,建議不要同步ddl以及跳過(guò)ddl。

插入數(shù)據(jù)試試看吧。。。。

otter同步異常問(wèn)題排查與監(jiān)控

筆者一開(kāi)始啟動(dòng)后,確實(shí)報(bào)錯(cuò)了,如下:

TODO,等后續(xù)梳理確保都可重復(fù)執(zhí)行之后,再補(bǔ)充。

otter簡(jiǎn)單性能測(cè)試

創(chuàng)建了一個(gè)簡(jiǎn)單的表使用mysqlslap進(jìn)行測(cè)試。

注:我們因?yàn)榄h(huán)境受限,zk、manager、node、mysql主從均在一臺(tái)服務(wù)器上,配置為16c/8GB阿里云服務(wù)器,無(wú)swap。

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

測(cè)試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等待了,一般來(lái)說(shuō)數(shù)據(jù)庫(kù)服務(wù)器io等待持續(xù)到10%之后,系統(tǒng)就很慢了,所以總體來(lái)說(shuō),如果不做太多的字段重命名、二次處理,otter性能本身還是不錯(cuò)的。

otter高可用

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

在otter中配置canal的主從切換依賴于groupKey,后面測(cè)了會(huì)補(bǔ)充。

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。