基於MySQL和Otter實現生產環境安全的數據同步及查詢

前言


在雲平臺的日常運維工作中,有很多故障排查和數據覈對的場景,爲了給全線運維人員(含部分開發和運營分析人員)提供現網數據的實時查詢,我們使用MySQL和開源工具otter搭建了一套數據查詢和管理系統,可以查詢平臺各資源池現網當前的數據。並與現網保持準實時同步(秒級延時)。


查詢模塊的主要組件是MySQL,納管線上業務系統的核心數據庫,用戶使用頻次極高,此臺MySQL中的部分核心數據還作爲其他資源池的源數據,實時同步給異地機房。負責數據實時同步的otter管理節點與MySQL部署在同一物理機上,是雲平臺所有資源池中查詢模塊的中樞節點。


首先,介紹一下開源工具Otter(內容引自GitHub)


Otter是由阿里提供的基於數據庫增量日誌解析,準實時同步到本機房或異地機房MySQL數據庫的一個分佈式數據庫同步系統,工作原理如下:



v2-2c7a769b5f5eebe38201a05dfb13c28a_hd.jpg



  • db:數據源以及需要同步到的庫;

  • Canal:用戶獲取數據庫增量日誌;

  • manager:配置同步規則設置數據源同步源等;

  • zookeeper:協調node進行協調工作;

  • node:負責任務處理處理接受到的部分同步工作。


一、Otter的特性


1、純JAVA開發,佔時資源比較高


2、基於Canal獲取數據庫增量日誌數據,Canal是阿里另一款開源產品


下面是Canal的原理圖:

已經爲大家精心準備了大數據的系統學習資料,從Linux-Hadoop-spark-......,需要的小夥伴可以點擊


v2-833bc49aefcd367cfd398086047189e6_hd.jpg


基於MySQL主備複製原理:



v2-c3c35ab67ace9ce7f9168c2bdb6db933_hd.jpg



  • MySQL master 將數據變更寫入二進制日誌( binary log, 其中記錄叫做二進制日誌事件binary log events,可以通過 show binlog events 進行查看);

  • MySQL slave 將 master 的 binary log events 拷貝到它的中繼日誌(relay log);

  • MySQL slave 重放 relay log 中事件,將數據變更反映它自己的數據。


Canal工作原理:


  • Canal 模擬 MySQL slave 的交互協議,僞裝自己爲 MySQL slave ,向 MySQL master 發送dump 協議;

  • MySQL master 收到 dump 請求,開始推送 binary log 給 slave (即 canal );

  • Canal 解析 binary log 對象(原始爲 byte 流)。


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


1)manager運行時推送同步配置到node節點,負責配置監控


2)node節點將同步狀態反饋到manager上,負責處理任務


4、基於zookeeper,解決分佈式狀態調度的,允許多node節點之間協同工作


5、使用aria2多線程傳輸技術,對網絡依賴帶寬依賴較低


二、Otter能解決什麼問題


1、異構庫同步


MySQL -> MySQL/Oracle。(目前開源版本只支持MySQL增量,目標庫可以是MySQL或者Oracle,取決於Canal的功能)


2、單機房同步 (數據庫之間RTT < 1ms)


  • 數據庫版本升級;

  • 數據表遷移;

  • 異步二級索引。


3、異地機房同步(是Otter最大的亮點之一,可以解決國際化問題把數據從國內同步到國外提供用戶使用,在國內場景可以做到數據多機房容災)


機房容災


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


1)避免迴環算法 (通用的解決方案,支持大部分關係型數據庫)


2)數據一致性算法 (保證雙A機房模式下,數據保證最終一致性,亮點)


5、文件同步


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


單機房複製示意圖:



v2-087c4735e7b42ae0dcab550a8e022518_hd.jpg



說明:


  • 數據on-Fly,儘可能不落地,更快的進行數據同步. (開啓node loadBalancer算法,如果Node節點S+ETL落在不同的Node上,數據會有個網絡傳輸過程);

  • node節點可以有failover / loadBalancer。


異地機房複製示意圖:



v2-b95f25c21b2153fa0040d6d58178002f_hd.jpg



