Otter入門簡介

前言:最近接了一個新的需求,須要在倫敦機房作一個數據同步方案,同步到北京。由於以前搭建過公網之間的同步,一是延遲比較大,另外一個是由於同步常常會斷。臨時解決方案就是搭建一個多源複製,隔斷時間全量一次數據到北京機房,可是這個傳輸時間也是個頭疼的問題java

 

1、Otter簡介

1.1  otter是什麼?

Ottter是由阿里開源的一個數據同步產品,它的最初的目的是爲了解決跨國異地機房雙A架構,兩邊可寫的場景,開發時間從2011年7月份一直持續到如今,目前阿里巴巴B2B內部的本地/異地機房的同步需求基本全上了Otter。node

Otter基於數據庫增量日誌解析,支持mysql/oracle數據庫進行同步,在最新的v4.2.13已經支持mysql5.7以及阿里雲提供的RDS數據庫(使用RDS童鞋的福音)mysql

1.2  otter工做原理

  • db : 數據源以及須要同步到的庫
  • Canal : 用戶獲取數據庫增量日誌
  • manager : 配置同步規則設置數據源同步源等
  • zookeeper : 協調node進行協調工做
  • node : 負責任務處理處理接受到的部分同步工做

1.3  otter的特性

  • 使用純JAVA開發,佔時資源比較高
  • 基於Canal獲取數據庫增量日誌,Canal是阿里爸爸另一個開源產品
  • 使用manager(web管理)+node(工做節點),manager負責配置監控,node負責處理任務
  • 基於zookeeper,解決分佈式狀態調度的,容許多node節點之間協同工做
  • 使用aria2多線程傳輸技術,對網絡依賴帶寬依賴較低

1.4  otter能解決什麼問題

一、異構庫同步linux

Otter支持從Mysql同步到Mysql/oracle,咱們能夠把mysql同步到oraclegit

二、單機房同步github

能夠做爲一主多從同步方案,對於單機房內網來講效率很是高,還能夠作爲數據庫版本升級,數據表遷移,二級索引等這類功能web

三、異地機房同步算法

異地機房同步能夠說是Otter最大的亮點之一,能夠解決國際化問題把數據從國內同步到國外來提供用戶使用,在國內場景能夠作到數據多機房容災sql

四、雙向同步數據庫

雙向同步是在數據同步中最難搞的一種場景,Otter能夠很好的應對這種場景,Otter有避免迴環算法和數據一致性算法兩種特性,保證雙A機房模式下,數據保證最終一致性

五、文件同步

站點鏡像,進行數據複製的同時,複製關聯的圖片,好比複製產品數據,同時複製產品圖片

 

2、Manager安裝配置

2.1  環境初始化

咱們把下載好的文件存放到/home/work/optar目錄下:

[root@localhost optar]# ls
aria2-1.17.1.tar.gz         jdk-7u79-linux-x64.tar.gz       mysql-5.7.18.tar.gz
dbproxy.tar.gz              jdk-8u65-linux-x64.tar.gz       node.deployer-4.2.13.tar.gz
go1.8.1.linux-amd64.tar.gz  manager.deployer-4.2.13.tar.gz  zookeeper-3.4.6.tar.gz

薦使用OneinStack進行環境配置(默認會更新GCC,cmake等減小依賴出現的問題)

oneinstack官網地址

wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
tar xzf oneinstack-full.tar.gz
cd oneinstack
./install.sh

2.2  安裝配置JDK

JDK配置也能夠經過上方oneinstack中選擇web服務tomcat來配置

首先咱們應該要安裝配置JDK,應爲zookeeper和Otter-manager都依賴與java環境

tar -zxvf jdk-7u79-linux-x64.tar.gz
mv jdk1.7/ /usr/local/

設定JAVA_HOME環境變量,編輯vim /etc/profile 加入以下內容

export JAVA_HOME=/usr/local/jdk1.7
export JRE_HOME=/usr/local/jdk1.7/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:
export PATH=$JAVA_HOME/bin:$PATH

更改後,執行命令使其生效

source /etc/profile

執行 java -version 會看到以下版本信息證實已經安裝成功

[root@localhost local]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

2.3  安裝zookeeper

安裝配置zookeeper單機模式 

cd /home/work
tar zxvf zookeeper-3.4.5-cdh4.3.0.tar.gz
mv zookeeper-3.4.5-cdh4.3.0 zookeeper
cd /home/work/zookeeper/
mv conf/zoo_sample.cfg conf/zoo.cfg
mkdir -p /home/work/data/zookeeper/{data,log}
cd /home/work/data/zookeeper/data
echo 1 > myid #將本節點id設定到data/myid文件中

修改bin/zkEnv.sh腳本:

將ZOO_LOG_DIR="."修改成

ZOO_LOG_DIR="/home/work/data/zookeeper/log"

將ZOO_LOG4J_PROP=」INFO,CONSOLE」修改成

ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

修改bin/zkServer.sh腳本:

將ZOOBIN="${BASH_SOURCE-$0}"修改成

ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`

修改bin/zkCli.sh腳本:

將ZOOBIN="${BASH_SOURCE-$0}"修改成

ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`

創建軟鏈接到PATH:

ln -s /home/work/zookeeper/bin/zkServer.sh /usr/local/bin/zk-server
ln -s /home/work/zookeeper/bin/zkCli.sh /usr/local/bin/zk-cli

使用以下命令便可啓動zookeeper:

zk-server start
#如下輸出爲運行成功
JMX enabled by default
Using config: /tmp/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

2.4  安裝manager

準備工做作好了咱們來一同安裝manager

mkdir /home/work/manager
cd /home/work/optar
tar zxvf manager.deployer-4.2.13.tar.gz  -C /home/work/manager

