一、备份服务应用场景
- 数据有3份,多个地方存放比较安全的
- 独立备份服务器(多台多地方)
- 备份服务:rsyncd
二、备份服务-cs架构
- rsyncd服务典型的cs架构
- 服务端(server)与客户端(client)
三、环境准备
3.1IP规划
| 角色 | ip | 主机名 | 服务 |
|---|---|---|---|
| rsyncd服务端 | 10.0.0.41/172.16.1.41 | backup | rsyncd服务 |
| rsyncd客户端 | lb01-lb02 | 负载 | |
| rsyncd客户端 | web01-web02 | web | |
| rsyncd客户端 | db | 数据库 | |
| rsyncd客户端 | nfs | 存储 |
3.2rsyncd服务端
#1.安装rsyncd
yum -y insatll rsyncd
#配置文件
vim /etc/rsyncd.conf
#内容
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super =yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
#hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
#创建虚拟用户
useradd -s /sbin/nologin -M rsync
#创建rsync.password文件并写入密码
echo ‘rsync_backup:lidao’ > /etc/rsync.password
#修改rsync.password文件权限为600
chmod 600 /etc/rsync.password
#创建data目录并修改用户与用户组
mkdir -R /data/
chown -R rsync.rsync /data/
#启动rsyncd
systemctl enable –now rsyncd
#检查
ps -ef | grep rsync
#测试
rsync -av /etc/hostname rsync_backup@172.16.1.41::data
密码为刚刚在写入rsync.password文件中内容
#查看
ll /data/
cat /data/hostname
yum -y insatll rsyncd
#配置文件
vim /etc/rsyncd.conf
#内容
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super =yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
#hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
#创建虚拟用户
useradd -s /sbin/nologin -M rsync
#创建rsync.password文件并写入密码
echo ‘rsync_backup:lidao’ > /etc/rsync.password
#修改rsync.password文件权限为600
chmod 600 /etc/rsync.password
#创建data目录并修改用户与用户组
mkdir -R /data/
chown -R rsync.rsync /data/
#启动rsyncd
systemctl enable –now rsyncd
#检查
ps -ef | grep rsync
#测试
rsync -av /etc/hostname rsync_backup@172.16.1.41::data
密码为刚刚在写入rsync.password文件中内容
#查看
ll /data/
cat /data/hostname
#将lidao写入到/etc/rsync.client文件中
echo lidao >/etc/rsync.client
#修改文件权限为600
chmod 600 /etc/rsync.client
#测试
rsync -av /etc/passwd rsync_backup@172.16.1.41::data
echo lidao >/etc/rsync.client
#修改文件权限为600
chmod 600 /etc/rsync.client
#测试
rsync -av /etc/passwd rsync_backup@172.16.1.41::data
3.3排错日志
- /var/log/rsyncd.log
- /var/log/messages
四、备份项目-客户端备份脚本
4.1配置文件配置脚本
- 打包备份
- 脚本中加入md5sum效验是否丢失内容
- rsync命令传输到服务端
- 删除就的备份
#编写脚本bak_conf.sh
vim /server/scripts/bak_conf.sh
#内容:
#1.vars
ip=
rsync_ip=172.16.1.41
rsync_user=rsync_backup
rsync_mod=backup
#2.dir
if [ ! -d ${bak_dir} ]; then
mkdir -p $bak_dir
fi
#3.tar
tar zcf ${bak_dir}/conf-${time}.tar.gz /etc/
if [ $? -eq 0 ]; then
echo “$time backup ok” >>/var/log/bak.log
else
echo “$time backup failed” >>/var/log/bak.log
fi
#4.md5sum
md5sum ${bak_dir}/conf-${time}.tar.gz >${bak_dir}/conf.md5
#5.rsync C–>S
rsync -av ${bak_dir} ${rsync_user}@${rsync_ip}::${rsync_mod} –password-file=/etc/rsync.client
if [ $? -eq 0 ]; then
echo “$time backup to rsync server ok” >>/var/log/bak.log
else
echo “$time backup to rsync server failed” >>/var/log/bak.log
fi
#6.del old backup
找出7天以前的压缩包并删除
find /backup/ -type f -name “*.tar.gz” -mtime +7 |xargs \rm -f
vim /server/scripts/bak_conf.sh
#内容:
#1.vars
ip=
hostname -I | awk '{print $2}'
bak_dir=/backup/${ip}
time=`date +%F_%w`rsync_ip=172.16.1.41
rsync_user=rsync_backup
rsync_mod=backup
#2.dir
if [ ! -d ${bak_dir} ]; then
mkdir -p $bak_dir
fi
#3.tar
tar zcf ${bak_dir}/conf-${time}.tar.gz /etc/
if [ $? -eq 0 ]; then
echo “$time backup ok” >>/var/log/bak.log
else
echo “$time backup failed” >>/var/log/bak.log
fi
#4.md5sum
md5sum ${bak_dir}/conf-${time}.tar.gz >${bak_dir}/conf.md5
#5.rsync C–>S
rsync -av ${bak_dir} ${rsync_user}@${rsync_ip}::${rsync_mod} –password-file=/etc/rsync.client
if [ $? -eq 0 ]; then
echo “$time backup to rsync server ok” >>/var/log/bak.log
else
echo “$time backup to rsync server failed” >>/var/log/bak.log
fi
#6.del old backup
找出7天以前的压缩包并删除
find /backup/ -type f -name “*.tar.gz” -mtime +7 |xargs \rm -f
4.2数据库备份脚本
#编辑脚本bak_db.sh文件
vim /server/scripts/bak_db.sh
#内容:
#1.vars
user=root
pass=lidao006
ip=
for name in $databases
do
#4.备份指定数据库
mysqldump -u${user} -p${pass} –databases $name | gzip >${bak_dir}/${name}${time}.sql.gz
#5.记录
if [ $? -eq 0 ];then
echo “备份$name库 ok” >> ${log_file}
else echo “备份$name库 failed” >>${log_file}
fi
#6.md5sum
md5sum ${bak_dir}/${name}${time}.sql.gz >${bak_dir}/${name}_${time}.md5
done
#7.rsync
rsync -av /backup/ ${rsync_user}@${rsync_ip}::${rsync_mod} –password-file=/etc/rsync.client
if [ $? -eq 0 ];then
echo “backup tar to rsync server ok $time” >>${log_file}
else
echo “backup tar to rsync server failed $time” >>${log_file}
fi
#8.del old bak
find /backup/db/ -type f -name “*.tar.gz” -mtime +7 | xargs rm -f
vim /server/scripts/bak_db.sh
#内容:
#1.vars
user=root
pass=lidao006
ip=
hostname -I | awk '{print $2}'
bak_dir=/backup/db/${ip}
time=date +%F_%w
log_file=/var/log/bak_db.log
rsync_ip=172.16.1.41
rsync_user=rsync_backup
rsync_mod=backup
#2.mkdir
[ -d $bak_dir ] || {
mkdir -p $bak_dir
}
#3.for循环
databases=`mysql -u${user} -p${pass} -e 'show databases;' | egrep -vi 'mysql|schema|database'`for name in $databases
do
#4.备份指定数据库
mysqldump -u${user} -p${pass} –databases $name | gzip >${bak_dir}/${name}${time}.sql.gz
#5.记录
if [ $? -eq 0 ];then
echo “备份$name库 ok” >> ${log_file}
else echo “备份$name库 failed” >>${log_file}
fi
#6.md5sum
md5sum ${bak_dir}/${name}${time}.sql.gz >${bak_dir}/${name}_${time}.md5
done
#7.rsync
rsync -av /backup/ ${rsync_user}@${rsync_ip}::${rsync_mod} –password-file=/etc/rsync.client
if [ $? -eq 0 ];then
echo “backup tar to rsync server ok $time” >>${log_file}
else
echo “backup tar to rsync server failed $time” >>${log_file}
fi
#8.del old bak
find /backup/db/ -type f -name “*.tar.gz” -mtime +7 | xargs rm -f
五、服务端检查脚本
#编辑脚本local_back_server_check.sh
vim /server/scripts/local_back_server_check.sh
#内容:
1.vars
result_file=/var/log/result.txt
2.
du -sh /backup/ >$result_file
3.md5失败的数量
failed_count=`find /backup/ -type f -name “*.md5” | xargs md5sum -c | grep -i failed | wc -l`
echo “md5sum检查失败的数量:$failed_count” >>$result_file
4.删除旧的备份
find /backup/ -type f -name “.tar.gz” ! -name “_1.tar.gz” -mtime +180 | xargs rm -f
find /backup/ -type f -name “.sql.gz” ! -name “_1.sql.gz” -mtime +180 | xargs rm -f
vim /server/scripts/local_back_server_check.sh
#内容:
1.vars
result_file=/var/log/result.txt
2.
du -sh /backup/ >$result_file
3.md5失败的数量
failed_count=`find /backup/ -type f -name “*.md5” | xargs md5sum -c | grep -i failed | wc -l`
echo “md5sum检查失败的数量:$failed_count” >>$result_file
4.删除旧的备份
find /backup/ -type f -name “.tar.gz” ! -name “_1.tar.gz” -mtime +180 | xargs rm -f
find /backup/ -type f -name “.sql.gz” ! -name “_1.sql.gz” -mtime +180 | xargs rm -f
六、异地备份