說明:


  • 數據涉及網絡傳輸,S/E/T/L幾個階段會分散在2個或者更多Node節點上,多個Node之間通過zookeeper進行協同工作 (一般是Select和Extract在一個機房的Node,Transform/Load落在另一個機房的Node);

  • node節點可以有failover / loadBalancer. (每個機房的Node節點,都可以是集羣,一臺或者多臺機器)。


關於Otter的調度模型、數據入庫算法、一致性、高可用性和擴展性等內容,可以登錄GitHub瞭解。


已經爲大家精心準備了大數據的系統學習資料,從Linux-Hadoop-spark-......,需要的小夥伴可以點擊


裏面有詳細的介紹,本文不再贅述,下面重點說明一下otter的安裝和使用。


三、安裝部署


移動雲業務需要數據彙總,需將多個主數據庫同步彙總到一個從數據庫中,方便數據統計分析。Otter中間件則滿足了此需求,相對比多源複製,更加靈活和可塑性。


前面簡單介紹了Otter的基本信息,下面開始搭建一個Otter環境,因爲一個Otter需要Manage+node+數據庫還有很多的依賴,這裏我們先來搭建Otter的管理服務器Manager。


1、環境準備


1)阿里軟件


Otter(manager、node)軟件:github.com/alibaba/otte


Manager數據庫初始化腳本:raw.githubusercontent.com


2)集羣


Zookeeper:download.csdn.net/downl


3)JAVA


JDK:測試環境使用yum安裝1.6以上版本


4)數據庫


Mysql5.7:dev.mysql.com/downloads


5)操作系統


CentOS 7.1.1503 (Core):centos.org/download/


版本信息



v2-1a232b12624baffd9829c0c3e8d4c6c1_hd.jpg



2、軟件安裝


1)操作系統安裝


2)java jdk1.6


安裝完成操作系統後,使用yum安裝jdk1.6以上版本(含1.6)


yum -y install java-1.6.0-openjdk.x86_64


3)安裝MySQL數據庫


4)安裝集羣軟件ZooKeeper


下載安裝包後解壓即可,不需要編譯安裝。然後進行配置:


① 修改tickTime、clientPort、dataDir參數


vim /zookeeper-3.4.8/conf/zoo.cfg


tickTime :時長單位爲毫秒,爲zk使用的基本時間度量單位。例如,1 * tickTime是客戶端與zk服務端的心跳時間,2 * tickTime是客戶端會話的超時時間。


tickTime的默認值爲2000毫秒,更低的tickTime值可以更快地發現超時問題,但也會導致更高的網絡流量(心跳消息)和更高的CPU使用率(會話的跟蹤處理)。


clientPort :zk服務進程監聽的TCP端口,默認情況下,服務端會監聽2181端口。


dataDir :無默認配置,必須配置,用於配置存儲快照文件的目錄。


② 執行下面命令啓動server


cd /zookeeper-3.4.8/bin/ 

./zkServer.sh start


③ 查看是否啓動成功


ps -ef |grep zookeeper


5)安裝阿里otter(manager、node)


① 初始化manager的otter數據庫


連接安裝好的mysql數據庫,在數據庫軟件中創建otter數據庫,在操作系統命令行執行:


mysql -uroot -pxxxx otter <otter-manager-schema.sql


② 解壓manager安裝包到指定目錄,並做如下修改


vim /otter/conf/otter.properties

otter.domainName=本機IP

otter.port = web訪問端口

otter.zookeeper.cluster.default=zookeeper server ip


③ cd /otter/bin執行shstartup.sh,查看 vim /otter/logs/manager.log,出現以下信息說明manager啓動成功



v2-b945030e9a28e51d24135a8d020a762e_hd.png



④ 訪問本機ip+port,可以看到manager管理平臺,使用匿名用戶只能查看,使用admin用戶可以操作配置



v2-39bd084b3ab2b49fb12517ddfbc30b92_hd.jpg



⑤ 安裝node,在manager頁面爲node定義配置信息,並生一個唯一id,首先訪問manager頁面的機器管理頁面,點擊添加機器按鈕並配置node的一些參數



v2-0fd5a0f6c858c731d2c12ec636d040e2_hd.jpg



機器名稱:自定義,方便記憶即可