安裝manager的數據庫

wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql 
mysql -uroot -p
#輸入mysql密碼
source /home/work/manager/otter-manager-schema.sql

修改vim conf/otter.properties 配置文件

## otter manager domain name #修改成正確訪問ip(內網訪問配置內網地址外網訪問配置外網地址),生成URL使用
otter.domainName = 127.0.0.1    
## otter manager http port
otter.port = 8080

## otter manager database config ,修改成正確數據庫信息
otter.database.driver.url = jdbc:mysql://127.0.0.1:3306/otter
otter.database.driver.username = root
otter.database.driver.password = hello

## default zookeeper address,修改成正確的地址,手動選擇一個地域就近的zookeeper集羣列表,zookeeper默認端口 2181
otter.zookeeper.cluster.default = 127.0.0.1:2181

啓動manager

./bin/startup.sh

PS:manager 編譯時間大約須要1分鐘

檢查日誌:

tailf logs/manager.log

以下輸出則爲啓動成功:

2017-11-04 11:08:20.527 [] INFO  com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## start the manager server.
2017-11-04 11:08:45.420 [] INFO  com.alibaba.otter.manager.deployer.JettyEmbedServer - ##Jetty Embed Server is startup!
2017-11-04 11:08:45.420 [] INFO  com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## the manager server is running now ......

咱們在訪問咱們設置的能夠訪問的地址的8080端口,注意要關掉8080的防火牆不然一直會訪問不通

看到以下顯示咱們的manager就已經配置好了

 

3、Node的安裝配置

3.1  安裝配置aria2

咱們在介紹otter的特性裏面有說起到aria2,它是一個文件通道來保證須要同步的數據經過極快的速度同步到須要同步的服務器上

cd /home/work/
tar zxvf aria2-1.17.1.tar.gz
mv aria2-1.17.1 aria2
cd aria2
./configure
make
make install
# 驗證安裝是否成功
aria2c -v
# 會輸出
aria2 version 1.17.1	
Copyright (C) 2006, 2013 Tatsuhiro Tsujikawa

3.2  安裝配置node

接下來咱們來配置node,node主要負責接受manage下發任務的處理

mkdir /home/work/node
tar xf node.deployer-4.2.13.tar.gz
cd /home/work/node/
# nid配置node的ID多個node協同工做時不能重複
echo 1 > conf/nid
# 修改配置文件
vim conf/otter.properties
# 主要是確認鏈接manager地址是否正確(這裏使用服務器內網地址進行配置)
otter.manager.address = 10.144.159.182:1099

配置完成以後咱們不要着急啓動node,由於啓動了node要是manager沒有配置是無法創建鏈接的,順序是先配置好manager在開啓node.

3.3  關聯manager,zookeeper和node

最後咱們來吧manager,zookeeper和node關聯起來,咱們先進入manager的管理界面,點擊右邊的登錄:

使用默認用戶名密碼admin:admin登錄進去:

找到機器管理的zookeeper配置點擊進去:

選擇添加一個zookeeper:

填好本身本地的zookeeper地址和端口保存:

在選擇機器管理的node管理點擊進去:

選擇添加一個node:

配置好node的一些參數

  • 機器名稱:能夠隨意定義,方便本身記憶便可
  • 機器ip:對應node節點將要部署的機器ip,若是有多ip時,可選擇其中一個ip進行暴露. (此ip是整個集羣通信的入口,實際狀況千萬別使用127.0.0.1,不然多個機器的node節點會沒法識別)
  • 機器端口:對應node節點將要部署時啓動的數據通信端口,建議值:2088
  • 下載端口:對應node節點將要部署時啓動的數據下載端口,建議值:9090
  • 外部ip :對應node節點將要部署的機器ip,存在的一個外部ip,容許通信的時候走公網處理。
  • zookeeper集羣:爲提高通信效率,不一樣機房的機器可選擇就近的zookeeper集羣.

node這種設計,是爲解決單機部署多實例而設計的,容許單機多node指定不一樣的端口:

這個時候就能夠啓動咱們的node了:

cd /home/work/node/bin/
./startup.sh

注意:若是發現啓動不了能夠查看node的日誌

等帶一段時間後刷新會發現狀態已經變爲了啓動,這個時候就已經成功了:

而且這個時候咱們在zookeeper頁面點擊查看選項能夠看到zookeeper已經在運行了:

注意:若是發現一直都是未啓動狀態能夠查閱/tmp/node/logs中的日誌


4、單向同步配置實踐

4.1  準備工做

建一個測試庫

別注意:庫名中千萬不要帶有符號好比"-"這種符號會直接引發同步開啓不成功(須要驗證)

create database dqd_test;

CREATE TABLE `dqd_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

4.2  配置manager

首先咱們須要配置數據鏈接,也就是數據源

添加完以後必定要驗證一下

一樣的操做添加另一個數據源

4.3  配置同步數據表

配置好數據源後進行須要同步的數據表的配置

4.4  配置同步規則

在同步管理裏面添加一個channel

添加配置好一個channel使用的master庫

4.5  開啓同步

 

 

至此,簡單的一個單向同步方案完。可是還有不少問題沒有解決:好比otter的監控,數據一致性校驗,otter同步比mysql跨公網同步的優點(在網絡中斷時,otter和原生的跨公網同步有什麼區別),otter的限制等等。路漫漫兮其修遠......

參考博客:https://my.oschina.net/wenzhenxi/blog?catalog=3663174&temp=1509356134467

爲了方便你們交流,本人開通了微信公衆號(關注看更多精彩)和QQ羣,QQ羣1(291519319)和QQ羣2(659336691)。喜歡技術的一塊兒來交流吧

相關文章
相關標籤/搜索