Chef server因为自身结构设计,我们一般在备份时都是采用冷备模式。然后定期要对chef server的数据做备份。这样在chef server down掉的情况下能快速将数据恢复到冷备机器上。因为chef server和冷备机器配置了VIP,所以恢复以后对用户来说都是透明的。Chef server需要备份的数据有:bookshelf中的cookbook和 web-ui使用的postgresql DB。
1. 定期备份数据库
备份数据库时,因为怕冷备机器出问题,所以直接备份了所有DB, 可以在任何机器上从零恢复。
一般情况下只需要备份opscode_chef库就可以了,具体备份部署如下:
A.切换到opscode_chef用户: su - opscode-pgsql(chef为postgresql建的用户,可在chef-server-running.json文件 中查询到DB的信息,另切换账户需要加-,这样会带有环境变量)
B.新建DB文件存储目录:/chef-backup
C.执行备份DB命令:pg_dumpall > /chef-backup/chef-db.dmp #这条命令会备份全部数据库
也可使用pg_dump备份单独的数据库。
2. 定期备份bookshelf
所有的cookbook都存放在bookshelf中,如果不备份和恢复bookshelf中的cookbook, chef webui访问是没有问题,并且能够看到cookbook,但是点击查看详细就显示错误。备份目录为:/var/opt/chef-server/bookshelf/data
备份完成后,在恢复时我们只需要完成以下步骤:
1. 恢复数据库
切换到opscode_chef用户,然后执行恢复命令:psql -f /chef-backup/chef-db.dmp ##恢复所有DB
2. 恢复bookshelf
将备份的bookshelf data文件拷贝到/var/opt/chef-server/bookshelf目录
3. 重启所有服务
chef server提供有工具chef-server-ctl可以对所有服务进行操作。
我们可以使用这个工具来启动、停止、重启、重新配置chef server上的服务。
我们这里使用了chef-server-ctl restart命令,想重启所有服务。但是命令执行完了,发现没有生效。
于是直接kill掉nginx的线程,然后重新执行了chef-server-ctl reconfigure命令就OK了(这句命令会重启已经停掉的服务)。