自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在云上實(shí)現(xiàn)NoSQL集群的自動(dòng)化擴(kuò)展答疑及難點(diǎn)介紹

原創(chuàng)
運(yùn)維 系統(tǒng)運(yùn)維 自動(dòng)化
迅達(dá)云成(SpeedyCloud)的首席技術(shù)官董偉在2013云計(jì)算架構(gòu)師峰會(huì)上做了主題為《云平臺(tái)上的NoSQL集群的自動(dòng)化擴(kuò)展》的演講,為小伙伴們演示了在云主機(jī)上創(chuàng)建并初始化NoSQL集群的方法;會(huì)后,董偉整理并分析了在搭建的過(guò)程中碰到的一些難點(diǎn)問(wèn)題及解決方案,希望對(duì)大家有所幫助。

【51CTO專稿】由51CTO傳媒舉辦的為期兩天的2013云計(jì)算架構(gòu)師峰會(huì)已于10月26日?qǐng)A滿落幕,會(huì)議內(nèi)容涵蓋了云計(jì)算落地的重要環(huán)節(jié),包括有:基礎(chǔ)架構(gòu)、開發(fā)應(yīng)用、安全、存儲(chǔ)以及云計(jì)算生態(tài)圈等方面。來(lái)自迅達(dá)云成(SpeedyCloud)的***技術(shù)官董偉在會(huì)上做了主題為《云平臺(tái)上的NoSQL集群的自動(dòng)化擴(kuò)展》的演講。為小伙伴們演示了在云主機(jī)上創(chuàng)建并初始化NoSQL集群的方法;以及如何通過(guò)監(jiān)控系統(tǒng)發(fā)現(xiàn)主機(jī)故障,并且自動(dòng)調(diào)用云端API進(jìn)行故障設(shè)備替換的過(guò)程,***還展示了如何通過(guò)命令行的方式銷毀主機(jī)的整個(gè)過(guò)程。

但是因?yàn)闀r(shí)間倉(cāng)促,沒有給小伙伴們留出太多時(shí)間進(jìn)行問(wèn)題解答和難點(diǎn)的詳細(xì)介紹,所以董偉在會(huì)后將大家比較關(guān)注的一些問(wèn)題整合起來(lái),并分析了在搭建的過(guò)程中碰到的一些難點(diǎn)問(wèn)題及解決方案,以下是他整理出來(lái)的關(guān)于這部分的內(nèi)容:

大家好,很榮幸作為主講嘉賓,在會(huì)上做了分享。不過(guò)由于時(shí)間倉(cāng)促,未和大家做充分交流,所以會(huì)后我想通過(guò)該文章來(lái)解答一些大家關(guān)注的問(wèn)題,并且介紹一些我們?cè)诖罱ǖ倪^(guò)程中碰到的一些難點(diǎn)及解決方案。

在這之前,我先給大家介紹一下我們?cè)跇?gòu)建過(guò)程中使用到的這款NoSQL數(shù)據(jù)庫(kù)MongoDB集群的架構(gòu)以及它的一些特性。

我們要構(gòu)建的集群是MongoDB的復(fù)制集(Replica Set, 可以參考官方文檔), 集群的結(jié)構(gòu)類似于下圖這樣(在會(huì)上我們演示時(shí)用了1個(gè)主,4個(gè)副的結(jié)構(gòu),但原理都一樣)。

