day32
rsync 复制软件应用与实践
1、what: Remote synchronization 缩写rsync是开源的、高速的、数据复制工具。
2、why:工作中需要(定时/实时)数据备份。本地、不同机器、不同机房之间全量以及增量的数据备份。
-
3、功能特性:
4、增量复制:使用quick check算法,只对增量的部分复制,根据大小、属性的变化进行比对
2.x 比对差异后复制, 3.x 一边比对一边复制5、rsync三种工作模式介绍
(1)本地模式
a、(本地拷贝)可以把数据从一个地方复制到另一个地方(仅在一台机器增量),相当于cp
b、通过加参数可以实现删除的功能,相当于rm命令。
c、查看属性信息的功能,相当于ls,实践:
rsync 参数选项 源文件 目标文件
rsync -zrtopg /etc/hosts /opt/ #复制文件,相当于cp
rsync -r --delete /null.txt /opt/hosts #删除hosts文件的内容,相当于用null.txt文件覆盖它的内容
rsync -r --delete /null/ /opt #删除/opt目录下的文件,用null目录覆盖/opt目录
(2)远程shell模式
借助类似ssh隧道传输数据,适合不同的机器之间复制。
相当于scp,但是scp是全量拷贝
pull, 拉:从远端拉去到本地。
rsync [参数] [认证用户]@[主机地址]:[原地址] [本地路径]
rsync -avz [email protected]:/opt/ /opt/
sh,推:从本地推到远端。
rsync [参数] [本地路径] [认证用户]@[主机地址]:[目标地址]
rsync -avz /etc/hosts [email protected]:/opt 相当于下面
rsync -avz /etc/hosts -e 'ssh -p 22' [email protected]:/opt
-e 指定通道 ssh -p 指定端口
- 推拉
a. 参照物,执行命令
强调一个重点:
null和 nmll/ 区别:null是目录和目录下的内容
null/ 是目录下的内容
(3)守护进程模式
首先要搭建服务端(要有守护进程),然后才能在客户端实现推拉数据。
企业运维重要模式
- 6、rsync命令参数
企业常用参数组合: -avz 或者 -vzrtopg
man rsync 查命令参数
man rsyncd.conf 查配置文件的参数
- 7、rsync守护进程模式实践
以下操作都是在backup服务器
1、yum install -y rsync 安装
2、配置配置文件 /etc/rsyncd.conf 模板
[root@backup ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
配置详情:
[root@backup ~]# cat -n /etc/rsyncd.conf
1 #rsync_config_______________start
2 #created by oldboy
3 #site: http://www.oldboyedu.com
4 uid = rsync 管理备份目录的用户
5 gid = rsync 管理备份目录的用户组
fake super =yes 允许非root用户存储文件
6 use chroot = no 安全功能:是否锁定到备份目录
7 max connections = 200 并发连接,同时最大访问数
8 timeout = 600 超时时间。
9 pid file = /var/run/rsyncd.pid 进程号所在的文件
10 lock file = /var/run/rsync.lock 锁文件
11 log file = /var/log/rsyncd.log 日志文件,查看报错等
12 ignore errors 忽略错误
13 read only = false 可写
14 list = false 不允许列表,客户端不能看服务端有什么文件
15 hosts allow = 172.16.1.0/24 授权哪些主机可以访问
16 hosts deny = 0.0.0.0/32 拒绝哪些主机不可以访问
17 auth users = rsync_backup 远程虚拟连接用户
18 secrets file = /etc/rsync.password 存放密码文件,格式:用户名:密码,权限要求 600
19 [backup] 模块名,远程访问一般会使用模块名访问
20 comment = welcome to oldboyedu backup! 说明,注释
21 path = /backup/ 服务器端用于备份的目录,用户和组:rsync.rsync
3、启动和检查服务
rsync --daemon (C6以前的用法)
systemctl start rsyncd
systemctl enable rsyncd
ps -ef|grep rsync|grep -v grep #检查
netstat -lntup|grep 873
lsof -i:873
4、配置密码文件
echo "rsync_backup:oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
- (2)客户端配置
方法1:认证密码文件
echo "oldboy" > /etc/rsync.password #只输入密码
chmod 600 /etc/rsync.password
方法2:
echo 'export RSYNC_PASSWORD=oldboy' >>/etc/bashrc
source /etc/bashrc
echo $RSYNC_PASSWORD
如果安装第二中方法配置,可以省略命令行中定义密码文件
- (3)守护进程模式rsync语法
配置服务器端守护进程,实现数据传输:
1、服务器端守护进程 2、客户端执行命令
语法:
拉: rsync 参数 [虚拟用户]@[主机地址]::模块名 本地路径
rsync 参数 rsync://[虚拟用户]@[主机地址]/[模块名] 本地地址
推:
- (4)测试成果
[root@nfs01 /opt]# rsync -avz /etc/host [email protected]::backup --password-file=/etc/rsync.password
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
排除错误:
服务端配置
[root@backup ~]# useradd rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) 组=1001(rsync)
[root@backup ~]# mkdir -p /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@nfs01 /opt]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
rsync: chgrp ".hosts.AISvZa" (in backup) failed: Operation not permitted (1)
sent 222 bytes received 124 bytes 692.00 bytes/sec
total size is 332 speedup is 0.96
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
排除:
服务端:在/etc/rsyncd.confz中添加一行 fake super = yes
意思是 允许非root用户存储文件的完整属性
改完配置,要重启服务
~
~
~
~
~
day33
实践排除复制:
机器:nfs01:
环境
[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]# cd /data
[root@nfs01 /data]# touch {a..d}
[root@nfs01 /data]# ls
a b c d
--exclude 排除参数
例:排除 a b
[root@nfs01 /data]# rsync -avz /data/ --exclude=a --exclude=b [email protected]::backup
sending incremental file list
./
c
d
排除1到4
[root@nfs01 /data]# touch {1..5}
[root@nfs01 /data]# rsync -avz /data/ --exclude={1..4} [email protected]::backup
sending incremental file list
./
5
a
b
[root@nfs01 /data]# rsync -avz /data/ --exclude={1,3,a} [email protected]::backup
sending incremental file list
2
4
--exclude-from 从文件排除
[root@nfs01 /data]# rsync -avz /data/ --exclude-from=./paichu.txt [email protected]::backup
sending incremental file list
./
16
17
18
19
20
paichu.txt
-
1、多模块
在配置文件添加2行 模块名+路劲
将目标文件的属主和用户组修改为rsync
重启服务,(只要修改配置,就要重装服务)
有大量小文件时,第一次备份建议使用scp,避免僵死,等以后再用rsync
课工作场景一般用于对程序代码以及运维人员对系统的配置变更的备份。
-
rsync项目解答:
第一个里程碑
在41上搭建好rsync服务,并在31/7上测试成功
第二个里程碑
开发脚本打包备份
-
模拟创建
打包
脚本打包
[root@nfs01 /server/scripts]# cat bak.sh
#!/bin/bash
/bin/tar zhcf /backup/bak_$(date +%F).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts/ &>/dev/null
定时任务
[root@nfs01 /server/scripts]# cat bak.sh
#!/bin/bash
/bin/tar zhcf /backup/bak_$(date +%F).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts/ &>/dev/null
删除
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f
校验
[root@nfs01 /server/scripts]# #采集人的指纹
[root@nfs01 /server/scripts]# md5sum oldboy.txt >zhiwen.log
[root@nfs01 /server/scripts]# cat zhiwen.log
348bd3ce10ec00ecc29d31ec97cd5839 oldboy.txt
[root@nfs01 /server/scripts]# #校验
[root@nfs01 /server/scripts]# md5sum -c zhiwen.log
oldboy.txt: 确定
~
~
~
~
~
day34
- 思想
智商:人的认知、思维、观察、计算等能力,主要表现人的理性的能力,
情商:是一个人自我情绪管理以及管理他人情绪的能力指数。
逆商:是人在面对逆境时的处理能力,以弹性面对逆境、积极乐观、接受困难的挑战、发挥创意找出
解决方案,因此不屈不挠,愈挫愈勇。
NFS
1、what :network file system 网络文件系统:通过网络存取和组织文件的一种方法或机制。
什么是文件系统?2、why:前端所有的应用服务器接收到用户上传的图片、文件、视频、都会统一放到NFS中
为什么要共享存储:所有节点服务器都需要将内容存到存储上,取出统一的来。3、共享存储的种类
单一存储系统就是NFS,一般适用于中小型企业,阿里云服务的NAS服务。
NFS性能不太高
大型企业会用FastDFS、Ceph、GlsterFS、Mfs (都是分布式存储)
大型存储厂商:EMC Netapp 一套几十万。
艺龙旅行网 存储用的EMC 传统企业
硬件存储:稳定、2台 双主机头,几十块硬盘 RAID10
BAT 曾经用硬件,超贵
BAT 去IOE IBM ORACE EMC 全部用软件替代4、NFS工作原理
NFS:网络文件系统
启动NFS服务,还有启动很多端口,所以NFS功能,需要很多服务,而且每个服务都有端口,而且经常变化。
如何让客户端能够找到这些端口呢?就需要一个经纪人(rpc服务)-
所以NFS服务 至少包含两个部分:
1、NFS服务(有很多进程和端口),把自己的端口告诉RPC
2、RPC服务,(对外固定端口111)
客户端请求NFS服务,先找PRC 111,插到NFS端口,发给客户
NFS服务的安装启动
1、NFS软件列表
nfs-utils :NFS服务的主程序,包括rpc
rpcbind2.安装
yum install -y rpcbind nfs-utils
客户端也要两个全安3、启动rpc
systemctl start rpcbind.service
systemctl enable rpcbind.service4、检查rpc本地注册的端口信息
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
5、启动nfs服务
systemctl start nfs
systemctl enable nfs6、再次查看本地注册的端口信息
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 25199 status
100024 1 tcp 24346 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 34579 nlockmgr
100021 3 udp 34579 nlockmgr
100021 4 udp 34579 nlockmgr
100021 1 tcp 22353 nlockmgr
100021 3 tcp 22353 nlockmgr
100021 4 tcp 22353 nlockmgr
- 7、查看rpc端口
- 8、配置nfs
a.NFS配置文件 /etc/exports 默认为空
添加一行 :/data 172.16.1.0/16(rw,sync) #逗号隔开权限
共享目录^ 访问地址 ^权限 ##注意:主机名和权限必须中间没有空壳,否则报错
b.NFS默认用户 nfsnobody
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data #将共享目录的用户和用户组修改
[root@nfs01 ~]# ls -ld /data
drwxr-xr-x 3 nfsnobody nfsnobody 74 4月 16 09:28 /data
c. 重启nfs服务
systemctl reload nfs
或者 exportfs -r
在正式场景必须要平滑重启,能平滑就平滑,没有的话就没事
d.检查nfs共享
[root@nfs01 ~]# showmount -e
Export list for nfs01:
/data 172.16.1.0/16
e. 本地挂载检测
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@nfs01 ~]# cd /mnt
[root@nfs01 /mnt]# ls
a b c d [email protected]
[root@nfs01 /mnt]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 99G 2.0G 97G 2% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 253M 186M 68M 74% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 99G 2.0G 97G 2% /mnt #<==效果
- 查看exports参数信息
[root@nfs01 ~]# man exports
EXAMPLE
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub *(ro,insecure,all_squash)
/srv/www -sync,rw server @trusted @external(ro)
/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build buildhost[0-9].local.domain(rw)
- 待共享的目录 访问的主机 (权限)
1)待共享的目录:存东西的目录 取东西的目录, 例如 /data
2)访问的主机
172.16.1.7 单个主机 (web01)
172.16.1.0/24 网段
172.16.1.* 网段
master 主机名
可以写IP、网段、主机名、域名、一行可以写两个,给不同的权限
3)权限
rw 可读写 read write
ro 只读 read only
sync 写到磁盘才算完成 慢 安全
async 异步写到远程缓存区 快 不安全 (redis)
- 9、配置客户端
yum install -y rpcbind nfs-utils #安装
[root@web01 ~]# showmount -e 172.16.1.31 #检查FNS共享文件
Export list for 172.16.1.31:
/data 172.16.1.0/16
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt #挂载NFS文件
[root@web01 ~]# df -h #检查挂载结果
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 99G 2.0G 97G 2% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 253M 186M 68M 74% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 99G 2.0G 97G 2% /mnt
- 10、报错
nt_create: RPC: Program not registered
程序 没有 注册
#:可能是nfs没有启动,或者是启动顺序不对
实时复制inotify/sersync
~
~
~
~
day35
1、案例
1.如何实现NFS文件的开机自动挂载?
问题所在:在Linux系统的开机启动流程中,先挂载、再启动防火墙,最后开启网络
所以在fstab中挂载的时候,是没有NFS文件的,
解决思路:调整开机顺序,或者是让fstab挂载命令持续请求
解决过程:开启服务:systemctl start remote-fs.target
systemctl enable remote-fs.target
在/etc/fstab中添加一行来开机自动挂载。-
2.设置开机自动挂载后的问题
a.NFS与rsync的对比:rsync 客户端和服务端,没有直接关联,只有请求的时候才会处理
NFS耦合度高,实时和服务端关联(使用 autofs 服务可降低耦合度,有请求再mount。可用在并发不高的场合)
b.所以会出现以下情况
当NFS服务未启动时,会导致NFS客户端系统无法正常启动
原因是fstab和remote-fs服务会不断地请求NFS的链接,不进行下一步的启动。
解决方法: 添加挂载参数 hard,intr
或者是 修改参数为 soft ##目的是当客户端无法联系到NFS服务器时,跳过该阶段
17.png 3.项目实践 更改默认NFS默认用户
-
- a.NFS的用户可用权限
rw 可读写 read write
ro 只读 read only
sync 写到磁盘才算完成, 特点是 安全 慢
async 异步写到远程缓存区 不安全 快
all squash 不管客户端是什么用户,到服务端都是nfsnobody
anonuid =匿名用户的UID
anongid =匿名用户的GID
- a.NFS的用户可用权限
-
- b.解决流程
服务端: groupadd www #在服务器添加www用户组
useradd -u 888 -g www www #添加www用户,指定UID和用户组
vim /etc/exports #配置NFS服务
在共享文件夹添加权限:
修改共享文件用户和组 : chown -R www.www /data
平滑重启服务 : systemctl reload nfs
客户端:重新挂载共享文件
- b.解决流程
4.查看/data共享的完整参数 cat /var/lib/nfs/etab
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/16(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
- 5.生产案例
文件系统只读故障,或者是fstab损坏 。 可以使用以下方法恢复
1、救援模式修复,
2、单用户,mount -o remount,rw /
2、NFS服务的重点知识梳理
3、NFS服务相关的重要文件
/usr/sbin/exportfs :NFS服务的管理命令,例如可以加载NFS配置生效,还可以直接配置NFS共享的目录,即无需配置/etc/exports实现共享,这里有一个服务平滑重启的概念。exportfs不但可以加载配置生效,也可以通过命令直接共享目录,越过/etc/exports,但是重启失效
/usr/sbin/showmount :用来在客户端,查看NFS配置及挂载结果的命令
/var/lib/nfs/etab :NFS配置文件完整参数文件(有很多没有配置但是默认就有的NFS参数)
/var/lib/nfs/xtab :适合C5.x记录曾经挂载过的NFS客户端的信息,包括IP地址等。
/proc/mounts :客户端本地挂载参数和状态信息的文件
/var/lib/nfs/rmtab : 客户端访问服务单exports的信息列表(CentOS 7.6/7取消此功能)
4、NFS挂载mount的相关参数
cat /var/mounts
172.16.1.31:/data /mnt nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,local_lock=none,addr=172.16.1.31 0 0
5、mount -o参数对应的选项
6、NFS服务初级优化
7、优化挂载的参数
8、NFS服务企业高级优化
、
9、NFS系统应用的优缺点
10.NFS应用建议
11.NFS性能问题解决
1、使用CND加速,以及自己搭建文件缓存服务(squid,nginx,varnish)
2、把多个目录分配到不同的NFS服务器上
3、弃用NFS
4、使用分布式文件系统(FastDFS)
阿里云对应的存储服务NAS服务,还有OSS对象存储
~
~
~
~
day36
定时备份
实时备份
同步异步
异步:东西放置后扥对方取
同步:亲手交到对方手里
异步的最常见机制:消息队列,简单说就是大家去排队,等着拿东西
部署实时复制
1、确保rsync服务和客户端配置完成
2、 查看inotify支持情况 3各参数
[root@nfs01 ~]# uname -r
3.10.0-957.10.1.el7.x86_64
[root@nfs01 ~]# ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 4月 19 09:45 max_queued_events
-rw-r--r-- 1 root root 0 4月 19 09:45 max_user_instances
-rw-r--r-- 1 root root 0 4月 19 09:45 max_user_watches
- 3、安装
yum install inotify-tools -y #安装
rpm -ql inotify-tools|head -2
/usr/bin/inotifywait # inotifywait软件命令 重要
/usr/bin/inotifywatch # inotifywatch软件命令 重要
[root@backup /backup]# rpm -qa inotify-tools #查看版本
inotify-tools-3.14-8.el7.x86_64
- 4、测试
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data
-mrq 安静地递归监控
'%d/%m/%y %H:%M' --format '%T %w%f' 显示格式 年月日时分秒 文件名 操作
5、思考
监控的操作: 增、删、改
inotifywait -mrq --format '%w%f' -e delete,close_write /data #同时监控.data目录增删改6、编写脚本
脚本1
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq --format '%w%f' -e close_write,delete /data|\
while read line
do
#删除事件发生
[ -e "$line" ] && cd /data
#rsync -az --delete ./ [email protected]::backup && continue
#处理增改事件
rsync -az --delete ./ [email protected]::backup
done
脚本2
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq --format '%w%f' -e close_write,delete /data|\
while read line
do
cd /data&&\
rsync -az --delete ./ [email protected]::backup
done
sersync实时复制
- 实现
1、确保rsync服务和客户端配置完成,推送成功
2、安装
将老师给的安装包解压到指定目录 /application
vim /application/sersync/conf/confxml.xml
!](https://upload-images.jianshu.io/upload_images/16833391-36553aa17eeb3cbf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3、启动服务
4、查看
开启服务 application/sersync/bin/sersync -d -n 10 -o /application/sersync/conf/confxml.xml
关闭服务 pkill sersync
无法使用systemctl管理,因为他是二进制安装,不是yum安装