it運(yùn)維全面Docker化之后,看京東彈性數(shù)據(jù)庫(kù)的最新實(shí)踐與突破!

發(fā)布日期:2018/01/10 08:00:00

前言:

京東彈性數(shù)據(jù)庫(kù)不是一個(gè)單一的產(chǎn)品,而是京東在對(duì)數(shù)據(jù)庫(kù)的使用、it運(yùn)維和開發(fā)過程中遇到的一系列問題的解決方案,和it運(yùn)維經(jīng)驗(yàn)的總結(jié)升華進(jìn)而形成的一套產(chǎn)品系列。

講師介紹:

it運(yùn)維

呂信,京東商城數(shù)據(jù)庫(kù)技術(shù)部資深架構(gòu)師,擁有多年數(shù)據(jù)產(chǎn)品研發(fā)及架構(gòu)經(jīng)驗(yàn)。在京東及國(guó)內(nèi)主導(dǎo)多種數(shù)據(jù)產(chǎn)品開發(fā)及社區(qū)建設(shè),積極活躍于數(shù)據(jù)產(chǎn)品領(lǐng)域,對(duì)數(shù)據(jù)庫(kù)及大數(shù)據(jù)領(lǐng)域各個(gè)產(chǎn)品具有豐富經(jīng)驗(yàn),目前在京東商城主導(dǎo)彈性數(shù)據(jù)庫(kù)研發(fā)及推廣使用。

京東彈性數(shù)據(jù)庫(kù)是一個(gè)產(chǎn)品系列,主要是解決數(shù)據(jù)庫(kù)的it運(yùn)維、使用和研發(fā)過程中的問題,具備動(dòng)態(tài)伸縮、高可用、查詢透明路由、集群化日志服務(wù)和自動(dòng)化it運(yùn)維等功能。下面將就京東彈性數(shù)據(jù)庫(kù)三個(gè)核心模塊的功能進(jìn)行詳細(xì)說明。

1.核心功能模塊:JED,提供數(shù)據(jù)查詢和寫入的自動(dòng)路由、自動(dòng)彈性伸縮、自動(dòng)FailOver、自動(dòng)負(fù)載調(diào)度和數(shù)據(jù)庫(kù)服務(wù)智能自治的功能。

(1)在線動(dòng)態(tài)擴(kuò)容

起初某個(gè)業(yè)務(wù)可能申請(qǐng)了4個(gè)分庫(kù),后面隨著業(yè)務(wù)的發(fā)展,數(shù)據(jù)量越來越大,可能需要擴(kuò)容到 8個(gè)分庫(kù),一般的數(shù)據(jù)庫(kù)中間件在擴(kuò)容時(shí),需要與業(yè)務(wù)研發(fā)部門協(xié)商一個(gè)業(yè)務(wù)低谷期停業(yè)務(wù),然后進(jìn)行擴(kuò)容,擴(kuò)容完畢后重新啟動(dòng)業(yè)務(wù)。為了解決這個(gè)問題,JED提供了在線動(dòng)態(tài)擴(kuò)容功能,擴(kuò)容只會(huì)對(duì)業(yè)務(wù)造成秒級(jí)影響,且無(wú)需人工介入。我們現(xiàn)在可以觸發(fā)自動(dòng)擴(kuò)容,設(shè)置的策略是當(dāng)磁盤的使用率達(dá)到80%,就自動(dòng)進(jìn)行擴(kuò)容。

(2)自動(dòng)Failover

Master一旦出現(xiàn)宕機(jī),哨兵檢測(cè)系統(tǒng)就會(huì)第一時(shí)間檢測(cè)到,會(huì)自動(dòng)觸發(fā)注冊(cè)在哨兵檢測(cè)系統(tǒng)中的Hook程序,Hook程序就會(huì)選擇一個(gè)最新的Slave替換Master,然后更新ETCD中的元數(shù)據(jù)信息,業(yè)務(wù)方的下一次請(qǐng)求就會(huì)發(fā)送新的Master上。

(3)兼容MySQL協(xié)議

JED是完全兼容MySQL協(xié)議的,即通過MySQL的Client端或者標(biāo)準(zhǔn)的JDBC Driver都可以連接到JED的Gate層,然后進(jìn)行查詢和計(jì)算。

(4)多源數(shù)據(jù)遷移

我們基于ghost進(jìn)行改造,開發(fā)了京東的it運(yùn)維數(shù)據(jù)傳輸和接入工具: JTransfer,實(shí)現(xiàn)了it運(yùn)維業(yè)務(wù)數(shù)據(jù)的動(dòng)態(tài)遷移。如果以前你的業(yè)務(wù)是運(yùn)行在MySQL上的,現(xiàn)在要遷到JED上,你不需要停止任何業(yè)務(wù),直接啟動(dòng)JTransfer的數(shù)據(jù)遷移服務(wù),就可以在后臺(tái)自動(dòng)完成數(shù)據(jù)的同步和遷移。遷移完畢后,JTransfer會(huì)自行比對(duì)JED上的數(shù)據(jù)與原來數(shù)據(jù)的一致性和lag計(jì)算,當(dāng)數(shù)據(jù)完全一致,且lag小于5秒時(shí),就會(huì)郵件通知業(yè)務(wù)方進(jìn)行復(fù)驗(yàn),復(fù)驗(yàn)沒有問題,業(yè)務(wù)方直接將數(shù)據(jù)庫(kù)連接指向到JED就可以正常提供服務(wù)了。