在這個(gè)集群中有一個(gè)主(Primary)節(jié)點(diǎn),用來(lái)接收寫入操作,剩下的都是副(Secondary)節(jié)點(diǎn),他們會(huì)從主節(jié)點(diǎn)通過(guò)同步Oplog過(guò)來(lái),并應(yīng)用到本地?cái)?shù)據(jù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的同步,而且集群中各個(gè)節(jié)點(diǎn)之間都有心跳(Heartbeat)探測(cè),以確保集群之間的互通性。

當(dāng)該集群中的主節(jié)點(diǎn)不可用后,剩下的節(jié)點(diǎn)會(huì)自動(dòng)通過(guò)選舉的方式產(chǎn)生一個(gè)新的主節(jié)點(diǎn),這個(gè)過(guò)程是MongoDB集群的特性,過(guò)程如下圖所示:

我當(dāng)時(shí)為大家演示了三個(gè)場(chǎng)景:

***個(gè),MongoDB集群的初始化過(guò)程。我們先調(diào)用了SpeedyCloud云端的API完成了云主機(jī)的創(chuàng)建及啟動(dòng)單個(gè)MongoDB實(shí)例,當(dāng)分別確認(rèn)完畢數(shù)據(jù)庫(kù)狀態(tài)之后,通過(guò)執(zhí)行一段初始化代碼完成了整個(gè)集群的初始化。

第二個(gè),MongoDB集群故障設(shè)備替換。為了模擬集群中設(shè)備故障,我們手工關(guān)閉了一臺(tái)主機(jī),然后通過(guò)監(jiān)控系統(tǒng)的偵測(cè),自動(dòng)發(fā)現(xiàn)故障設(shè)備,并且調(diào)用云主機(jī)創(chuàng)建過(guò)程,然后調(diào)用添加成員過(guò)程實(shí)現(xiàn)了集群中故障設(shè)備的自動(dòng)替換。

第三個(gè),銷毀整個(gè)集群。當(dāng)整個(gè)集群的生命周期結(jié)束后,通過(guò)調(diào)用SpeedyCloud云端API,傳入云主機(jī)的ID號(hào)來(lái)實(shí)現(xiàn)云主機(jī)的自動(dòng)銷毀過(guò)程。

在整個(gè)過(guò)程中涉及到了四個(gè)方面的技術(shù)應(yīng)用:SpeedyCloud云端API的調(diào)用、Puppet配置管理系統(tǒng)的使用、MongoDB集群的維護(hù)以及Zabbix監(jiān)控系統(tǒng)的使用。

我們通過(guò)在云主機(jī)中內(nèi)置Puppet  Agent的方式,讓它和Puppet Master進(jìn)行交互,實(shí)現(xiàn)了密碼修改以及一些配置文件的管理等;通過(guò)Zabbix Agent來(lái)實(shí)現(xiàn)了設(shè)備到監(jiān)控系統(tǒng)的自動(dòng)注冊(cè),及監(jiān)控?cái)?shù)據(jù)的上報(bào)功能;同時(shí)又通過(guò)Zabbix Server的Trigger實(shí)現(xiàn)了對(duì)故障主機(jī)的發(fā)現(xiàn),以及發(fā)現(xiàn)故障后的處理腳本調(diào)用。這套系統(tǒng)的整體結(jié)構(gòu)圖如下所示:

下面開始我們的答疑部分,就大家會(huì)上以及會(huì)后問(wèn)到的一些問(wèn)題進(jìn)行解答。#p#

答疑部分

問(wèn)題1:假如我們構(gòu)建的是一個(gè)通過(guò)HA-proxy實(shí)現(xiàn)的Web負(fù)載均衡系統(tǒng),那么當(dāng)某臺(tái)設(shè)備宕機(jī)之后,自動(dòng)調(diào)用云端API生成了新的主機(jī)后,由于IP發(fā)生了變化,所以需要重新更改HA-proxy的配置,并手工添加該設(shè)備,請(qǐng)問(wèn)可以讓IP不變嗎?

答: 因?yàn)樵赟peedyCloud的整個(gè)運(yùn)行系統(tǒng)中,設(shè)備在未銷毀前,它的IP是始終跟隨著它的,不會(huì)發(fā)生變化,所以新生成的設(shè)備只能啟用新的IP。這時(shí)候可能就需要通過(guò)一段腳本將新加入的IP寫入到HA的配置文件haproxy.cfg中,并放置到Puppet對(duì)應(yīng)的目錄,然后通過(guò)Puppet Agent將該文件下發(fā)到Ha-proxy設(shè)備上,并且調(diào)用它的重啟命令完成新設(shè)備的添加。

問(wèn)題2:MongoDB集群中的設(shè)備宕機(jī)之后,那么它上面的數(shù)據(jù)怎么辦?

答:因?yàn)槲覀儾捎玫氖荕ongoDB的復(fù)制集(Replica Set)模式,這種方式的優(yōu)點(diǎn)是,在一個(gè)集群中,同一份數(shù)據(jù)會(huì)被存到多個(gè)節(jié)點(diǎn)上,因?yàn)樵O(shè)備都是通過(guò)內(nèi)網(wǎng)相連,所以主節(jié)點(diǎn)上的數(shù)據(jù)會(huì)以最快的速度全部同步到所有集群中的節(jié)點(diǎn)上,所以,集群中任何一臺(tái)設(shè)備宕機(jī)之后,其實(shí)都不會(huì)影響系統(tǒng)整體的數(shù)據(jù)完整性。

