一、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 界面
http://192.168.1.102:4440
默认账户及密码: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