乾貨分享:網易OpenStack部署運維實戰

2020-12-11 CSDN技術社區

osapi_max_limit = 5000

nova-api-os-compute api 的最大返回數據長度限制,如果設置過短,會導致部分響應數據被截斷。

scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ImagePropertiesFilter, JsonFilter, EcuFilter, CoreFilter

nova-scheduler 可用的過濾器,Retry 是用來跳過已經嘗試創建但是失敗的計算節點,防止重調度死循環;AvailabilityZone 是過濾那些用戶指定的 AZ 的,防止用戶的虛擬機創建到未指定的 AZ 裡面;Ram 是過濾掉內存不足的計算節點;Core 是過濾掉 VCPU 數量不足的計算節點;Ecu 是我們自己開發的過濾器,配合我們的 CPU QoS 功能開發的,用來過濾掉 ecu 數量不足的計算節點;ImageProperties 是過濾掉不符合鏡像要求的計算節點,比如 QEMU 虛擬機所用的鏡像不能在 LXC 計算節點上使用;Json 是匹配自定義的節點選擇規則,比如不可以創建到某些 AZ,要與那些虛擬機創建到相同 AZ 等。其他還有一些過濾器可以根據需求進行選擇。

running_deleted_instance_action = reap

nova-compute 定時任務發現在資料庫中已經刪除,但計算節點的 Hypervisor 中還存在的虛擬機(也即野虛擬機審計操作方式)後的處理動作,建議是選擇 log 或者 reap。log 方式需要運維人員根據日誌記錄找到那些野虛擬機並手工執行後續的動作,這種方式比較保險,防止由於 nova 服務出現未知異常或者 bug 時導致用戶虛擬機被清理掉等問題,而 reap 方式則可以節省運維人員的人工介入時間。

until_refresh = 5

用戶配額與 instances 表中實際使用量的同步閾值,也即用戶的配額被修改多少次後強制同步一次使用量到配額量記錄

max_age = 86400

用戶配額與實際使用量的同步時間間隔,也即距上次配額記錄更新多少秒後,再次更新時會自動與實際使用量同步。

眾所周知,開源的 nova 項目目前仍然有很多配額方面的 bug 沒有解決,上面兩個配置項可以在很大程度上解決用戶配額使用情況與實際使用量不匹配的問題,但也會帶來一定的資料庫性能開銷,需要根據實際部署情況進行合理設置。

### 計算節點資源預留 ###

vcpu_pin_set = 4-$

虛擬機 vCPU 的綁定範圍,可以防止虛擬機爭搶宿主機進程的 CPU 資源,建議值是預留前幾個物理 CPU,把後面的所有 CPU 分配給虛擬機使用,可以配合 cgroup 或者內核啟動參數來實現宿主機進程不佔用虛擬機使用的那些 CPU 資源。

cpu_allocation_ratio = 4.0

物理 CPU 超售比例,默認是 16 倍,超線程也算作一個物理 CPU,需要根據具體負載和物理 CPU 能力進行綜合判斷後確定具體的配置。

ram_allocation_ratio = 1.0

內存分配超售比例,默認是 1.5 倍,生產環境不建議開啟超售。

reserved_host_memory_mb = 4096

內存預留量,這部分內存不能被虛擬機使用

reserved_host_disk_mb = 10240

磁碟預留空間,這部分空間不能被虛擬機使用

service_down_time = 120

服務下線時間閾值,如果一個節點上的 nova 服務超過這個時間沒有上報心跳到資料庫,api 服務會認為該服務已經下線,如果配置過短或過長,都會導致誤判。

rpc_response_timeout = 300

RPC 調用超時時間,由於 Python 的單進程不能真正的並發,所以 RPC 請求可能不能及時響應,尤其是目標節點在執行耗時較長的定時任務時,所以需要綜合考慮超時時間和等待容忍時間。

multi_host = True

是否開啟 nova-network 的多節點模式,如果需要多節點部署,則該項需要設置為 True。

Keystone

配置項較少,主要是要權衡配置什麼樣的後端驅動,來存儲 token,一般是 SQL 資料庫,也可以是 memcache。sql 可以持久化存儲,而 memcache 則速度更快,尤其是當用戶要更新密碼的時候,需要刪除所有過期的 token,這種情況下 SQL 的速度與 memcache 相差很大很大。

glance

包括兩個部分,glance-api 和 glance-registry,:

workers = 2

glance-api 處理請求的子進程數量,如果配置成 0,則只有一個主進程,相應的配置成 2,則有一個主進程加 2 個子進程來並發處理請求。建議根據進程所在的物理節點計算能力和雲平臺請求量來綜合確定。