7.4部署lsyncd服务
- nfs节点部署lsyncd
#下载
yum install -y lsyncd
#修改配置文件
vim /etc/lsyncd.conf
#内容:
–全局部分主要配置lsyncd服务,日志,pid文件.
settings {
–※※※※※日志文件,主要查看日志文件.
logfile = “/var/log/lsyncd.log”,
–pid文件
pidfile = “/var/run/lsyncd.pid”,
–服务状态文件
statusFile = “/var/log/lsyncd.status”,
–改为非守护进程模式,默认.rsync命令,lsyncd
nodaemon = true,
–控制最多用于传输数据的进程数量 rsync进程数(最大)
–※※※※※根据cpu核心数来 一致或2倍
maxProcesses = 2
}
–配置rsync命令,rsync服务端与客户端模式
–sync部分可以有多个.
sync {
–指定rsync工作模式
default.rsync,
–※※※※※ 指定lsyncd监控目录,源目录
source = “/data/”,
–※※※※※ 指定目标 rsync服务端 用户名@rsync ip地址::模块名字
target = “rsync_backup@172.16.1.41::nfsbackup”,
–※※※※※ 每隔3秒同步一次.
delay = 3,
–rsync命令的 –delete 选项 保存客户端与服务端 内容一致.
delete = true,
— 配置rsync命令位置,rsync命令选项,
rsync = {
— 命令位置
binary = “/usr/bin/rsync”,
— rsync命令的 -a选项
archive = true,
— rsync命令的 -z选项 压缩
compress = true,
— ※※※※※配置rsync –password-file密码文件
password_file = “/etc/rsync.client”
}
#创建密码文件
echo lidao >>/etc//etc/rsync.client
#修改权限
chmod 600 /etc/rsync.client
#创建目录
mkdir -p /data/
#重新启动服务
systemctl enable –now lsyncd
yum install -y lsyncd
#修改配置文件
vim /etc/lsyncd.conf
#内容:
–全局部分主要配置lsyncd服务,日志,pid文件.
settings {
–※※※※※日志文件,主要查看日志文件.
logfile = “/var/log/lsyncd.log”,
–pid文件
pidfile = “/var/run/lsyncd.pid”,
–服务状态文件
statusFile = “/var/log/lsyncd.status”,
–改为非守护进程模式,默认.rsync命令,lsyncd
nodaemon = true,
–控制最多用于传输数据的进程数量 rsync进程数(最大)
–※※※※※根据cpu核心数来 一致或2倍
maxProcesses = 2
}
–配置rsync命令,rsync服务端与客户端模式
–sync部分可以有多个.
sync {
–指定rsync工作模式
default.rsync,
–※※※※※ 指定lsyncd监控目录,源目录
source = “/data/”,
–※※※※※ 指定目标 rsync服务端 用户名@rsync ip地址::模块名字
target = “rsync_backup@172.16.1.41::nfsbackup”,
–※※※※※ 每隔3秒同步一次.
delay = 3,
–rsync命令的 –delete 选项 保存客户端与服务端 内容一致.
delete = true,
— 配置rsync命令位置,rsync命令选项,
rsync = {
— 命令位置
binary = “/usr/bin/rsync”,
— rsync命令的 -a选项
archive = true,
— rsync命令的 -z选项 压缩
compress = true,
— ※※※※※配置rsync –password-file密码文件
password_file = “/etc/rsync.client”
}}
#创建密码文件
echo lidao >>/etc//etc/rsync.client
#修改权限
chmod 600 /etc/rsync.client
#创建目录
mkdir -p /data/
#重新启动服务
systemctl enable –now lsyncd
#创建目录
mkdir -p /nfsbackup/
#修改用户与用户组
chown -R rsync.rsync /nfsbackup
#修改配置文件
vim /etc/rsyncd.conf
#添加模块
[nfsbackup]
comment = www by old0boy 14:18 2012-1-13
path = /nfsbackup
#重启rsyncd
systemctl restart rsyncd
mkdir -p /nfsbackup/
#修改用户与用户组
chown -R rsync.rsync /nfsbackup
#修改配置文件
vim /etc/rsyncd.conf
#添加模块
[nfsbackup]
comment = www by old0boy 14:18 2012-1-13
path = /nfsbackup
#重启rsyncd
systemctl restart rsyncd
- 给单独用户创建实时同步
#创建虚拟用户www(我这里uid与gid都设为1999)
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin -M www
#创建目录
mkdir -p /目录名
#修改用户与用户组
chown -R www.www /目录名
#修改配置文件
vim /etc/rsyncd.conf
#添加模块(模块名与目录名一样)
[模块名]
uid = www
gid = www
comment = www by old0boy 14:18 2012-1-13
path = /目录名
#重启
systemctl restart rsyncd
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin -M www
#创建目录
mkdir -p /目录名
#修改用户与用户组
chown -R www.www /目录名
#修改配置文件
vim /etc/rsyncd.conf
#添加模块(模块名与目录名一样)
[模块名]
uid = www
gid = www
comment = www by old0boy 14:18 2012-1-13
path = /目录名
#重启
systemctl restart rsyncd
#创建虚拟用户www(我这里uid与gid都设为1999)
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin -M www
#创建密码文件
echo 密码 >>/etc//etc/rsync.client
#修改权限
chmod 600 /etc/rsync.client
#修改存放内容目录(我用的是我的博客在nfs服务器上的内容存放目录)
chown -R www.www /nfs/blog/
#修改配置文件
vim /etc/lsyncd.conf
#修改位置
–※※※※※ 指定lsyncd监控目录,源目录
source = “/data/”,
把/data/换为/nfs/blog/
#重启
systemctl enable –now lsyncd
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin -M www
#创建密码文件
echo 密码 >>/etc//etc/rsync.client
#修改权限
chmod 600 /etc/rsync.client
#修改存放内容目录(我用的是我的博客在nfs服务器上的内容存放目录)
chown -R www.www /nfs/blog/
#修改配置文件
vim /etc/lsyncd.conf
#修改位置
–※※※※※ 指定lsyncd监控目录,源目录
source = “/data/”,
把/data/换为/nfs/blog/
#重启
systemctl enable –now lsyncd
- 测试
在backup中你创建的/nfsbackup中创建一个文件后去nfs服务器上的/data/目录下查看是否存在。
在你的博客上上传一张图片去nfs中的内容存放目录(/nfs/blog/)是否存在,再去backup服务器中的/nfsbackup中查看是否存在。
在你的博客上上传一张图片去nfs中的内容存放目录(/nfs/blog/)是否存在,再去backup服务器中的/nfsbackup中查看是否存在。