- 重要的资料光存在服务器上不保险,所以就需要使用到存储与备份服务
- 本次笔记介绍scp,rsync,lsync,nfs的用法
- scp是基于ssh的全量传输,使用简单方便,是运维常用的在服务器之间传输文件的方法,gitbash也可以使用scp指令从windows传输文件到Linux服务器。
- rsync主要用于文件的增量备份和远程同步,能够高效地同步两个目录之间的差异。
- lsync是一个实时监控本地目录并进行同步的守护进程,通常使用rsync作为后端进行文件同步
- nfs是一种分布式文件系统协议,允许客户端通过网络访问远程服务器上的文件系统。
1 rsync备份
1.1 rsync基础
1.1.1 scp和rsync
#scp为全量传输
#广泛用于文件传输
#建议传输压缩包
#-r 递归
scp -r /etc/ root@10.0.0.101:/tmp/
#scp清空密钥
ssh-keygen -R 10.0.0.101
#rsync为增量传输
#广泛用于备份
# -a递归 -v详细输出 -vvv超级详细
rsync -av /etc/ root@10.0.0.101:/tmp/
1.1.2 rsync本地模式
不推荐使用
rsync -a /etc/ /tmp/
rsync -a /etc /opt/
1.1.3 rsync远程模式
rsync -a /etc/hostname root@10.0.0.31:/tmp
1.2 rsync守护进程模式
rsync每次都要输密码,使用守护进程模式可以跳过输密码,这样会更方便编写脚本
1.2.1 rsync服务端部署
yum install -y rsync
/etc/rsyncd.conf #配置文件
/usr/bin/rsync #命令
/usr/lib/systemd/system/rsyncd.service #systemctl对应配置文件
vim /etc/rsyncd.conf
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 = 10.0.0.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
后续配置
yum install -y rsync
#1.添加虚拟用户
useradd -s /sbin/nologin -M rsync
#2.创建密码文件
密码文件格式: 用户名:密码
echo 'rsync_backup:123' >/etc/rsync.password
chmod 600 /etc/rsync.password
#3.共享目录与权限
mkdir /data/
chown rsync.rsync /data/
#启动服务
systemctl enable rsyncd
systemctl start rsyncd
#检查进程
ps -ef |grep rsync
#检查端口
ss -lntup |grep rsync
1.2.2 客户端测试
echo 123 >/etc/rsync.client
chmod 600 /etc/rsync.client
rsync -avz /etc/hosts rsync_backup@10.0.0.101::data --password-file=/etc/rsync.client
1.3 定时rsync
- 加入md5sum效验
1.3.1 客户端
vim /server/scripts/bak-conf.sh
#!/bin/bash
#1.vars
rsync_server_user=rsync_backup
rsync_server_ip=10.0.0.101
rsync_server_mod=data
rsync_server_pass=/etc/rsync.client
md5=bak.md5
rsync_client_backdir=/etc/
date=`date +%F_%w`
ip=`hostname -I |cut -d " " -f1`
bak_dir=/backup/$ip
bak_file=conf-$date.tar.gz
#2.create bak
mkdir -p $bak_dir
tar zcf $bak_dir/$bak_file $rsync_client_backdir
md5sum $bak_dir/$bak_file >$bak_dir/$md5
#3.transfer
rsync -avz $bak_dir $rsync_server_user@$rsync_server_ip::$rsync_server_mod --password-file=$rsync_server_pass
#4 clean
find $bak_dir -type f -name "*.tar.gz" -mtime +7|xargs rm -f
写入cron
echo "00 00 * * * /bin/sh /server/scripts/bak-conf.sh">>/var/spool/cron/$USER
1.3.2 服务端
/server/scripts/bak-check.sh
#!/bin/bash
#0.vars
date=`date +%F`
backDir=/data/
#1.clean old
find $backDir -type f -name ".tar.gz" -mtime +180 |xargs rm -f
#2.send check mail
find /backup/ -type f -name "bak.md5"|xargs md5sum -c &> $backDir/bak_result.txt
cat /backup/bak_result.txt|mail -s "$date 备份结果" 666@qq.com
写入cron
echo "00 00 * * * /bin/sh /server/scripts/bak-check.sh">>/var/spool/cron/$USER
1.3.3 mail.rc
配置163邮件的具体方法可以搜索其他教程,也可以删除脚本最后邮件发送指令
#未加密的发送方式通过25端口,会被公有云封掉.
cat >>/etc/mail.rc<<EOF
set from=打码@163.com
set smtp=smtp.163.com
set smtp-auth-user=打码@163.com
set smtp-auth-password=打码
set smtp-auth=login
EOF
#加密的方式465端口 要配证书,忽略报错,可正常发送
cat >>/etc/mail.rc<<EOF
set nss-config-dir=/etc/pki/nssdb/ #加密方式配置
set smtp-user-starttls #加密方式配置
set ssl-verify=ignore #加密方式配置
set from=打码.com #配置发件人
set smtp=smtps://smtp.163.com:465 #配置使用163邮箱发送邮件,不加密方式参考上面
set smtp-auth-user=打码.com #邮箱名
set smtp-auth-password=打码 #授权码
set smtp-auth=login #认证形式
EOF
1.4 企业传输大文件补充用法
# --bwlimit=10000 带宽设置成10m
# --partial --partial-dir=.rsync-partial 传输中断继续传输
# --progress 显示传输进度
rsync -avz --progress --bwlimit=10000 --partial --partial-dir=.rsync-partial /root/node_exporter_install.sh root@172.20.128.39:/root/
2 NFS
2.1 NFS服务端部署
yum install -y rpcbind nfs-utils
systemctl eable rpcbind
systemctl start rpcbind
rpcinfo -p
systemctl eable nfs
systemctl start nfs
rpcinfo -p
# /etc/exports是nfs的配置文件,提供给客户端可挂载的路径
echo "/data/ 10.0.0.0/24(rw)">>/etc/exports
systemctl reload nfs
chown nfsnobody.nfsnobody /data/
#本机挂载测试
mount -t nfs 10.0.0.2:/data/ /mnt/
rpcinfo -p 10.0.0.2
showmount -e 10.0.0.2
2.2 客户端挂载
yum intall -y nfs-utils
mount -t nfs 10.0.0.2:/data /mnt
#永久挂载
echo "10.0.0.2:/data/ /mnt/ nfs defaults 0 0">>/etc/fstab
2.3 NFS补充
2.3.1 相关配置文件
项目 | Value |
---|---|
NFS服务端 | /etc/exports /var/lib/nfs/etab |
NFS客户端 | /etc/rc.local或/etc/fstab /proc/mounts |
2.3.2 /etc/exports
服务端配置选项 | 说明 |
---|---|
rw | read write |
ro | read only |
sync | 同步,只要用户上传,就写入数据 |
async | 异步,用户上传数据,nfs先存在内存中,过一段时间再集中写入 |
服务端配置选项 | 说明 |
---|---|
root_squash | (默认)如果客户端是root访问,到了nfs服务会被压缩 |
no_all_squash | (默认)如果客户端不是root访问,则不进行压缩 |
all_squash | 所有用户都压缩(不安全) |
anonuid,anongid | 用于指定压缩的匿名用户(默认是nfsnobody,anonuid=65534,anongid=6553示范 |
rw #允许读写
ro #只读
sync #同步写入
async #先写入缓冲区,必要时才写入磁盘,速度快,但会丢数据
subtree_check #若输出一个子目录,则nfs服务将检查其父目录权限
no_subtree_check #若输出一个字目录,不检查父目录,提高效率
no_root_squash #客户端以root登录时,赋予其本地root权限
oot_squash #客户端以root登录时,将其映射为匿名用户
all_squash #将所有用户映射为匿名用户
#1.所有主机
useradd -u 1999 -s /sbin/nologin -M www
#2.nfs服务端配置
/nfsdata/ 10.0.0.0/24(rw,all_squash,anonuid=1999,anongid=1999)
2.3.3 NFS优化
mount -o noexec,nosuid,nodev -t nfs 10.0.0.0:/data /video/
#noexec 挂载的nfs目录中如果有命令,无法运行
#nosuid 带有suid的命令
#nodev 带有特殊属性的文件
10.0.0.0:/data /video/ nfs noexec,nosuid,nodev 0 0
3 lsync
rsync的客户端即lsync的服务端
yum install -y lsyncd
3.1 环境配置
/etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
maxDelays = 10,
nodaemon = true,
statusInterval = 10,
}
sync {
default.rsync,
source = "/testDir/",
target = "rsync_backup@10.0.0.101::data",
delete = true,
delay = 15,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsync.client"
}
}
systemctl enable lsyncd
systemctl start lsyncd
systemctl status lsyncd
3.2 lsyncd监控多个目录
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
maxDelays = 10,
nodaemon = true,
statusInterval = 10,
}
sync {
default.rsync,
source = "/testDir/",
target = "rsync_backup@10.0.0.200::data",
delete = true,
delay = 15,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsync.client"
}
}
sync {
default.rsync,
source = "/testDir2/",
target = "rsync_backup@10.0.0.200::nfsbackup",
delete = true,
delay = 15,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsync.client"
}
}