您好,登錄后才能下訂單哦!
前言
在云平臺(tái)的日常運(yùn)維工作中,有很多故障排查和數(shù)據(jù)核對(duì)的場景,為了給全線運(yùn)維人員(含部分開發(fā)和運(yùn)營分析人員)提供現(xiàn)網(wǎng)數(shù)據(jù)的實(shí)時(shí)查詢,我們使用MySQL和開源工具otter搭建了一套數(shù)據(jù)查詢和管理系統(tǒng),可以查詢平臺(tái)各資源池現(xiàn)網(wǎng)當(dāng)前的數(shù)據(jù)。并與現(xiàn)網(wǎng)保持準(zhǔn)實(shí)時(shí)同步(秒級(jí)延時(shí))。
查詢模塊的主要組件是MySQL,納管線上業(yè)務(wù)系統(tǒng)的核心數(shù)據(jù)庫,用戶使用頻次極高,此臺(tái)MySQL中的部分核心數(shù)據(jù)還作為其他資源池的源數(shù)據(jù),實(shí)時(shí)同步給異地機(jī)房。負(fù)責(zé)數(shù)據(jù)實(shí)時(shí)同步的otter管理節(jié)點(diǎn)與MySQL部署在同一物理機(jī)上,是云平臺(tái)所有資源池中查詢模塊的中樞節(jié)點(diǎn)。
首先,介紹一下開源工具Otter(內(nèi)容引自GitHub)
Otter是由阿里提供的基于數(shù)據(jù)庫增量日志解析,準(zhǔn)實(shí)時(shí)同步到本機(jī)房或異地機(jī)房MySQL數(shù)據(jù)庫的一個(gè)分布式數(shù)據(jù)庫同步系統(tǒng),工作原理如下:
db:數(shù)據(jù)源以及需要同步到的庫;
Canal:用戶獲取數(shù)據(jù)庫增量日志;
manager:配置同步規(guī)則設(shè)置數(shù)據(jù)源同步源等;
zookeeper:協(xié)調(diào)node進(jìn)行協(xié)調(diào)工作;
node:負(fù)責(zé)任務(wù)處理處理接受到的部分同步工作。
一、Otter的特性
1、純JAVA開發(fā),占時(shí)資源比較高
2、基于Canal獲取數(shù)據(jù)庫增量日志數(shù)據(jù),Canal是阿里另一款開源產(chǎn)品
下面是Canal的原理圖:
已經(jīng)為大家精心準(zhǔn)備了大數(shù)據(jù)的系統(tǒng)學(xué)習(xí)資料,從Linux-Hadoop-spark-......,需要的小伙伴可以點(diǎn)擊
基于MySQL主備復(fù)制原理:
MySQL master 將數(shù)據(jù)變更寫入二進(jìn)制日志( binary log, 其中記錄叫做二進(jìn)制日志事件binary log events,可以通過 show binlog events 進(jìn)行查看);
MySQL slave 將 master 的 binary log events 拷貝到它的中繼日志(relay log);
MySQL slave 重放 relay log 中事件,將數(shù)據(jù)變更反映它自己的數(shù)據(jù)。
Canal工作原理:
Canal 模擬 MySQL slave 的交互協(xié)議,偽裝自己為 MySQL slave ,向 MySQL master 發(fā)送dump 協(xié)議;
MySQL master 收到 dump 請(qǐng)求,開始推送 binary log 給 slave (即 canal );
Canal 解析 binary log 對(duì)象(原始為 byte 流)。
3、典型管理系統(tǒng)架構(gòu),manager(web管理)+node(工作節(jié)點(diǎn))
1)manager運(yùn)行時(shí)推送同步配置到node節(jié)點(diǎn),負(fù)責(zé)配置監(jiān)控
2)node節(jié)點(diǎn)將同步狀態(tài)反饋到manager上,負(fù)責(zé)處理任務(wù)
4、基于zookeeper,解決分布式狀態(tài)調(diào)度的,允許多node節(jié)點(diǎn)之間協(xié)同工作
5、使用aria2多線程傳輸技術(shù),對(duì)網(wǎng)絡(luò)依賴帶寬依賴較低
二、Otter能解決什么問題
1、異構(gòu)庫同步
MySQL -> MySQL/Oracle。(目前開源版本只支持MySQL增量,目標(biāo)庫可以是MySQL或者Oracle,取決于Canal的功能)
2、單機(jī)房同步 (數(shù)據(jù)庫之間RTT < 1ms)
數(shù)據(jù)庫版本升級(jí);
數(shù)據(jù)表遷移;
異步二級(jí)索引。
3、異地機(jī)房同步(是Otter最大的亮點(diǎn)之一,可以解決國際化問題把數(shù)據(jù)從國內(nèi)同步到國外提供用戶使用,在國內(nèi)場景可以做到數(shù)據(jù)多機(jī)房容災(zāi))
機(jī)房容災(zāi)
4、雙向同步(雙向同步是在數(shù)據(jù)同步中最難搞的一種場景,Otter可以很好的應(yīng)對(duì)這種場景,Otter有避免回環(huán)算法和數(shù)據(jù)一致性算法兩種特性,保證雙A機(jī)房模式下,數(shù)據(jù)保證最終一致性)
1)避免回環(huán)算法 (通用的解決方案,支持大部分關(guān)系型數(shù)據(jù)庫)
2)數(shù)據(jù)一致性算法 (保證雙A機(jī)房模式下,數(shù)據(jù)保證最終一致性,亮點(diǎn))
5、文件同步
站點(diǎn)鏡像 (進(jìn)行數(shù)據(jù)復(fù)制的同時(shí),復(fù)制關(guān)聯(lián)的圖片,比如復(fù)制產(chǎn)品數(shù)據(jù),同時(shí)復(fù)制產(chǎn)品圖片)
單機(jī)房復(fù)制示意圖:
說明:
數(shù)據(jù)on-Fly,盡可能不落地,更快的進(jìn)行數(shù)據(jù)同步. (開啟node loadBalancer算法,如果Node節(jié)點(diǎn)S+ETL落在不同的Node上,數(shù)據(jù)會(huì)有個(gè)網(wǎng)絡(luò)傳輸過程);
node節(jié)點(diǎn)可以有failover / loadBalancer。
異地機(jī)房復(fù)制示意圖:
說明:
數(shù)據(jù)涉及網(wǎng)絡(luò)傳輸,S/E/T/L幾個(gè)階段會(huì)分散在2個(gè)或者更多Node節(jié)點(diǎn)上,多個(gè)Node之間通過zookeeper進(jìn)行協(xié)同工作 (一般是Select和Extract在一個(gè)機(jī)房的Node,Transform/Load落在另一個(gè)機(jī)房的Node);
node節(jié)點(diǎn)可以有failover / loadBalancer. (每個(gè)機(jī)房的Node節(jié)點(diǎn),都可以是集群,一臺(tái)或者多臺(tái)機(jī)器)。
關(guān)于Otter的調(diào)度模型、數(shù)據(jù)入庫算法、一致性、高可用性和擴(kuò)展性等內(nèi)容,可以登錄GitHub了解。
已經(jīng)為大家精心準(zhǔn)備了大數(shù)據(jù)的系統(tǒng)學(xué)習(xí)資料,從Linux-Hadoop-spark-......,需要的小伙伴可以點(diǎn)擊
里面有詳細(xì)的介紹,本文不再贅述,下面重點(diǎn)說明一下otter的安裝和使用。
三、安裝部署
移動(dòng)云業(yè)務(wù)需要數(shù)據(jù)匯總,需將多個(gè)主數(shù)據(jù)庫同步匯總到一個(gè)從數(shù)據(jù)庫中,方便數(shù)據(jù)統(tǒng)計(jì)分析。Otter中間件則滿足了此需求,相對(duì)比多源復(fù)制,更加靈活和可塑性。
前面簡單介紹了Otter的基本信息,下面開始搭建一個(gè)Otter環(huán)境,因?yàn)橐粋€(gè)Otter需要Manage+node+數(shù)據(jù)庫還有很多的依賴,這里我們先來搭建Otter的管理服務(wù)器Manager。
1、環(huán)境準(zhǔn)備
1)阿里軟件
Otter(manager、node)軟件:https://github.com/alibaba/otter/releases
Manager數(shù)據(jù)庫初始化腳本:https://raw.githubusercontent.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
2)集群
Zookeeper:http://download.csdn.net/download/jxplus/9451794
3)JAVA
JDK:測試環(huán)境使用yum安裝1.6以上版本
4)數(shù)據(jù)庫
Mysql5.7:http://dev.mysql.com/downloads/mysql/
5)操作系統(tǒng)
CentOS 7.1.1503 (Core):https://www.centos.org/download/
版本信息
2、軟件安裝
1)操作系統(tǒng)安裝
2)java jdk1.6
安裝完成操作系統(tǒng)后,使用yum安裝jdk1.6以上版本(含1.6)
yum -y install java-1.6.0-openjdk.x86_64
3)安裝MySQL數(shù)據(jù)庫
4)安裝集群軟件ZooKeeper
下載安裝包后解壓即可,不需要編譯安裝。然后進(jìn)行配置:
① 修改tickTime、clientPort、dataDir參數(shù)
vim /zookeeper-3.4.8/conf/zoo.cfg
tickTime :時(shí)長單位為毫秒,為zk使用的基本時(shí)間度量單位。例如,1 * tickTime是客戶端與zk服務(wù)端的心跳時(shí)間,2 * tickTime是客戶端會(huì)話的超時(shí)時(shí)間。
tickTime的默認(rèn)值為2000毫秒,更低的tickTime值可以更快地發(fā)現(xiàn)超時(shí)問題,但也會(huì)導(dǎo)致更高的網(wǎng)絡(luò)流量(心跳消息)和更高的CPU使用率(會(huì)話的跟蹤處理)。
clientPort :zk服務(wù)進(jìn)程監(jiān)聽的TCP端口,默認(rèn)情況下,服務(wù)端會(huì)監(jiān)聽2181端口。
dataDir :無默認(rèn)配置,必須配置,用于配置存儲(chǔ)快照文件的目錄。
② 執(zhí)行下面命令啟動(dòng)server
cd /zookeeper-3.4.8/bin/?
./zkServer.sh start
向AI問一下細(xì)節(jié)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。