mysql環境已經都安裝就緒
otter用的mysql庫的用戶權限配置:
grant all privileges on *.* to 'canal'@'%'identified by 'canal';
grant all privileges on *.* to'canal'@'localhost' identified by 'canal';
delete from user where user='';
flush privileges;
安裝otter依賴的幾個包
aria2-1.17.1.tar.gz
jdk-8u111-linux-x64.rpm
manager.deployer-4.2.13.tar.gz
node.deployer-4.2.13.tar.gz
zookeeper-3.4.10.tar.gz
1.安裝jdk
直接rpm安裝即可
2.安裝zookeeper(端口2181)
tar -xvzf zookeeper-3.4.10.tar.gz -C/usr/local/
cd /usr/local/zookeeper-3.4.10
mkdir data
mv conf/zoo_sample.cfg conf/zoo.cfg
編輯這個配置文件中修改一下dataDir=/usr/local/zookeeper/data
autopurge.purgeInterval=1
修改bin/zkEnv.sh腳本
將ZOO_LOG_DIR="."修改爲ZOO_LOG_DIR="/usr/local/zookeeper/data"
將ZOO_LOG4J_PROP=”INFO,CONSOLE”修改爲ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
修改bin/zkServer.sh腳本:
vi /usr/local/zookeeper/bin/zkServer.sh
將ZOOBIN="${BASH_SOURCE-$0}" 修改爲ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
修改bin/zkCli.sh腳本:
vi /usr/local/zookeeper/bin/zkCli.sh
將ZOOBIN="${BASH_SOURCE-$0}" 修改爲ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
建立軟連接
ln -s /usr/local/zookeeper/bin/zkServer.sh /usr/local/bin/zk-server
ln -s /usr/local/zookeeper/bin/zkCli.sh/usr/local/bin/zk-cli
啓動:zk-server start
關閉:zk-server stop
3.安裝manager
tar -xvzf manager.deployer-4.2.13.tar.gz -C/soft/otter/manager/
獲取初始化數據庫腳本
wgethttps://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
執行
mysql -uroot -poracle <otter-manager-schema.sql
cd /soft/otter/manager/conf
vim otter.properties
========================================
## otter manager domain name #修改爲正確訪問ip(內網訪問配置內網地址外網訪問配置外網地址),生成URL使用
otter.domainName = 172.16.32.152
## otter manager http port
otter.port = 8080
## 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://172.16.32.104:3307/otter
otter.database.driver.username = canal
otter.database.driver.password = canal
## default zookeeper address,修改爲正確的地址,手動選擇一個地域就近的zookeeper集羣列表,zookeeper默認端口 2181
otter.zookeeper.cluster.default = 172.16.32.152:2181
========================================
其他暫時不用改
啓動manager
/usr/local/manager/bin/startup.sh
觀察/usr/local/manager/logs/manager.log
最後幾行輸出
[root@host-172-16-32-152 manager]# tail -flogs/manager.log
OpenJDK 64-Bit Server VM warning: ignoringoption MaxPermSize=128m; support was removed in 8.0
2018-02-10 23:10:17.962 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## start themanager server.
2018-02-10 23:10:26.029 [] INFO com.alibaba.otter.manager.deployer.JettyEmbedServer - ##Jetty EmbedServer is startup!
2018-02-10 23:10:26.029 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## the managerserver is running now ......說明正常啓動
測試用網頁訪問172.16.32.152:8080正常即可
node部分:
4.aria2安裝配置
它是一個文件通道來保證需要同步的數據通過極快的速度同步到需要同步的服務器上
需要提前安裝gcc相關包
yum install gcc
tar -xvzf aria2-1.17.1.tar.gz -C/soft/otter/aria2/
cd /soft/otter/aria2/aria2-1.17.1
./configure
make
make install
驗證是否安裝成功
aria2c -v
5.安裝node
#mkdir /usr/local/node
tar -xvzf node.deployer-4.2.13.tar.gz -C /usr/local/node
cd /usr/local/node
#nid配置node的ID多個node協同工作時不能重複
echo 1 > conf/nid
修改配置文件
vim conf/otter.properties
主要確認manager地址是否正確
## otter arbitrate & node connectmanager config
otter.manager.address = 172.16.32.152:1099
配置完成之後我們不要着急啓動node,因爲啓動了node要是manager沒有配置是沒法建立連接的,順序是先配置好manager在開啓node.
6.部署canal
官網地址:https://github.com/alibaba/canal/releases #下載canal.deployer
mkdir/usr/local/canal
tar zxvf canal.deployer-1.0.24.tar.gz -C /usr/local/canal
7.關聯manager,node,zookeeper
(1)網頁訪問172.16.32.152:8080
點擊右上角圖標
默認超管用戶名密碼都是admin
選擇機器管理添加zookeeper
選擇機器管理添加node
配置好node的一些參數
· 機器名稱:可以隨意定義,方便自己記憶即可
· 機器ip:對應node節點將要部署的機器ip,如果有多ip時,可選擇其中一個ip進行暴露. (此ip是整個集羣通訊的入口,實際情況千萬別使用127.0.0.1,否則多個機器的node節點會無法識別)
· 機器端口:對應node節點將要部署時啓動的數據通訊端口,建議值:2088
· 下載端口:對應node節點將要部署時啓動的數據下載端口,建議值:9090
· 外部ip :對應node節點將要部署的機器ip,存在的一個外部ip,允許通訊的時候走公網處理。
· zookeeper集羣:爲提升通訊效率,不同機房的機器可選擇就近的zookeeper集羣.
啓動node
bin/startup.sh
root@host-172-16-32-152 node]# catlogs/node/node.log
OpenJDK 64-Bit Server VM warning: ignoringoption MaxPermSize=128m; support was removed in 8.0
2018-02-10 23:34:02.538 [main] WARN com.alibaba.otter.shared.common.utils.AddressUtils - Failed to retrivinglocal host ip address, try scan network card ip address. cause:host-172-16-32-152: host-172-16-32-152: Name or service not known
2018-02-10 23:34:02.570 [main] WARN com.alibaba.otter.shared.common.utils.AddressUtils - Failed to retrivinglocal host ip address, try scan network card ip address. cause:host-172-16-32-152: host-172-16-32-152: Name or service not known
2018-02-10 23:34:02.630 [main] INFO com.alibaba.otter.node.deployer.OtterLauncher- INFO ## the otter server is running now ......
NODE 啓動成功
配置單向複製鏈路:
先在源庫和目標庫新建一個測試表
table級別寫表名即可,在驗證連接表和下面的schema&table這裏都能正常通過
schema級別複製寫.*即可,在驗證連接表這裏會提示失敗,但是查詢schema&table是能成功的
配置canal:
同步管理
在主庫中增加、修改、刪除數據,在從庫中會準實時跟着變更
附:
遇到的問題:
一、人爲操作從庫DDL,導致與主庫的DDL衝突,報錯提示表已經存在,點channel的推送按鈕後狀態變爲掛起,數據無法正常同步,之後想嘗試在主庫節點drop此表,依然無法同步成功。
解決方法:
(1) 停止channel
(2) 編輯pipeline,選擇高級選項,勾選跳過DDL異常
二、增量數據同步問題
源端表數據不停增加
此時需要在此基礎上先進行數據初始化,然後使用otter新建的channel來同步增量數據
(1) 使用mysqldump導出表數據並記錄當前位置
(2) 導入目標數據庫表中
(3) 編輯channel中的canal裏的位點信息
(4) 啓動對應的channel將增量數據補齊
##
存在問題:1、添加新庫無法同步
解決辦法:主從手動創建需要的DB,主庫添加的表及數據即可同步
2、刪除DB不同步也不報錯
解決方法:手動刪除MS即可
3、主庫添加新庫表及數據,在管理端CHANNEL中顯示掛起
4、出現數據衝突解決辦法:具體看監控日誌信息.
重新點”解掛”可以,不選擇跳過DDL異常是無法解掛
##更多細節等待測試,數據一致性測試等
3.雙主部署
1、機器管理配置zk
配置2個node節點
最後可見配置:
數據源配置:
配置管理 --> 數據源配置,配置104機、11機兩個MySQL 數據源
數據表配置:
配置管理 --> 數據表配置,配置A機、B機兩個MySQL 數據源所需要同步的數據表(自己的數據庫,如hll),其中table name配置如果想同步所有表則配置爲.*,否則則配置對應表名即可
配置後如圖
Canal配置
將canal看作是A、B兩機的從庫即可,github上解釋道,canal模擬mysql slave的交互協議,僞裝自己爲mysql slave,向mysql master發送dump協議。
配置管理 --> canal配置,配置A機、B機兩個canal。實質上兩個canal分別運行在A、B兩機上的Node節點上。配置如下,其他使用默認配置。
同步任務配置
同步管理 --> Channel管理,添加一個Channel
添加兩個Pipeline,如圖是其中一個方向,另外一個方向Select、Load機器相反。canal選擇與Node機器選擇一致方向,即要與Select機器一樣。選擇其中一個Pipeline作爲主站點,並在高級設置中勾選支持ddl同步,另外一個主站點勾選否,支持ddl同步選擇否
另外一個pipeline
添加映射關係列表
104到11關係
11到104關係
最後啓動:
(1) 基本原則
獲取兩端的初始化腳本創建retl庫
測試一下複製
根據文檔中說的是,只能在主站點上執行ddl操作,非主站點上
目前遇到的問題:
(1)沒主鍵的表
沒有主鍵的表複製會出現數據混亂的情況(很簡單的測試已經測試出來了)
出現重複數據
目前雲平臺上知道的比較關鍵的沒有主鍵的表就是首頁統計的最後數據表
(2)只能在當前的主站點上執行DDL語句
建表試過了,可以複製到非主站點上去,非主站點上建表等DDL語句是無法複製的
並且在主站點上如果有建庫操作,非主站點上無法複製建庫操作
(3)支持部分ddl語句
支持create table / drop table / alter table /truncate table / rename table / create index / drop index,其他類型的暫不支持
這個不能複製,已經測試過了,包括create user也不能,那麼數據庫裏如果創建新用戶的話,目標表就只能重新全表導入了,比較麻煩,修改密碼的話可以使用update+flush privileges來實現
(4)由於第三點問題不支持複製創建觸發器的語句,所以使用pt-osc進行修改也許是可以被複制的。。。