一、RunDeck介紹
RunDeck是用Java/Grails寫的開源工具,幫助用戶在數據中心或者雲環境中自動化各種操作和流程。通過命令行或者web界面,用戶可以對任意數量的服務器進行操作,大大降低了對服務器自動化的門檻。RunDeck提供如下功能:
1.1 提供web界面和命令行來執行shell命令和job
1.2 自定義job步驟
1.3 設置shell命令/job運行週期(類似cron table的功能)
1.4 用戶權限控制,支持LDAP/ActiveDirectory
1.5 保存歷史日誌
1.6 提供web API
通過以上功能,RunDeck可以在任意數量的服務器上批量執行不同的任務,降低對自動化的部署、執行、維護的工作。
二、RunDeck架構
RunDeck是基於Java的webapp服務,運行在Servlet容器裏。用戶登陸RunDeck,在web界面進行操作,請求對遠程服務器進行操作。web通過HTTP(s)與RunDeck服務進行通信,RunDeck服務接受服務請求後,從配置文件裏面讀取用戶權限,以及服務器資源的一些信息。結合權限以及資源信息,RunDeck服務通過ssh對遠程的服務器進行操作,並將操作結果存放在數據庫中。
三、RunDeck的應用
在我們公司,推送後臺需要大量的服務器做支撐,也就有需求對服務器做各種配置,安裝,升級等操作。通過RunDeck,可以很方便、快速的完成這些任務。
爲了更好的利用RunDeck,我們主要從以下2個方面來配置,規劃,管理我們的服務器資源和腳本資源。
3.1 用project和tag對服務器進行分類
根據服務器資源的不同作用,可以將服務器組分成不同的項目類別,方便不同用戶操作。比如我們就有一個專門的project是管理push功能的服務器。通過配置文件,可以賦予用戶不同的權限,有些用戶只能查看push組的服務器資源,有些用戶可以操作。
雖然用project可以對不同服務器進行分組,但是同一個project的服務器有不同的作用。比如在push組的服務器項目中,又可以分數據庫服務器,下載服務器,日誌服務器等等。對於這種情況,通過給服務器打不同tag,這樣需要對一批服務器執行相同操作,就非常方便。
3.2 通過job來管理任務
RunDeck提供一個非常強大的功能,就是可以自己定義job。job由命令、腳本、其它的job組成。比如對於服務器上的各種web server,可以定義不同的job,執行不同的操作。實際配置中,我們就對apache服務器定義了三個job,分別對應啓動、停止、重啓apache服務。對於nginx服務器,定義job來配置nginx的端口號。通過job機制,用戶可以定義、管理、維護各種腳本、操作,極大的提高自動化效率。
四、rundeck安裝
4.1 下載rundeck jar包
# cd /apps/rundeck
# wget http://download.rundeck.org/jar/rundeck-launcher-1.6.2.jar
4.2 第一次啓動rundeck
# java -jar rundeck-launcher-1.6.2.jar
4.3 設置環境變量
#[root@test02 rundeck]#sed -i '$a RDECK_BASE="/apps/rundeck"' /etc/profile
# [root@test02 rundeck]# sed -i '$a export RDECK_BASE' /etc/profile
4.4 登陸rundeck web 界面
默認賬戶及密碼:admin/admin
4.5 啓動腳本
[root@test02 rundeck]# sh server/sbin/rundeckd restart
4.6 創建project及jobs
4.6.1 創建項目
點擊Create a new Project
命令行創建:
# [root@test02 rundeck]# /apps/rundeck/tools/bin/rd-project -a create -p apps
4.6.4 創建jobs
點擊New job....
4.7 安全認證配置
4.7.1 增加用戶
# cd /apps/rundeck
# java -cp server/lib/jetty-6.1.21.jar:server/lib/jetty-util-6.1.21.jar org.mortbay.jetty.security.Password test test123
4.7.2 將MD5值添加至realm.properties配置文件
# vim server/config/realm.properties
4.7.3 重啓rundeck生效
[root@test02 rundeck]# sh server/sbin/rundeckd restart
註釋:
Test爲用戶名
Test123爲密碼
生成密碼有四種格式:明文,OBF,MD5,CRYPT
realm.properties 格式如下:
用戶名:加密方法及密碼,所屬角色名,所屬角色組
角色組可添加多個以“,”分隔
五、備份project及jobs
5.1 備份project
cp -r /apps/rundeck/project 備份路徑
5.2 備份jobs (比如備份apps項目)
# /app/rundeck/tools/bin/rd-jobs list -f ~/backup/jobs.xml -p apps
5.3 備份data/logs (需要先停止rundeck)
[root@test02 rundeck]# sh server/sbin/rundeckd stop
[root@test02 ~]# cp -r /apps/rundeck/server/data/ ~/backup
[root@test02 ~]# cp -r /apps/rundeck/var/logs/ ~/backup
[root@test02 rundeck]# sh server/sbin/rundeckd start
六、還原jobs
# /apps/rundeck/tools/bin/rd-jobs load -f ~/backup/jobs.xml -p apps