問(wèn)題3:當(dāng)調(diào)用API時(shí),調(diào)用的安全性及賬戶安全性如何來(lái)進(jìn)行保證,因?yàn)槲铱吹侥{(diào)用時(shí)并沒有輸入用戶名密碼這樣的參數(shù)?

答:我們通過(guò)這幾個(gè)手段來(lái)保證調(diào)用安全性:

***,在調(diào)用時(shí),不需要提供用戶名及密碼,而是通過(guò)提供API-Key來(lái)實(shí)現(xiàn)的身份識(shí)別,這個(gè)API是一串經(jīng)過(guò)加密的64位字符串,以此來(lái)保證賬戶密碼的安全;這個(gè)API-Key可以通過(guò)登錄到系統(tǒng)中進(jìn)行查看,如下圖所示:

第二,在提交時(shí)我們需要驗(yàn)證系統(tǒng)時(shí)間,并且要求將系統(tǒng)時(shí)間和API-Key做SHA1加密,以此來(lái)保證URL的時(shí)間唯一性和***性;

第三,客戶在調(diào)用API時(shí),可以基于HTTPS的方式來(lái)進(jìn)行調(diào)用,這樣可以進(jìn)一步來(lái)保證調(diào)用的安全性。

問(wèn)題4:通過(guò)調(diào)用API創(chuàng)建出來(lái)的這些設(shè)備,你們是怎么計(jì)算費(fèi)用的?

答:我們對(duì)于通過(guò)API創(chuàng)建出來(lái)的云主機(jī)采用按小時(shí)后付費(fèi)的策略??蛻粜枰A(yù)先往自己的賬戶里充入一些金額,然后每個(gè)小時(shí)會(huì)統(tǒng)計(jì)客戶在這一個(gè)小時(shí)中主機(jī)的使用情況,根據(jù)主機(jī)配置及使用情況作做相應(yīng)的扣費(fèi)操作,如果發(fā)現(xiàn)客戶的剩余金額不夠扣除,我們會(huì)提前一個(gè)小時(shí)發(fā)郵件來(lái)提醒客戶進(jìn)行充值。

問(wèn)題5:我知道使用Puppet進(jìn)行配置文件下發(fā)時(shí),是要對(duì)客戶端做認(rèn)證的,可是我看到您在新加了一臺(tái)設(shè)備之后,就自動(dòng)從Puppet上面獲取到了配置文件,是如何實(shí)現(xiàn)的?

答:Puppet Master支持一種叫做自動(dòng)授權(quán)(autosign)的功能,它需要在Puppet Master的配置文件中(通常這個(gè)文件為/etc/puppet/puppet.conf)增加三行配置:

[master]

autosign = true   #指明要支持自動(dòng)認(rèn)證功能

autosign = /etc/puppet/autosign.conf  #指明自動(dòng)認(rèn)證的規(guī)則保存在哪里

同時(shí)需要在/etc/puppet/目錄下創(chuàng)建一個(gè)叫autosign.conf的文件,用來(lái)保存自動(dòng)認(rèn)證的規(guī)則,添加 * 表示所有,或者添加域名,舉例:

doc.speedycloud.cn

*.speedycloud.cn

問(wèn)題6:我看你在調(diào)用API創(chuàng)建云主機(jī)時(shí),傳入了一個(gè)bootscrip參數(shù),這個(gè)是做什么用的?

答:這是一段可執(zhí)行的命令,寫在這個(gè)參數(shù)里面的命令會(huì)被寫入到/etc/rc.local文件中。這個(gè)文件的作用是用來(lái)在開機(jī)啟動(dòng)時(shí)執(zhí)行一些命令。所以你可以將一些你想在系統(tǒng)啟動(dòng)時(shí)運(yùn)行的命令寫入到這個(gè)腳本文件中,這樣當(dāng)系統(tǒng)啟動(dòng)時(shí)就會(huì)執(zhí)行這些腳本來(lái)完成你想要做的一些事情了。#p#

難點(diǎn)及解決方案

難點(diǎn)1:初始化一臺(tái)MongoDB主機(jī)時(shí),由于要從國(guó)外的官網(wǎng)下載大量的安裝文件,所以導(dǎo)致安裝時(shí)間會(huì)很久,這樣會(huì)影響演示時(shí)的效果以及加長(zhǎng)演示時(shí)間,怎么辦?

解決方案:其實(shí)先開始是通過(guò)Puppet來(lái)實(shí)現(xiàn)MongoDB的安裝的,但是發(fā)現(xiàn)每次都需要好久, 因?yàn)橐螺d很多安裝包,這樣就不能夠保證演示時(shí)的時(shí)間。所以后來(lái)就想了一個(gè)辦法,因?yàn)樵赟peedyCloud的云平臺(tái)上,支持自定義模板功能,也就是說(shuō),可以以一臺(tái)安裝好的云主機(jī)作為系統(tǒng)鏡像,這樣新建一臺(tái)設(shè)備時(shí),將該鏡像的名字作為參數(shù)傳進(jìn)去, 就可以以此鏡像為模板來(lái)生成云主機(jī)了,我們將一臺(tái)已經(jīng)安裝好了MongoDB的設(shè)備作為模板,這樣演示的時(shí)候就大大縮短了創(chuàng)建一個(gè)MongoDB節(jié)點(diǎn)的時(shí)間。

