引言:廣電網(wǎng)絡(luò)擁有大量專網(wǎng)用戶,同時(shí)目前各類智慧城市項(xiàng)目欣欣向榮。隨著業(yè)務(wù)的進(jìn)一步發(fā)展,在我們機(jī)房中的服務(wù)器設(shè)備將會(huì)越來越多。不同服務(wù)器上運(yùn)行的項(xiàng)目大小不等,不同項(xiàng)目的穩(wěn)定性要求也不盡相同。本文以docker技術(shù)為例,探討如何充分的、安全的、穩(wěn)定的利用服務(wù)器資源。
廣電網(wǎng)絡(luò)擁有大量的專網(wǎng)用戶,面向不同的專網(wǎng)用戶提供光纜專線、視頻訊息、帶寬出口、計(jì)算存儲(chǔ)等不同的服務(wù)。同時(shí)隨著“智慧中國(guó)”的提出,目前各類智慧城市項(xiàng)目欣欣向榮,廣電網(wǎng)絡(luò)也抓住機(jī)遇為智慧城市的建設(shè)提供自己的力量和服務(wù)。
隨著業(yè)務(wù)的進(jìn)一步發(fā)展,在我們機(jī)房中的服務(wù)器設(shè)備將會(huì)越來越多。有的業(yè)務(wù)僅僅需要提供數(shù)對(duì)光口和電口,而有的業(yè)務(wù)需要在我們機(jī)房中部署大量服務(wù)器以及存儲(chǔ)矩陣。
服務(wù)器,我們采用windows server較少,一般通指運(yùn)行Linux等服務(wù)器系統(tǒng)、擁有大量計(jì)算能力、存儲(chǔ)能力、網(wǎng)絡(luò)交換能力的電腦。我們?cè)跈C(jī)房中使用的一般是刀片式服務(wù)器,為每個(gè)項(xiàng)目上線一組服務(wù)器。服務(wù)器硬件性能指標(biāo)有多種,在我們工作中最關(guān)注的前三名,是存儲(chǔ)、內(nèi)存、計(jì)算三者。
圖1 部分項(xiàng)目架構(gòu)圖
由于不同服務(wù)器上運(yùn)行的項(xiàng)目大小不等,不同項(xiàng)目的穩(wěn)定性要求也不盡相同。在規(guī)劃和日常維護(hù)中,就經(jīng)常會(huì)遇到一些問題。
我們有些項(xiàng)目,是不同廠商搭建的,相互之間平臺(tái)不同,網(wǎng)絡(luò)環(huán)境不同,故而采用了樹形結(jié)構(gòu),如圖1所示,各類服務(wù)器雖采用專用三層交換機(jī)直連核心路由設(shè)備,但實(shí)際上每個(gè)服務(wù)器各自運(yùn)行一個(gè)業(yè)務(wù)。
采用圖1的架構(gòu),項(xiàng)目之間相互獨(dú)立互不影響,但是在資源的使用效率方面存在一些浪費(fèi)。即使為了以后項(xiàng)目的擴(kuò)展等,必須冗余一部分,但個(gè)別項(xiàng)目的浪費(fèi)頗為嚴(yán)重。
存儲(chǔ)資源(硬盤塔等):對(duì)于一些視頻監(jiān)控的服務(wù),服務(wù)器的存儲(chǔ)資源基本上物盡其用,但是其他一些性能監(jiān)控、測(cè)試機(jī)、web服務(wù)器等,基本上每臺(tái)都有大量的浪費(fèi)。
內(nèi)存資源(RAM等):在濟(jì)寧廣電的一些項(xiàng)目中,服務(wù)器中一般配置16GB到96GB不等的內(nèi)存,使用率依照不同的項(xiàng)目使用不均勻。部分業(yè)務(wù)隨著時(shí)間流逝需要繼續(xù)添加內(nèi)存條,而有些項(xiàng)目使用的內(nèi)存還沒有其所在服務(wù)器系統(tǒng)本身用的多。
計(jì) 算 資 源(CPU、GPU等):作為一家傳統(tǒng)視頻供應(yīng)商,計(jì)算資源在視頻轉(zhuǎn)碼、監(jiān)控、以及集中式服務(wù)(EBOSS、工程管理、財(cái)務(wù)等)中做到了最大化利用,但有些專網(wǎng)用戶很少用到計(jì)算資源,甚至于只是用來存儲(chǔ)一些文件,計(jì)算資源在其服務(wù)器上基本上處于閑置狀態(tài)。
采用上述架構(gòu),面臨兩個(gè)問題。除了上面提到的資源冗余情況外,系統(tǒng)的安全性也有一些隱患。
服務(wù)器宕機(jī):當(dāng)服務(wù)器宕機(jī)后,整個(gè)業(yè)務(wù)就停掉了,需要立馬安排人手找備用的服務(wù)器并恢復(fù)業(yè)務(wù)。如果采用服務(wù)器雙備份的形式,又會(huì)造成資源的浪費(fèi)。
數(shù)據(jù)損壞:對(duì)用戶來說,最重要的不是服務(wù)器偶爾的宕機(jī),而是其私有數(shù)據(jù)的損壞。一旦用戶的數(shù)據(jù)丟失,對(duì)我們運(yùn)營(yíng)商的負(fù)面影響是非常巨大的,輕則掉戶,重則項(xiàng)目停掉,甚至于影響我們廣電網(wǎng)絡(luò)的品牌。在保證數(shù)據(jù)無損的情況下再考慮服務(wù)器宕機(jī)時(shí)的用戶無感知切換。那么業(yè)務(wù)的熱備份和方便移植、數(shù)據(jù)的異地備份和可恢復(fù)性就需要找辦法來解決了。
Docker技術(shù)是目前業(yè)界非常熱門的一門技術(shù),擁有大量活躍開發(fā)者和社區(qū)資源。簡(jiǎn)單來講,Docker是在容器層面實(shí)現(xiàn)的虛擬化。
物理機(jī),也就是我們平常使用的電腦等設(shè)備,需要有真實(shí)的硬件資源、供電設(shè)備、輸入輸出設(shè)備。我們?cè)谏厦姘惭b好服務(wù)環(huán)境后,就只能用這一套環(huán)境了。
虛 擬 機(jī),采 用 了Hypervisor或軟件模擬等技術(shù),是對(duì)硬件的虛擬,其虛擬了一套硬件平臺(tái)。我們可以在一套物理機(jī)上虛擬多套設(shè)備,同時(shí)運(yùn)行,但我們使用虛擬機(jī)的時(shí)候,仍然需要在這套虛擬的設(shè)備上分配硬件、安裝系統(tǒng)、配置環(huán)境,不論項(xiàng)目占用多少資源,起碼上面運(yùn)行的windows或linux系統(tǒng)本身就占用大量資源。
Docker,采用了應(yīng)用容器的技術(shù)。相對(duì)于虛擬機(jī)分鐘級(jí)的開機(jī),應(yīng)用容器達(dá)到了秒級(jí)。而且其資源占用非常少,基本上項(xiàng)目需要多少資源就使用多少,不存在浪費(fèi),同時(shí)業(yè)界也在討論利用Docker組建集群的多種方案,能完全滿足本文提出的需求。
以我在市公司搭建的流量監(jiān)控項(xiàng)目為例,簡(jiǎn)單介紹兩種利用Docker構(gòu)建廣電網(wǎng)絡(luò)的容器式沙箱服務(wù)器的方法。截止2016年7月,此項(xiàng)目已經(jīng)無人值守穩(wěn)定的運(yùn)行了一年半時(shí)間。
在物理服務(wù)器上安裝Docker平臺(tái)。不同服務(wù)器命令不同,我使用ubuntu_amd64進(jìn)行部署,以普通用戶權(quán)限執(zhí)行如下命令即可:
sudo apt-get install docker docker.io
有些平臺(tái)還需要安裝lxc-docker。
我構(gòu)建了對(duì)應(yīng)的Docker容器,分發(fā)起來就非常便捷了,一條命令就可以,充分體現(xiàn)了容器式沙箱服務(wù)器的方便移植性:
docker run -d -p 80:80 -p 161:161 leniy/cacti
然后在瀏覽器打開服務(wù)器地址,就可以使用了,如圖2和圖3所示。
圖2 項(xiàng)目歡迎頁面
圖3 docker-cacti項(xiàng)目
自動(dòng)創(chuàng)建方式,主要是利用dockerfile調(diào)用自己編寫的腳本,將需要的配置提前做好。用戶只需要加載就可以快速部署了。本項(xiàng)目主要dockerfile如下:
FROM leniy/baseimage:latest
MAINTAINER Leniy Tsan <m@leniy.org>,Leniy Tsan<qianwei@zju.edu.cn>
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y snmpd cacti cacti-spine && aptget clean && rm -rf /tmp/* && rm -rf /var/tmp/* && rm -rf /var/lib/apt/lists/*
RUN mkdir /etc/service/mysqld /etc/service/snmpd /etc/service/apache2
伴隨著經(jīng)濟(jì)的快速發(fā)展,市民需求層次不斷提高,不僅僅局限于對(duì)物質(zhì)的需求,更體現(xiàn)出對(duì)生活環(huán)境質(zhì)量提升的內(nèi)在需求渴望,在不斷追求美化居家環(huán)境的同時(shí),也在著力提升廚房的整潔、衛(wèi)生和科學(xué)化。然而,人們?cè)趶N房精工細(xì)作時(shí),時(shí)常會(huì)忽略一個(gè)嚴(yán)重的問題,即廚房食物垃圾或下角料的處理,從而造成生活垃圾的排放量急劇增長(zhǎng)。
COPY service/mysqld.sh /etc/service/mysqld/run
COPY service/snmpd.sh /etc/service/snmpd/run
COPY service/apache2.sh /etc/service/apache2/run
RUN chmod +x /etc/service/mysqld/run /etc/service/snmpd/run /etc/service/apache2/run
COPY scripts/setmysqluser.sh /sbin/setmysqluser.sh
COPY scripts/configured_cacti.sql /var/backups/cacti_backups.sql
RUN chmod +x /sbin/setmysqluser.sh &&/bin/bash -c /sbin/setmysqluser.sh && rm /sbin/setmysqluser.sh
COPY config/cacti.conf/etc/dbconfig-common/cacti.conf
COPY config/debian.php /etc/cacti/debian.php
COPY config/snmpd.conf /etc/snmp/snmpd.conf
COPY config/spine.conf /etc/cacti/spine.conf
COPY scripts/sqlbackup.sh /sbin/sqlbackup
COPY scripts/sqlrestore.sh /sbin/sqlrestore
RUN chmod +x /sbin/sqlbackup /sbin/sqlrestore
VOLUME /var/backups
COPY website/* /var/www/html/
EXPOSE 80 161
CMD ["/sbin/my_init"]
項(xiàng)目相關(guān)代碼我已經(jīng)于2015年3月份開源于github上,這里不再占用篇幅贅述。
隨著智慧系列項(xiàng)目的增多,越來越多服務(wù)器被上線。但為了保證服務(wù)的穩(wěn)定性,每一臺(tái)服務(wù)器都留有相當(dāng)一部分余量。但各個(gè)服務(wù)器運(yùn)行的服務(wù)不同,在其上安裝其他服務(wù)容易干擾已有項(xiàng)目。
此時(shí)可以在多臺(tái)服務(wù)器上部署docker集群,當(dāng)服務(wù)器空閑時(shí),可以利用docker提供增值服務(wù),某幾臺(tái)服務(wù)器滿負(fù)荷運(yùn)行時(shí)可以隨時(shí)關(guān)停對(duì)應(yīng)的節(jié)點(diǎn),不會(huì)影響整個(gè)集群的業(yè)務(wù)。如此可對(duì)公司的服務(wù)器資源做到最大化使用。上部署docker集群,當(dāng)服務(wù)器空閑時(shí),可以利用docker提供增值服務(wù),某幾臺(tái)服務(wù)器滿負(fù)荷運(yùn)行時(shí)可以隨時(shí)關(guān)停對(duì)應(yīng)的節(jié)點(diǎn),不會(huì)影響整個(gè)集群的業(yè)務(wù)。如此可對(duì)公司的服務(wù)器資源做到最大化使用。N