簡介
運維體系的建設的目的在於方便運維工作,通過自動化、規范化、流程化的操作方法提高運維效率,打造一個安全、可靠、高效、可追蹤、可回溯的運維環境,實現一個高可用、高並發、具備高容錯、自我修復、故障能快速定位的生產環境的運維生態環境(DevOps Ecosystem)。本篇文章將從三個方面來討論運維體系的建設,賬號權限管理、發布流程CI/CD、系統監控預警,文中可能多有理解不透、涉及不到甚至錯誤之處,希望有見解的小伙伴留言交流。
基於OpenLDAP的統一賬號管理
-
LDAP(Lightweight Directory Access Protocol)輕量級目錄訪問協議,是一個開放的,中立的,工業標准的應用協議,通過IP協議提供訪問控制和維護分布式信息的目錄信息。
-
OpenLDAP是輕型目錄訪問協議 LDAP 的自由和開源的實現,在其OpenLDAP許可證下發行,並已經被包含在眾多流行的Linux發行版中。 OpenLDAP的一個常用用途是單點登錄,用戶可以在多個應用平台中使用同一個賬戶密碼,通常用於公司內部網站的登錄中。
-
在運維工作中,主要用其單點登錄、用戶分組、配合業務支撐系統實現權限管理和准入控制。更重要的是,目前大部分系統均支持LDAP,公司中使用的Gitlab、Jenkins、Jira、Jumpserver、Docker harbor、Zabbix、OpenVPN、甚至包括nginx均可實現和LDAP的對接。
下圖基本公司業務支持的系統之間通過OpenLDAP實現的互通互聯的邏輯關系。

自動化運維CI/CD
-
所謂DevOps,我的理解是所有的工作內容也是通過版本控制工具來管理,配置、腳本、文件放置於版本倉庫,繼而觸發持續集成工具,發布到相應的環境中。所有的更改和操作清晰、透明,均可通過記錄查詢以及通過版本回滾。
-
自動化,就雲上開辟新主機為例,可以通過一個清單,包含所需要建立機器的區域、CPU、內存、磁盤、主機名、使用的鏡像等,提交至gitlab,gitlab自動觸發Jenkins構建,調用雲API創建主機,同時進行初始化,安裝監控客戶端等,將監控指標推送到監控系統,同時Jenkins將該主機的信息添加到Jumpserver中,方便管理,從而實現整個閉環。
-
對於CI/CD(持續集成/持續部署),Jenkins有三個環境的Job,分組呈現,不同分組的人員可看到不同的Job,從而實現權限的控制,對於開發環境的Job來自於Gitlab倉庫中dev分支的代碼,測試環境的代碼來自於master分支,線上環境的Job來自於master上分支上打過tag的代碼,開發測試人員無法看到線上環境的Job,當需要升級時,開發人員將tag交給運維,運維升級完成驗證同時通知開發。
-
灰度發布,灰度發布有賴於系統架構,原則上需要系統架構支持高可用、負載均衡、方便橫向擴展;比如,公司采用阿里巴巴公司開源的一個高性能優秀的服務框架Dubbo(使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和Spring框架無縫集成。
Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。)可將各功能拆解為單個模塊,模塊可多節點部署,模塊啟動自動注冊到同一管理平台zookeeper,成為生產者或消費者,RPC調用實時查詢zookeeper。如此便可逐台發布,實現發布過程的業務不中斷;對於前端頁面,發布至web服務器上,web服務器處在lb后端,可作多節點,實現高可用和負載均衡,從而保證業務的穩定性。 -
Jira工單系統,除Bug跟蹤和需求管理之外,Jira系統可以作為公司知識庫,各部門人員均可使用;就比如運維人員,將平常自己解決的技術問題記錄到該平台上,下次再遇到,就可以查詢自己的處理記錄,既方便又鍛煉文檔的書寫能力;也可以將自己的經驗分享給其他小伙伴查看,互相學習,共同進步;另外,Jira又有創建子任務的功能,將一個大問題拆解成若干小問題,逐個攻破。
該自動化CI/CD體系可根據不同的公司規模作出調整,去掉有些功能或模塊,但對於大公司,整個體系建立的越完整,工作就會越高效,越方便。

系統監控預警
-
Zabbix監控,將所有主機加入監控,時刻掌握他們的狀態,一旦有指標不正常,觸發器觸發告警,可通過微信、釘釘、郵件方式收到告警,詳細有效的監控報警是保證系統正常運行不可少的工具,防患於未然,快速定位故障。
-
ELK日志收集,日志的收集和監控也是很有必要的,當集群環境壯大之后,某一個模塊可能會部署多個節點,再登錄到機器上查看某一模塊的日志就變得很困難,此時,可以將日志收集至ELK等平台上,按模塊分類。另外,有些故障只能從日志中定位,比如Java程序,程序仍在運行,但服務已不可用,這個時候,監控日志中的錯誤信息,實時報警,就能及時定位故障,加快問題處理的速度。

總結
運維體系這個課題比較龐大,包羅萬象,不追求完美,以我現在的認知,將其拆解為三個模塊,模塊之間多有交叉,每個模塊又有很多的點組成,希望能夠對需要的伙伴有用,對運維工作的整體有所認知。當然運維體系絕不僅僅如此,比如說,備份、安全等,就備份來說,數據庫、配置文件的備份可在災難爆發時,讓你不至於走頭無路,另外,使用gitlab實時備份一些應用的配置也是一種很有效的方式。
參考文檔
- 搞懂OpenLDAP:https://segmentfault.com/a/1190000014683418
- VisualParadigm: https://online.visual-paradigm.com
- OpenLDAP Document: https://www.openldap.org/doc