api_limit_max = 1000

與 nova 中的配置 osapi_max_limit 意義相同

limit_param_default = 1000

一個響應中最大返回項數,可以在請求參數中指定,默認是 25,如果設置過短,可能導致響應數據被截斷。

OpenStack 底層依賴軟體版本、配置以及性能調優

虛擬化技術選型

在私有雲平臺的體系架構中, OpenStack 依賴一些底層軟體,如虛擬化軟體,虛擬化管理軟體和 Linux 內核。這些軟體的穩定性以及性能關係著整個雲平臺的穩定性和性能。因此,這些軟體的版本選擇和配置調優也是網易私有雲開發中的一個重要因素。

在網易私有雲平臺中,我們選用的是 Linux 內核兼容最好的 KVM 虛擬化技術。相對於 Xen 虛擬化技術,KVM 虛擬化技術與 Linux 內核聯繫更為緊密,更容易維護。選擇 KVM 虛擬化技術後,虛擬化管理驅動採用了 OpenStack 社區為 KVM 配置的計算驅動 libvirt,這也是一套使用非常廣泛,社區活躍度很高的一套開源虛擬化管理軟體,支持 KVM 在內的各種虛擬化管理。

另一方面,網易採用開源的 Debian 作為自己的宿主機內核,源使用的是 Debian 的 wheezy 穩定分支,KVM 和 libvirt 採用的也是 Debian 社區 wheezy 源裡面的包版本:

qemu-kvm 1.1.2+dfsg-6+deb7u3libvirt-bin 0.9.12

內核選型

在內核的選型方面,我們主要考慮如下兩方面的因素:

  • 穩定性:在開發私有雲平臺的一開始,穩定性就是網易私有雲開發的一大基本原則。我們採用 Debian Linux 版本,相對來說,Debian 的原生內核無疑更為穩定。這也是我們最開始的一個選擇。
  • 功能需求:在網易的定製開發中,為了保證虛擬機的服務性能,我們開發了 CPU QoS 技術和磁碟 QoS,它依賴底層的 CPU 和 blkio cgroup 支持。因此,我們需要打開內核中的 cgroup 配置選項。另一方面,網易私有雲綜合各方面考慮,將支持 LXC 這種容器級別的虛擬化,除了 cgroup 外,LXC 還依賴 Linux 內核中的 namespace 特性。

綜合上述因素的考慮,我們選擇了 Debian 社區的 Linux 3.10.40 內核原始碼,並且打開了 CPU/mem/blkio 等 cgroup配置選項以及 user namespace 等 namespace 選項,自己編譯了一個適配網易私有雲的 Linux 內核。從使用情況來看,選擇上述版本的OpenStack 底層依賴軟體後,網易私有雲運行還比較穩定,我們後續還會適時的對這些軟體進行更新。

配置優化

在網易私有雲的穩定性得到了保障之後,我們開始了性能方面的調優工作。這一方面,我們參考了 IBM 公司的一些 優秀實踐,在 CPU、內存、I/O 等方面做了一些配置方面的優化。整體而言,網易私有雲在注重穩定性的基礎上,也會積極借鑑業界優秀實踐來優化私有雲平臺的整體性能。

CPU 配置優化

為了保障雲主機的計算能力,網易私有雲開發了 CPU QoS 技術,具體來說就是採用 cfs 的時間片均勻調度,外加 process pinning 的綁定技術。

參考 IBM 的分析,我們了解到了 process pinning 技術的優缺點,並且經過測試也驗證了不同綁定方式的雲主機間的性能存在較大的差異。比如,2 個 VCPU 分別綁定到不同 numa 節點的非超線程核上和分配到一對相鄰的超線程核上的性能相差有 30%~40%(通過 SPEC CPU2006 工具測試)。另一方面,CPU0 由於處理中斷請求,本身負荷就較重,不宜再用於雲主機。因此,綜合上面的因素考慮以及多輪的測試驗證,我們最終決定將 0-3 號 CPU 預留出來,然後讓雲主機在剩餘的 CPU 資源中由宿主機內核去調度。最終的 CPU 配置如下所示(libvirt xml 配置):

<vcpu placement='static' cpuset='4-23'>1</vcpu><cputune> <shares>1024</shares> <period>100000</period> <quota>57499</quota></cputune>

內存配置優化

內存配置方面,網易私有雲的實踐是關閉 KVM 內存共享,打開透明大頁:

echo 0 > /sys/kernel/mm/ksm/pages_shared echo 0 > /sys/kernel/mm/ksm/pages_sharing echo always > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag

經過 SPEC CPU2006 測試,這些配置對雲主機 CPU 性能大概有 7%左右的提升。

I/O 配置優化

1)磁碟 I/O 的配置優化主要包含如下方面:

KVM 的 disk cache 方式:借鑑 IBM 的分析,網易私有雲採用 none 這種 cache 方式。

disk io scheduler:目前網易私有雲的宿主機磁碟調度策略選用的是 cfq。在實際使用過程中,我們發現 cfq 的調度策略,對那些地低配置磁碟很容易出現 I/O 調度隊列過長,utils 100% 的問題。後續網易私有雲也會借鑑 IBM 的實踐,對 cfq 進行參數調優,以及測試 deadline 調度策略。

磁碟 I/O QoS:面對日漸突出的磁碟 I/O 資源緊缺問題,網易私有雲開發了磁碟 I/O QoS,主要是基於 blkio cgroup 來設置其 throttle 參數來實現。由於 libvirt-0.9.12 版本是在 QEMU 中限制磁碟 I/O,並且存在波動問題,所以我們的實現是通過 Nova 執行命令方式寫入到 cgroup 中。同時我們也開發並向 libvirt 社區提交了 blkiotune 的 throttle 接口設置 patch(已在 libvirt-1.2.2 版本中合入)來徹底解決這個問題。

2)網絡 I/O 的配置優化

我們主要是開啟了 vhost_net 模式,來減少網絡延時和增加吞吐量。

運維經驗

使用經驗

  • 開源軟體 bug 在所難免,但是新版本比舊版本會好用很多,尤其是對於 OpenStack 這種正在迅速成長壯大的開源軟體來說更是如此,這一點在我們使用過 Essex、Folsom 和 Havana 版本後深有體會,所以建議各種 OpenStack 用戶能及時的跟進社區版本,與社區保持同步。
  • 不要輕易的對社區版本進行各類所謂的功能性能方面的"優化",尤其是在沒有與社區專家交換意見之前,千萬不要輕易下手,否則此類"優化"極有可能演變成故障點或者性能瓶頸點,最終可能導致無法與社區同步,畢竟一個公司或團隊(尤其是小公司、小團隊)的能力和知識儲備,是很難與社區成百上千的各類專家相提並論的。
  • 多參考各類大型公司分享的部署架構方案,儘量不要自己閉門造車,尤其是對於開源軟體來說,各類公司、團隊的使用場景千差萬別,各種周邊組件也是應有盡有,多參考業界實踐是最好的方式。
  • 一些細節實現可能有很多途徑,但每種方式都有優缺點,需要經過充分的論證、分析、測試驗證後,才能考慮部署到生產環境使用。
  • 所有的部署方案、功能設計都要考慮到平滑升級問題,即使你得到的信息是升級時可以停服,仍然要儘量避免這種情況,因為停服的影響範圍很難界定。

運維準則

OpenStack 也是一個後端系統服務,所有系統運維相關的基本準則都適用,這裡簡單的提幾點實際運維過程中根據遇到的問題總結的一些經驗:

  • 配置項默認值與實際環境不匹配可能導致各種問題,尤其是網絡相關配置與硬體有很強的關聯性,生產環境和開發環境硬體異構,導致部分默認值在生產環境不適用。應對準則:每個版本都必須在與線上硬體相同的環境測試過才能上線。
  • 做好容量規劃,已分配的配額量要小於雲平臺總容量,否則會出現各種問題,導致運維開發耗費很多不必要的精力去定位分析問題。
  • 配置項過多容易出錯,需要與開發人員一起仔細核對,上線時首先要通過 puppet 的 noop 功能驗證改動是否正確後,才能真正上線。
  • 網絡規劃要提前做好,如固定 IP、浮動 IP、VLAN 數量等,網絡擴容難度和風險都比較大,所以提前規劃好是最保險的,一個原則是大比小好,多比少好。
  • 網絡隔離要做好,否則用戶網絡安全沒辦法保證。
  • 信息安全問題要重視,這個是老生常談的問題了,每個平臺都有相同問題,但還是要重視再重視,一旦出現安全漏洞,所有虛擬機都面臨嚴重威脅。
原文連結:OpenStack 部署運維實戰 (責編/魏偉)


免費訂閱「CSDN雲計算(左)CSDN大數據(右)」微信公眾號,實時掌握第一手雲中消息,了解最新的大數據進展!

CSDN發布虛擬化、Docker、OpenStack、CloudStack、數據中心等相關雲計算資訊,     分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、內存計算、流計算、機器學習和智能算法等相關大數據觀點,提供雲計算和大數據技術、平臺、實踐和產業信息等服務。            