(5)數(shù)據(jù)庫(kù)審計(jì)

JED具有數(shù)據(jù)庫(kù)審計(jì)的功能,該功能實(shí)現(xiàn)在Gate層,在Gate層我們會(huì)得到應(yīng)用發(fā)送給JED的所有SQL,然后將SQL語(yǔ)句或者SQL模板發(fā)送給MQ。由于是在Gate層實(shí)現(xiàn)的,而Gate層與MySQL服務(wù)不在一個(gè)容器上,因此對(duì)MySQL服務(wù)不會(huì)產(chǎn)生任何的負(fù)面影響。

2.實(shí)時(shí)數(shù)據(jù)發(fā)布與訂閱模塊: BinLake,完全自助、無(wú)狀態(tài)、自動(dòng)負(fù)載、完全自治、可橫向擴(kuò)展的集群化Binlog采集和訂閱服務(wù)。

BinLake只做一樣工作:集群化Binlog的采集和訂閱服務(wù)。BinLake之前,我們使用Canal進(jìn)行binlog采集,但我們發(fā)現(xiàn)存在資源浪費(fèi)等問題:若一個(gè)業(yè)務(wù)需要采集MySQL Binlog,并且還需要HA保證的話,我們至少需要兩臺(tái)服務(wù)器。那多個(gè)業(yè)務(wù)怎么辦?于是我們開發(fā)了BinLake,其功能特性如下:

(1)無(wú)狀態(tài)集群化BinLog采集

BinLake是一個(gè)集群化的BinLog采集和訂閱服務(wù),并且與常規(guī)意義上的集群不一樣,我們的集群是沒有master節(jié)點(diǎn)的,而且集群中的所有工作節(jié)點(diǎn)都是完全平等的,這也就意味著,只要集群中的節(jié)點(diǎn)沒有全部宕機(jī),BinLake集群可以一直提供服務(wù)。

(2)高可用與自動(dòng)故障轉(zhuǎn)移

針對(duì)于某個(gè)Mya實(shí)例的采集instance(每個(gè)instance代表一個(gè)線程)一旦掛掉,會(huì)在集群中的負(fù)載最低的工作節(jié)點(diǎn)上重新啟動(dòng)一個(gè)instance,繼續(xù)從上次掛掉的Offset進(jìn)行采集,不會(huì)造成Binlog的丟失和重復(fù)。

(3)負(fù)載自動(dòng)均衡

假設(shè)所有Binlog的集群有八個(gè)節(jié)點(diǎn),其中有七個(gè)節(jié)點(diǎn)的負(fù)載比較高,當(dāng)你在接入Binlog時(shí),在沒有人工介入的衡量下,整個(gè)集群會(huì)將以新接入的一個(gè)Instance采集實(shí)例,自動(dòng)選擇一個(gè)健康度最高的Wave服務(wù),然后啟動(dòng)Binlog采集。

(4)支持多種MQ

BinLake采集到的所有binlog的event會(huì)被封裝成Message發(fā)送給MQ,目前我們支持JMQ和Kafka兩種MQ產(chǎn)品。

(5)支持集群橫向擴(kuò)容

當(dāng)BinLake集群的服務(wù)能力達(dá)到了瓶頸,我們可以簡(jiǎn)單地將新的工作節(jié)點(diǎn)啟動(dòng),只需要在新的工作節(jié)點(diǎn)配置文件中配置上與線上的工作節(jié)點(diǎn)相同的ZooKeeper路徑,新的工作節(jié)點(diǎn)就會(huì)自動(dòng)加入到已存在的BinLake集群中。

3.自動(dòng)化it運(yùn)維模塊:DBS。

DBS主要完成自動(dòng)化it運(yùn)維的工作。它可以完成數(shù)據(jù)庫(kù)服務(wù)的自動(dòng)化交付、數(shù)據(jù)庫(kù)操作的流程化管理、數(shù)據(jù)庫(kù)健康指數(shù)全面監(jiān)控、數(shù)據(jù)庫(kù)自動(dòng)備份及結(jié)轉(zhuǎn),以及調(diào)度作業(yè)的多樣化調(diào)度(包括定時(shí)、依賴以及觸發(fā)三種調(diào)度模式)。

以上就是對(duì)it運(yùn)維全面Docker化之后,京東彈性數(shù)據(jù)庫(kù)的突破分析,今天分享就到這里,謝謝大家!

同創(chuàng)雙子為企業(yè)保駕護(hù)航

專注數(shù)字化方案建設(shè),推動(dòng)智慧企業(yè)生態(tài)圈的升級(jí)發(fā)展

霞浦县| 郁南县| 浑源县| 灯塔市| 衡水市| 夹江县| 进贤县| 宁武县| 南江县| 舞钢市| 武穴市| 巴彦淖尔市| 扎鲁特旗| 龙泉市| 平原县| 麦盖提县| 潜江市| 邵阳市| 涞水县| 陆川县| 丽江市| 临洮县| 深水埗区| 台南县| 龙岩市| 两当县| 呼玛县| SHOW| 皋兰县| 芮城县| 奉新县| 蒙山县| 额济纳旗| 咸宁市| 砀山县| 白银市| 陆良县| 宁南县| 东平县| 张家港市| 锡林郭勒盟|