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