一:了解备份
本地主机:数据备份:tar打包+定时任务+存放
远程主机:scp rcp(不加密)
scp -r /etc/hosts 172.16.1.41:/tmp
Scp 全量传输
rsync:增量传输(把新增加的同步)
1:rsync
rsync是一款开源的备份工具,可以在不同主机之间进行同步,可以实现全量备份和增量备份
2:/data/与/data的区别
/data/ |
/data目录下面的内容 |
/data |
/data目录和/data目录下面的内容 |
二:传输模式
# man rsync
[root@backup ~]# yum install rsync -y
1:本地传输(相当于cp)
(1)语法:
rsync [OPTION...] SRC... [DEST]
(2)参数:
rsync: |
命令 |
[OPTION...]: |
选项 |
SRC |
本地源文件 |
[DEST] |
本地目标文件 |
(3)案例:
[root@backup ~]# rsync -r /etc/hosts /tmp/
[root@backup ~]# rsync -avz /etc/hosts /tmp/
-r: |
复制的时候加上目录,递归 |
-a: |
相当于-rlptgoD(-l:link,p:permission,-t:time,g:group,o:owner,-D:device) |
-v: |
显示过程 |
-z: |
传输时候进行压缩 |
2:远程传输Access via remote shell
借助ssh协议进行传递,ssh的用户和密码,用户和密码必须是能登录系统(不安全)/ 公钥
(1)语法:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
(2)参数:
Pull |
拉,下载 |
Push |
推,上传 |
rsync |
命令 |
[OPTION...] |
选项 |
[USER@] |
目标主机的系统用户 |
HOST |
目标主机的IP或域名 |
SRC |
目标主机的原文件 |
[DEST] |
下载至本地那个位置 |
(3)案例
[root@backup ~]# rsync /etc/passwd 172.16.1.31:/tmp (推,上传)
[root@backup ~]# rsync -avz 172.16.1.31:/etc/hostname . (拉,下载)
假设我们在nfs01 .31将本地/backup/2018-07-23这个目录以及目录下的内容,推送至于41服务器的/tmp目录下
[root@nfs01 ~]# rsync /backrsync -avz /backup/2018-07-23 172.16.1.41:/tmp
3:Access via rsync daemon(守护进程|虚拟用户)
(1)rsync的配置文件====/etc/rsyncd.conf (d==daemon)
[root@backup-41 ~]# cat /etc/rsyncd.conf
uid = rsync #rsync运行的用户和组
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false 关闭只读
list = false
hosts allow = 172.16.1.0/24 准许谁访问rsync服务的
#hosts deny = 0.0.0.0/32
auth users = rsync_backup 用来访问rsync服务端的用户名
secrets file = /etc/rsync.password 访问rsync服务端的密码
log file = /var/log/rsyncd.log
#######rsyncd.conf oldboy ###########
[backup] 模块名称 推荐与共享的目录名称相同
comment = welcome to oldboyedu backup! 注释
path = /backup 共享目录
(2)创建用户(运行程序时使用的用户)
[root@backup-41 ~]# useradd -M -s /sbin/nologin rsync
[root@backup-41 ~]# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
(3)建立虚拟账户对应的用户名与密码(用于客户端连接的账户和密码)
[root@backup-41 ~]# cat /etc/rsync.password
rsync_backup:123456
[root@backup-41 ~]# chmod 600 /etc/rsync.password
(4)创建仓库目录,授权属主和属组
[root@backup-41 ~]# mkdir /backup
[root@backup-41 ~]# chown -R rsync.rsync /backup/
(5)启动服务并检查端口
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# ss -lntp | grep rsync
LISTEN 0 5 *:873 *:* users:(("rsync",pid=2899,fd=3))
LISTEN 0 5 :::873 :::* users:(("rsync",pid=2899,fd=5))
(6)测试:
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/
backup是配置文件中的模块
三:案例
已知 3 台服务器主机名分别为 web01、backup 、nfs,主机信息见下表:
角色 外网IP(NAT) 内网IP(LAN) 主机名
WEB服务器 eth0:10.0.0.7 eth1:172.16.1.7 web01
NFS存储服务器 eth0:10.0.0.31 eth1:172.16.1.31 nfs01
Rsync备份服务器 eth0:10.0.0.41 eth1:172.16.1.41 backup
要求:
1.每天晚上01点整在 Web 服务器上打包备份(系统配置文件、日志文件、其他目录),并通过rsync命令推送备份服务器backup上备份保留
备份思路:
所有服务器在本地按日期打包, 然后再推到备份服务器backup上
具体要求如下: 1)所有服务器的备份目录必须都为/backup 2)备份的系统配置文件包括但不限于: 1.配置文件 //开机自启动配置文件 设备挂载配置文件 本地内网配置文件 /etc/rc.local /etc/fstab /etc/hosts 2.重要目录 //cron定时任务 firewalld防火墙 脚本目录 /var/spool/cron/ /etc/firewalld /server/scripts //3.系统日志文件 /var/log/ //系统安全日志、sudo日志、内核日志、rsyslog日志 //4.应用程序配置文件 rsync、nginx、PHP、mysql、redis..... //自己思考下还有什么需要备份的? 5)所有服务器推送数据, 以主机名_IP地址_当前时间作为目录, 所有的备份数据存放至该目录下 /backup/nfs-server_172.16.1.31_2018-09-02/ /backup/nfs-server_172.16.1.31_2018-09-03/ /backup/nfs-server_172.16.1.31_2018-09-04/ 3)所有服务器本地保留最近7天的数据, 避免浪费磁盘空间 4)Rsync备份服务器上,其它要保留6个月的数据副本。 /backup/nfs-server_172.16.1.31_2018-09-02/ /backup/nfs-server_172.16.1.31_2018-09-03/ /backup/nfs-server_172.16.1.31_2018-09-04/ /backup/web-server_172.16.1.31_2018-09-02/ /backup/web-server_172.16.1.31_2018-09-03/ /backup/web-server_172.16.1.31_2018-09-04/ 6)确保备份的数据完整,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中。 7)真实工作中除了服务器之间备份, 可能还会需要异地备份,这个地方请大家思考如何异地备份。