由于生产系统有很多服务器和数据库,平时的日常备份很重要。但是没有遇到过灾难时备份最容易被忽略,但是灾难真的发生的时候,备份时最直接最有用的解决方法,虽然难免有部分数据的损失。rsync是一款配置简单,功能全面的安全备份软件,具体的功能介绍可以参考手册。
下面介绍rsync在生产环境上的部署和应用。
首先介绍下工作环境。我负责的是一个webgame项目的运维工作。webgame有很多种架构,通常都是、javascript/asp/flash/c/c++/erlang/mongodb/mysql/linux等工具组合之后,开发和支撑了整个游戏系统,不过还是以玩家数据和游戏体验为中心。我们项目使用的是mongodb作为后台数据库,所以这里介绍通过rsync备份mongodb到远程备份服务器,mongodb都已经做了主从备份。
下面开始介绍rsync的具体部署。
(一)备份服务器上的步骤
(1)、安装rsync,并通过xinetd管理rsync
(2)、修改/etc/xinetd.d/rsync文件,使其随xinetd启动而启动
(3)、修改防火墙策略,允许873端口(tcp/udp)
#直接修改/etc/sysconfig/iptables ,需要重启防火墙
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 873 -j ACCEPT
/etc/init.d/iptables restart
#或者使用iptables命令
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW -m udp --dport 873 -j ACCEPT
(4)、建立rsync的配置文件
vim /etc/rsyncd.conf 没有这个文件的话直接建立
......
secrets file = /etc/rsyncd.secrets 指定允许的用户和用户密码
motd file = /etc/rsyncd.motd 客户端连接上来时显示的欢迎信息的存放文件
read only = no 是否只读
list = yes 是否允许客户端能够列出备份服务器上的文件
uid = root 指定uid
gid = wheel 指定gid
hosts allow = 113.167.110.33 121.14.145.79 113.109.271.6 允许使用备份服务器的客户端列表,实际环境这个列表很长
max connections = 100 同时的最大连接数
log file = /var/log/rsyncd.log 日志文件位置
pid file = /var/run/rsyncd.pid 进程的pid存放文件位置
lock file = /var/run/rsync.lock lock文件位置
################################################ 上面的配置是全局的,下面的段会继承上面设定的属性
[mongobak] 建立一个备份名,客户端通过该名称指定具体的备份位置
path = /mongobak 指定备份文件存放的目录位置
auth users = test 允许那些用户,这里的用户test的信息存放在/etc/rsyncd.secrets
这样一个简单实用的配置就好了
(5)、建立/etc/rsyncd.secrets文件
(6)、建立连接到服务器的客户端看到的欢迎信息文件/etc/rsyncd.motd
(7)、启动rsync
(二)客户端的操作
(1)确认备份服务器上的rsync确实启动成功并监听网络,可以被外部使用
(2)、建立认证文件,这里我们建立test用户的密码认证文件/etc/rsync.pass
(3)、连接服务器
(4)、备份数据到rsync服务器
(5)、将备份的数据拿到本地
(6)、备份脚本实例
然后将这个脚本加到计划任务中,在深夜执行,就完成了一个安全和系统的备份方案
(三)特别注意
(1)只有在rsync的配置文件允许的IP地址才可以使用rsync服务器
(2)rsync的密码认证文件 /etc/rsyncd.secrets 的权限一定是600
(3)rsync对压缩归档文件不支持增量备份