相關焦點

  • OpenStack雲平臺的IPv6兩種不同部署方案
    Openstack內置對IPv6的支持,在制定部署IPv6網絡方案時,需要綜合考慮管理網絡與租戶網絡的隔離、租戶網絡之間的隔離、租戶子網與公網的隔離,以及租戶子網前綴的動態獲取與續租等各因素。本文針對公有雲的一般場景,提出兩種部署方案供參考。
  • 陸港雲部署OpenStack經驗談
    陸港雲數據中心有三期,目前實施的是第一期,第二期正在規劃實施中,計劃全部使用OpenStack來部署雲平臺,並做到一個平臺統一管理多個數據中心。CSDN:你們在說服團隊內部人員使用OpenStack的過程中是如何做到的?阻力來自哪些方面?
  • 雲計算中openstack架構最受歡迎,那麼其優點是什麼?
    下面用一張圖帶大家了解一下openstack架構的基本組成思路。現在隨著cloud技術的發展,對於真正一線的公有雲企業來說,採用openstack架構的難度越來越大。因為openstack的核心特性是gitlab,其sla服務相對較弱,大部分時間用來做數據的存儲工作,對於大部分的用戶來說,只需要部署mirai,即可用來部署部署伺服器上的應用程式。
  • WebHook 自動化部署和運維工具 git-webhook
    WebHook 自動化部署和運維工具 git-webhook 一個使用 Python Flask + SQLAchemy + Celery + Redis + React 開發的用於迅速搭建並使用 WebHook 進行自動化部署和運維系統,支持:Github / GitLab / GitOsc。
  • 網易資深工程師詳解運維面經!
    在傳統的軟體組織將開發、IT運營和質量保障通常設為各自分離的部門,按照從前的工作方式,開發和部署,不需要IT支持或者QA深入的跨部門的支持;而現在卻需要極其緊密的多部門協作。而DevOps考慮的還不止是軟體部署,它是一套針對這幾個部門間溝通與協作問題的流程和方法。
  • 全球敏捷運維峰會(Gdevops)即將於上海盛大收官
    最佳案例:技術革新名企大咖,分享那些在光鮮亮麗背後踩過的坑,一個個鮮活的乾貨案例,字字珠璣的忠告,值得學習借鑑。 同場收穫:一主場兩分場,共論架構、敏捷、運維以及雲之道;2016年度最受矚目MVP評選與頒獎典禮,見證實至名歸的加冕;共建精英圈子、專享私密聚會,期待你的加入!
  • 【CTO講堂】OpenStack行業實踐和發展趨勢探討
    8月-9月份分別在北京、上海和深圳舉辦openstack+企業實踐論壇,由客戶和合作夥伴現身說法,分享了openstack在金融、電力、教育、製造等行業的實踐經驗,取得了良好的反饋。目前公司技術團隊比重佔公司70-80%,全部來自IBM、HP、華為以及BAT等公司,團隊在openstack上面平均已經有三四年的經驗。
  • 課程正式更名為
    我會結合我在500強外企的工作經驗,為你分享跨國企業的全球核心網設計,園區網設計,廣域網設計,以及數據中心設計,同時還會以超大型網際網路企業如Facebook, Google, Amazon, Microsoft等作為案例,分享超大型數據中心設計思路和方案.
  • 提升技術 追求實戰 2017平臺搭建運維實戰培訓即將舉行
    然而,由於和國際先進水平的差距,許多初創經紀商在平臺搭建上缺少經驗,同時在平臺運維上,還擁有很多技術瓶頸和知識缺陷。經紀商老總、技術或交易人員缺少專業知識和操作方法,不僅提高了平臺運營成本,使平臺運維上不得不更多藉助外部公司來完成,而且自己的技術人員培養也十分困難,團隊建設陷入僵局,平臺隱性成本大大增加。
  • 「運維工程師面試真題」網易、360面經帶來了!
    年後想找運維工程師的職位?面試題你積累的如何了?下面陝西優就業小優給大家帶來了網易和360運維工程師的面試真題,看看如果是你能回答出來多少:360企業安全運維開發面試問到哪些問題?二、網易運維工程師面試問到哪些問題?2018.9.16 10:00-15:30 一站到底網易運維工程師一面Linux開機啟動過程,越詳細越好。
  • 15套建築工程測量教程培訓資料,專業實戰講解,滿滿的乾貨分享
    15套建築工程測量教程培訓資料,專業實戰講解,滿滿的乾貨分享我的親身經歷,因為測量出了差錯引發了工程上的大問題,自己也在被辭退的邊緣掙扎[大哭]現在想想也是怪自己測量沒學好,工作又不認真。作為一個合格的測量員,必須熟練掌握各種測量儀器的操作,這樣才能在工作中少出錯。
  • OpenStack創建VM,遇到No valid host was found 錯誤怎麼辦
    作者 鄭敏先對於一些剛接觸OpenStack的新人,辛苦兩天終於把OpenStack部署好了,建立實例時卻失敗了。這是一件很鬱悶的事情。大家試想一下,如果你準備啟動一臺物理伺服器,如果伺服器的CPU,內存,存儲發生錯誤,在開機自檢階段就過不了,即意味著伺服器掛掉,無法啟動了。
  • K8s實戰入門第7集:創建副本控制器 | 51學通信
    網易雲課堂付費用戶FAQ:1)網易雲課堂購買,是否有有效期?視頻是否可下載?答:沒有有效期,網易雲課堂付費用戶可終身在線觀看高清視頻和課件,但不能下載視頻和課件。51學通信終身視頻會員可以下載所有51學通信(含網易雲課堂)高清視頻和無加密的高清PDF課件。2)51學通信終身視頻會員購買,有什麼優惠嗎?
  • 4句話解釋什麼是平臺運維課程!
    正是每個人都有這樣的感觸,才知道能夠做好一次「實戰」課程,真的難能可貴。所以《平臺運維》作為外匯經紀商領域一門實戰課程應運而生,希望給經紀商的不只是方法論,更是實操手冊和實戰演練。利用3天封閉式課程,手把手教授經紀商尤其是中後臺人員做好平臺運維,真正的降本增效。「實戰」從哪兒來?很多參加過往期課程的學員還記憶猶新,4句話就能概括。
  • 親愛的,我是一條Linux運維技術學習路徑呀!
    ——王小波我是一條Linux運維技術學習路徑。在跟我相處的每個階段,都包含詳細的教程、練習項目等;首先學習Linux相關的基本操作和系統管理,然後依次學習並實踐服務部署、資料庫管理、腳本編程、系統監控和安全防護、以及Web服務運維技術。最後學習Docker容器服務和WindowsServer的運維知識。
  • 特輯丨給大家整理了最強運維手冊,45招招招可實操
    乾貨合集第二彈,我們甄選了運維領域共45篇精華內容,內容涵蓋監控告警、故障修復、容災備份、智能運維、工具選型……戳標題即可閱讀原文↓-徐軼韜一份十分完整的故障演練指南-猿奮智能運維智能運維在金融核心領域的研究與應用-陳林博不談寬泛的智能運維,聊聊我在用的異常檢測核心算法-孔再華京東物流基於開源APM的智能運維體系建設與落地-付正全
  • 「必看」Linux 運維工程師打怪升級篇
    做運維就像遊戲打怪升級,升級後知識體系和運維體系也相對變化挺大,學習了很多新的知識點。運維工程師是從一個呆逼進化為苦逼再成長為牛逼的過程,前提在於你要能忍能幹能拼,還要具有敏銳的嗅覺感知前方潮流變化。如:今年大數據,人工智慧比較火。。。
  • 年薪50萬的運維工程師學習成長路線
    今天就來聊一聊我的想法,本人8年linux運維一線經驗,呆過很多網際網路公司,從一線運維做到運維架構師一職,也見證了中國運維行業從無人問津到可圈可點的整個演變過程。Linux系統目前主要應用在企業伺服器上,學習linux,更多的是向linux系統/運維工程師方向進軍。比如雲計算系統工程師,大數據運維工程師,運維開發工程師其職位都是linux運維工程師的進階。
  • ManageEngine線上IT運維專題研討會成功舉行
    會議開場,由ManageEngine中國副總王海波進行了主題為《IT運維助力企業業務發展》的演講,演講主要分享了:IT運維管理發展路線、一體化運維體系、一體化運維場景。西奧電梯CIO王孝全分享了主題為《面向業務系統的基礎架構運維體系介紹》的內容,講解了OpManager管理IT基礎架構要點、建立以業務為中心的運維體系。
  • 餓了麼程炎嶺:分享全站多活運維時代的正確打開方式
    本次峰會以軟體開發為主題,數十位專家級嘉賓將帶來多場精彩的技術內容分享。屆時,餓了麼OPS負責人程炎嶺先生將在創新運維探索專場與來賓分享"跨越籬笆——餓了麼多活運維上下求索"主題演講,為大家詳細闡述分享餓了麼公司在運維方面的探索以及實踐經驗。51CTO誠邀您蒞臨大會,與我們共享技術帶來的喜悅。