難點(diǎn)2:MongoDB集群在搭建時(shí)需要通過(guò)域名或者主機(jī)名進(jìn)行互相訪問(wèn)(可以參照這個(gè)文檔), 演示的例子中我們采用了主機(jī)名的方式,也就是說(shuō)通過(guò)在/etc/hosts文件中來(lái)指定主機(jī)名。但有一個(gè)問(wèn)題:因?yàn)槊颗_(tái)的/etc/hosts文件中都會(huì)包含一行對(duì)自己的定義,類似這樣:127.0.01   i-gblrwptp ,而在其他的機(jī)器上對(duì)這臺(tái)主機(jī)的定義又可能變成了類似這樣:10.70.0.52    i-gblrwptp 也就是說(shuō)同一個(gè)hostname在不同的主機(jī)上可能所映射的IP不一樣,所以不能用Puppet進(jìn)行整體文件的替換,這個(gè)難題怎么解決?

解決方案:這個(gè)問(wèn)題的解決方案主要還是通過(guò)Puppet進(jìn)行的,當(dāng)然也涉及到一些中間過(guò)程,主要有以下幾個(gè)步驟:

***步,在調(diào)用完創(chuàng)建設(shè)備的API之后,通過(guò)調(diào)用查看設(shè)備詳細(xì)信息的API接口,在Puppet Master上將新創(chuàng)建出來(lái)的設(shè)備的IP和主機(jī)名的對(duì)應(yīng)關(guān)系寫入到一個(gè)hosts的文件中。內(nèi)容及路徑如下所示:

第二步,通過(guò)Puppet將該配置文件下發(fā)到所有新創(chuàng)建的主機(jī)的該位置/etc/puppet/config/hosts。Puppet中的配置如下所示,我們可以看到,如果該文件更新了之后,會(huì)觸發(fā)一個(gè)稱為auto_register.py的腳本。

第三步,向所有新創(chuàng)建主機(jī)的/etc/puppet/config/目錄下, 下發(fā)一個(gè)腳本auto_register.py,從上圖中我們可以看出該腳本的Puppet定義。該腳本是用來(lái)將上一步下發(fā)的host文件,加入到系統(tǒng)的/etc/hosts文件中。該腳本的內(nèi)容如下:

難點(diǎn)3:如何來(lái)配置Zabbix的Auto registration(自動(dòng)注冊(cè))功能,讓設(shè)備可以將自己的信息自動(dòng)注冊(cè)到Zabbix Server里面去?

解決方案:實(shí)現(xiàn)這個(gè)功能,需要同時(shí)在Zabbix Server端和 Zabbix Client端進(jìn)行設(shè)置,步驟如下:

***步,首先要在新建的主機(jī)中安裝好Zabbix Agent,這個(gè)可以在難點(diǎn)答疑1的里面創(chuàng)建虛擬機(jī)模板的時(shí)候就安裝好,只不過(guò)后來(lái)我們要通過(guò)PuppetServer下發(fā)Zabbix Agent的配置。

第二步,修改Zabbix Agent的配置文件/usr/local/etc/zabbix_agentd.conf,如下圖所示,關(guān)鍵點(diǎn)是配置ServerActive(Zabbix Server的IP)和 Hostname(本機(jī)主機(jī)名,該名字會(huì)顯示在Zabbix Server中)

