我司神奇的机房策略,导致运行 Confluence 的 VM 暴毙。一番交涉无法解决问题,只能换机器从头恢复。
Confluence 内置了每日备份规则,将全站数据备份到本地目录。通过 rsync 和 cron,每天将新的备份文件同步到另一台机器,作为灾备。
操作系统 Ubuntu Server 16.04,Confluence 版本 6.9.0,数据库 MySQL。整个恢复过程使用到 3 个文件。
- Confluence 安装包
- 备份数据
- MySQL JDBC 驱动
恢复过程如下。
下载 Confluence 安装包
$ wget https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.9.0-x64.bin |
安装和配置 MySQL
$ sudo apt-get update |
配置过程参考
修改 MySQL 配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
如下。
[mysqld] |
重启 MySQL 使设置生效。
$ sudo service mysql restart |
进入 MySQL 控制台,创建 Confluence 使用的数据库和用户。
$ mysql -u root -p |
安装 Confluence
根据提示完成安装。
$ sudo ./atlassian-confluence-6.9.0-x64.bin |
安装 MySQL 驱动
参考
根据官网,可使用的驱动的最高版本是 5.1.42,下载文件:
$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.42.zip |
解压得到驱动 jar 文件,拷贝到 Confluence 安装目录<installation-directory>/confluence/lib
下,重启服务。
$ unzip mysql-connector-java-5.1.42.zip |
恢复 Confluence
访问 http://server-address-or-domain:8090 配置 Confluence。
拷贝备份文件到对应目录,注意目录和备份文件的权限,用户confluence
需要可以访问。刷新页面,开始恢复数据。
等数据导入结束后继续走完配置向导,完成整个 Confluence 数据恢复过程。
配置 rsync
因为换了 Confluence 服务器,所以需要重新配置 rsync(服务端),同时更新灾备机器(rsync 客户端)的配置。
服务端(Confluence 机器)
Ubuntu Server 默认安装了 rsync,修改文件/etc/default/rsync
将服务打开。
RSYNC_ENABLE=true |
系统自带了一个 rsync 的配置文件示例/usr/share/doc/rsync/examples/rsyncd.conf
,拷贝一份到目录/etc
。
sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/. |
更新文件的内容如下。
# GLOBAL OPTIONS |
定义一个 module,名字是confluence
,path
设置到 Confluence 的备份目录。
path = /var/atlassian/application-data/confluence/backups |
有几点需要注意:
- 你可以在 motd(message of the day)文件里自定义连接 rsync 后的欢迎信息
- 指定哪些用户可以连接 rsync,这些用户在 secrets 文件中定义,与系统用户无关
- 在
auth users
中指定的用户需要在此文件中定义,文件权限 0600,每行一个username:password
对,明文存储密码 - 灾备机器会定期清除过期的备份文件并同步修改到 Confluence 服务器
- 指定该模块传输文件时守护进程应该具有的 uid 和 gid,Confluence 备份目录的用户和组都是
confluence
$ sudo cat /etc/rsyncd.motd |
重启 rsync 服务。
$ sudo service rsync restart |
客户端(灾备机器)
在 rsync 客户端创建 secrets 文件,避免每次连接都需要输入密码,文件权限同样是 0600。
$ vi rsync.secrets |
文件内容为
password_of_user_hello |
创建一个文件夹,用于存放同步下来的备份
$ mkdir rsync-confluence-backups |
运行下面的命令,同步 rsync 服务端数据到本地。
$ rsync -avzP --delete --password-file=/path/to/your/rsync.secrets hello@rsync_server_host::confluence /path/to/your/rsync-confluence-backups/ |
将上面的命令加到 cron 里,定时运行即可。
灾备机器会定期删除一部分过期备份以节省硬盘空间,通过 rsync,可以将这些更改从客户端同步到服务端。
在客户端(灾备机器)新建一个文件,用于测试上传。
$ echo 'hello world' > rsync-confluence-backups/upload.test |
上服务端看看,文件upload.test
的用户和组,正是你在rsyncd.conf
配置文件中设置的 uid 和 gid。
rsync 配置完成。