引言:廣電網絡擁有大量專網用戶,同時目前各類智慧城市項目欣欣向榮。隨著業務的進一步發展,在我們機房中的服務器設備將會越來越多。不同服務器上運行的項目大小不等,不同項目的穩定性要求也不盡相同。本文以docker技術為例,探討如何充分的、安全的、穩定的利用服務器資源。
廣電網絡擁有大量的專網用戶,面向不同的專網用戶提供光纜專線、視頻訊息、帶寬出口、計算存儲等不同的服務。同時隨著“智慧中國”的提出,目前各類智慧城市項目欣欣向榮,廣電網絡也抓住機遇為智慧城市的建設提供自己的力量和服務。
隨著業務的進一步發展,在我們機房中的服務器設備將會越來越多。有的業務僅僅需要提供數對光口和電口,而有的業務需要在我們機房中部署大量服務器以及存儲矩陣。
服務器,我們采用windows server較少,一般通指運行Linux等服務器系統、擁有大量計算能力、存儲能力、網絡交換能力的電腦。我們在機房中使用的一般是刀片式服務器,為每個項目上線一組服務器。服務器硬件性能指標有多種,在我們工作中最關注的前三名,是存儲、內存、計算三者。

圖1 部分項目架構圖
由于不同服務器上運行的項目大小不等,不同項目的穩定性要求也不盡相同。在規劃和日常維護中,就經常會遇到一些問題。
我們有些項目,是不同廠商搭建的,相互之間平臺不同,網絡環境不同,故而采用了樹形結構,如圖1所示,各類服務器雖采用專用三層交換機直連核心路由設備,但實際上每個服務器各自運行一個業務。
采用圖1的架構,項目之間相互獨立互不影響,但是在資源的使用效率方面存在一些浪費。即使為了以后項目的擴展等,必須冗余一部分,但個別項目的浪費頗為嚴重。
存儲資源(硬盤塔等):對于一些視頻監控的服務,服務器的存儲資源基本上物盡其用,但是其他一些性能監控、測試機、web服務器等,基本上每臺都有大量的浪費。
內存資源(RAM等):在濟寧廣電的一些項目中,服務器中一般配置16GB到96GB不等的內存,使用率依照不同的項目使用不均勻。部分業務隨著時間流逝需要繼續添加內存條,而有些項目使用的內存還沒有其所在服務器系統本身用的多。
計 算 資 源(CPU、GPU等):作為一家傳統視頻供應商,計算資源在視頻轉碼、監控、以及集中式服務(EBOSS、工程管理、財務等)中做到了最大化利用,但有些專網用戶很少用到計算資源,甚至于只是用來存儲一些文件,計算資源在其服務器上基本上處于閑置狀態。
采用上述架構,面臨兩個問題。除了上面提到的資源冗余情況外,系統的安全性也有一些隱患。
服務器宕機:當服務器宕機后,整個業務就停掉了,需要立馬安排人手找備用的服務器并恢復業務。如果采用服務器雙備份的形式,又會造成資源的浪費。
數據損壞:對用戶來說,最重要的不是服務器偶爾的宕機,而是其私有數據的損壞。一旦用戶的數據丟失,對我們運營商的負面影響是非常巨大的,輕則掉戶,重則項目停掉,甚至于影響我們廣電網絡的品牌。在保證數據無損的情況下再考慮服務器宕機時的用戶無感知切換。那么業務的熱備份和方便移植、數據的異地備份和可恢復性就需要找辦法來解決了。
Docker技術是目前業界非常熱門的一門技術,擁有大量活躍開發者和社區資源。簡單來講,Docker是在容器層面實現的虛擬化。
物理機,也就是我們平常使用的電腦等設備,需要有真實的硬件資源、供電設備、輸入輸出設備。我們在上面安裝好服務環境后,就只能用這一套環境了。
虛 擬 機,采 用 了Hypervisor或軟件模擬等技術,是對硬件的虛擬,其虛擬了一套硬件平臺。我們可以在一套物理機上虛擬多套設備,同時運行,但我們使用虛擬機的時候,仍然需要在這套虛擬的設備上分配硬件、安裝系統、配置環境,不論項目占用多少資源,起碼上面運行的windows或linux系統本身就占用大量資源。
Docker,采用了應用容器的技術。相對于虛擬機分鐘級的開機,應用容器達到了秒級。而且其資源占用非常少,基本上項目需要多少資源就使用多少,不存在浪費,同時業界也在討論利用Docker組建集群的多種方案,能完全滿足本文提出的需求。
以我在市公司搭建的流量監控項目為例,簡單介紹兩種利用Docker構建廣電網絡的容器式沙箱服務器的方法。截止2016年7月,此項目已經無人值守穩定的運行了一年半時間。
在物理服務器上安裝Docker平臺。不同服務器命令不同,我使用ubuntu_amd64進行部署,以普通用戶權限執行如下命令即可:
sudo apt-get install docker docker.io
有些平臺還需要安裝lxc-docker。
我構建了對應的Docker容器,分發起來就非常便捷了,一條命令就可以,充分體現了容器式沙箱服務器的方便移植性:
docker run -d -p 80:80 -p 161:161 leniy/cacti
然后在瀏覽器打開服務器地址,就可以使用了,如圖2和圖3所示。

圖2 項目歡迎頁面

圖3 docker-cacti項目
自動創建方式,主要是利用dockerfile調用自己編寫的腳本,將需要的配置提前做好。用戶只需要加載就可以快速部署了。本項目主要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
伴隨著經濟的快速發展,市民需求層次不斷提高,不僅僅局限于對物質的需求,更體現出對生活環境質量提升的內在需求渴望,在不斷追求美化居家環境的同時,也在著力提升廚房的整潔、衛生和科學化。然而,人們在廚房精工細作時,時常會忽略一個嚴重的問題,即廚房食物垃圾或下角料的處理,從而造成生活垃圾的排放量急劇增長。
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"]
項目相關代碼我已經于2015年3月份開源于github上,這里不再占用篇幅贅述。
隨著智慧系列項目的增多,越來越多服務器被上線。但為了保證服務的穩定性,每一臺服務器都留有相當一部分余量。但各個服務器運行的服務不同,在其上安裝其他服務容易干擾已有項目。
此時可以在多臺服務器上部署docker集群,當服務器空閑時,可以利用docker提供增值服務,某幾臺服務器滿負荷運行時可以隨時關停對應的節點,不會影響整個集群的業務。如此可對公司的服務器資源做到最大化使用。上部署docker集群,當服務器空閑時,可以利用docker提供增值服務,某幾臺服務器滿負荷運行時可以隨時關停對應的節點,不會影響整個集群的業務。如此可對公司的服務器資源做到最大化使用。N