機器IP :對應node節點將要部署的機器ip,如果有多ip時,可選擇其中一個ip進行暴露(此ip是整個集羣通訊的入口,實際情況千萬別使用127.0.0.1,否則多個機器的node節點會無法識別)


機器端口:node數據通信端口,建議默認2088


下載端口:node數據下載端口,建議默認9090


外部地址:node部署的物理機外網IP,存在一個外部ip允許通訊的時候走公網處理,沒有可以不寫。


Zookeeper集羣:zookeper server ip


⑥ 機器添加完成後,跳轉到機器列表頁面,獲取對應的機器序號nid


⑦ 解壓node安裝包到指定目錄,將第五步生成的nid寫入conf目錄下的nid文件


echo nid> /node/conf/nid


⑧ 修改 /node/conf/otter.properties文件


otter.manager.address = manager 安裝部署機器的IP+PORT


例如:


otter.manager.address = 192.168.165.200:1099


⑨ 啓動node


cd /node/bin

sh startup.sh


⑩ 驗證node


訪問 managerip:port/node_list.htm,查看對應節點狀態,如果變爲已啓動,說明node已經正常啓動。

已經爲大家精心準備了大數據的系統學習資料,從Linux-Hadoop-spark-......,需要的小夥伴可以點擊


v2-b78bf45fa8eba9d5bc0355ed7ed2fd5e_hd.jpg



3、同步配置


1)添加數據源-數據來源端



v2-d5aded0614374461e56517fff7789039_hd.jpg



2)添加數據源-數據落地端



v2-d52ea8e9e68ce7ba814cc48878f3a741_hd.jpg



3)添加需要同步的數據表-數據來源端



v2-6cd4cdc7b051f06698ae88228336037b_hd.jpg



4)添加需要同步的數據表-數據落地端



v2-500453fa7255859e1ba84b02c2745973_hd.jpg



5)添加canal





6)添加channel



v2-4d344d8e1d8f945255442dc1d3b0394b_hd.jpg



7)添加Pipeline



v2-2efc59dc1043ca769ba3200e19def4ac_hd.jpg


點擊上一步添加的channel1,添加pipeline。



v2-b4dc9535935bc2c23b6ed2f8b0e35186_hd.jpg



8)添加表映射關係



v2-7691ed0fb2c3aa4772c02480efa73868_hd.png



點擊上一步添加的pipeline test17,添加表映射關係。



v2-d5aded0614374461e56517fff7789039_hd.jpg



9)啓動channel


添加完成表映射關係後,回到channel頁面,啓動剛剛添加channel1。


10)測試同步


v2-39bd084b3ab2b49fb12517ddfbc30b92_hd.jpg


11)構建kerberos安全域


由於查詢涉及到現網數據的異地傳輸,數據安全保障工作十分重要,因此構建了Kerberos安全域。域內的組件互通,以及外部客戶端訪問域內組件,均需要經過kerberos的認證。


通過上述操作otter環境基本配置好了,並且搭建了zookeeper+manager環境,成功運行了otter-manager管理界面,並完成了數據同步測試。這樣我們初步完成了數據同步和查詢平臺的搭建。


四、數據查詢平臺的使用


1、訪問方法


推薦使用Navicat等工具,IP、端口、賬號、密碼等和原魔數臺相同。


可以將訪問頻次比較高的數據保存爲視圖。


不建議使用select * 或沒有任何條件的全表查詢,查詢數據前先查找對象表的主鍵,並使用主鍵過濾。


2、查詢模塊架構設計


查詢模塊的邏輯架可以設計爲星型結構,MySQL除作爲核心數據主節點,將核心數據分發到各資源池之外,其他資源池的數據不互通。





3、數據一致性整治


爲兼容數據表外鍵(外鍵關聯的表數據變更不能被同步),保證數據一致性,對出現不一致的表數據,採用點對點trigger觸發變更的方式,逐個建立關聯觸發器。



v2-b20493acbc74a7cf4cee4198d06f8d05_hd.jpg



總結


通過以上方式,我們就初步搭建了一套生產環境數據同步和查詢系統,可以滿足日常運維中大多數故障排查和數據覈對的場景,爲運維人員提供一種安全、實時和有效的數據查詢平臺。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章