第三步,配置Zabbix Server的自動(dòng)注冊(cè)功能,通過(guò)如下圖所示的路徑進(jìn)入Action定義區(qū),然后點(diǎn)擊"Create action"進(jìn)入配置界面,相應(yīng)的配置如下所示,需要修改的地方會(huì)圈出,完成這幾個(gè)步驟之后,那么重啟Zabbix Agent之后,就會(huì)將客戶端注冊(cè)到監(jiān)控系統(tǒng)里面了: 

 

難點(diǎn)4:Zabbix客戶端的配置文件中需要配置自己的主機(jī)名,而每臺(tái)設(shè)備的主機(jī)名是不一樣的,這個(gè)配置通過(guò)Puppet是怎么做到的?

解決方案:這里用到了puppet的facter功能,以及Puppet的內(nèi)容定義模板功能。其實(shí)所謂的Facter,就是運(yùn)行在客戶端里面的一個(gè)ruby命令,通過(guò)該命令可以獲得所有關(guān)于這臺(tái)主機(jī)的信息,然后當(dāng)Puppet客戶端向服務(wù)端請(qǐng)求資源的時(shí)候,會(huì)將這些可以通過(guò)Facter命令取到的信息都告訴Puppet Server,因此Server端就可以使用這些信息來(lái)生成一些文件內(nèi)容。下面的***張圖為在客戶端執(zhí)行facter命令的效果。第二張圖為Puppet Server端對(duì)Zabbix agent的配置文件定義,可以看到要使用一個(gè)ruby文件。第三張圖為該ruby文件的內(nèi)容,可以看到里面使用到了一個(gè)hostname的變量,這個(gè)就是通過(guò)facter取到的值。

難點(diǎn)5:當(dāng)Zabbix Agent的配置文件被更新之后需要重啟才可以生效,如何讓客戶端在正確的時(shí)機(jī)來(lái)進(jìn)行重啟?

解決方案:這部分我們先開始也遇到了難題,發(fā)現(xiàn)調(diào)用pkill zabbix之后,馬上啟動(dòng)zabbix_agentd是起不來(lái)的,后來(lái)才知道,調(diào)用了pkill之后,會(huì)在ps -ef | grep zabbix里面看到很多僵尸進(jìn)程,所以只能在這些僵尸進(jìn)程被回收之后,才可以啟動(dòng),為此,我們用了一個(gè)簡(jiǎn)單的辦法,就是在調(diào)用pkill zabbix之后,讓該命令等待15秒(sleep 15)來(lái)釋放資源,然后再啟動(dòng)zabbix_agentd 就可以了,當(dāng)然這個(gè)15秒是一個(gè)經(jīng)驗(yàn)值,大家在使用時(shí)可以根據(jù)實(shí)際情況來(lái)進(jìn)行調(diào)整。在Puppet Server上關(guān)于這部分的配置如下:

責(zé)任編輯:黃丹 來(lái)源: 51CTO.com
相關(guān)推薦

2017-07-21 09:14:21

2013-10-25 09:18:56

StarCluster服務(wù)器集群管理自動(dòng)化Amazon云

2022-09-16 10:04:59

分布式云擴(kuò)展自動(dòng)化

2015-03-12 10:13:24

對(duì)公有私有IAASPaaS

2010-05-25 13:50:35

Visual Stud

2015-09-16 11:13:51

ChefWindows集群運(yùn)維

2022-02-16 09:01:13

iOSS開發(fā)XCode

2013-12-17 17:43:45

DevOps自動(dòng)化云管理

2015-08-12 15:10:46

Ubuntucronlinux

2015-09-01 11:22:26

公有云自動(dòng)化部署水平擴(kuò)展

2015-10-21 15:08:25

電纜自動(dòng)化

2019-04-17 07:59:09

Puppet自動(dòng)化集群管理

2024-09-13 15:32:18

2024-06-11 10:41:14

2015-02-04 09:17:38

亞馬遜AWS云自動(dòng)化

2023-12-25 09:52:32

2009-12-15 17:43:04

Ruby自動(dòng)化驅(qū)動(dòng)

2009-12-23 16:19:25

WPF UI自動(dòng)化技術(shù)

2025-04-23 08:15:00

2025-01-02 08:00:39

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)