本文主要是介绍贴切生产环境rsync远程同步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
rsync同步常用命令
-
如果你是一位运维工程师,你很可能会面对几十台、几百台甚至上千台服务器,除了批量操作外,环境同步、数据同步也是必不可少的技能。
-
说到“同步”,不得不提的利器就是rsync,今天就来说说我从这个工具中看到的同步的艺术。
关于rsync
一款快速增量备份工具
- Remote Sync , 远程同步
- 支持本地复制,或者与其他SSH、rsync主机同步
- 官方网站:http://rsync.samba.org
配置rsync源服务器
rsync同步源
指定备份操作的远程服务器,而称为备份源
基本思路
建立rsyncd.conf配置文件、独立的账户文件
- 启动rysnc的 --daemon模式
应用示例
用户backuper,允许下行同步
- 操作的目录为 /var/www/html
配置文件rsyncd.conf
徐守东建立,语法类似于Samba配置
- 认证配置auth users、secrets file,不加则为匿名
rsync账号文件
采用“用户名:密码”的记录格式,每行一个哟用户记录
- 独立的账户数据,不依赖与系统账号
启动rsync服务
通过 --daemon独自提供服务
使用rsync备份工具
rsync命令的用法
rsync 【选项】 原始位置 目标位置
- 常用选项
♦ -a : 归档模式,递归并保留对象属性,等用于-rlptgoD
♦ -v : 显示同步过程的详细信息
♦ -z : 在传输文件是进行压缩
♦ -H : 保留硬连接文件
♦ -A :保留ACL属性信息
♦ --delete :删除目标位置有而原始位置没有的文件
♦ --checksum : 根据对象的校验和来决定是否跳过文件
配置源的俩种表示方法
格式1 : 用户名@主机地址::共享模块名
格式2 : rsync://用户名@主机地址/共享模块名
实操
首先分别在服务器和客户端的俩台虚拟机上安装rsync的软件包
服务器端
[root@localhost ~]# vi /etc/rsyncd.conf 进入配置文件
uid = nobody 程序型用户
gid = nobody
use chroot = yes 禁锢家目录
address = 20.0.0.33
port 873
log file = /var/log/rsyncd.log 日志文件
pid file = /var/run/rsyncd.pid 进程文件
hosts allow = 20.0.0.0/24 允许20网段访问
[wwwroot] 共享模块名
path = /var/www/html 设置apache的站点供给别人访问
comment = www.kgc.cn 这是一段描述信息,可以随便设置
read only =yes 设置只读模式
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 压缩模块
auth users = backuper 虚拟的用户名
secrets file = /etc/rsyncd_users.db 数据库文件
vi /etc/rsyncd_users.db 单独创建虚拟用户的密码
backuper:abc123 这是一种格式必须是账户号码加“:”然后在跟密码
然后给文件设置一个权限,只有文件的所有者才能看文件的内容,增加了文件的安全性
chmod 600 /etc/rsyncd_users.db
启动服务进程
rsync --daemon
然后查看状态
netstat -natp |grep rsync
服务起来之后我们还要下载httpd服务,因为要基于该协议,传输信息
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo “this is abc” > abc.txt 创建一个文件作为测试
登陆客服端服务器
[root@localhost ~]# rsync -avz backuper@20.0.0.33::wwwroot /opt
从中我们可以看出,我们在同步信息的时候需要输入密码进行交互,这样会比较的麻烦,那么我们可以进行免交互
首先我们在用户端的路径下创建一个单独的密码文件
[root@localhost ~]# vi /etc/server.pass
我们在客户端把之前同步到/opt目录下的文件给删除了
[root@localhost opt]# rm -rf abc.txt
[root@localhost opt]# ll 然后查看已经是空的了
[root@localhost opt]# rsync -avz --delete --password
file=/etc/server.pass backuper@20.0.0.33::wwwroot /opt
在哪一个终端做同步,就需要那个服务器做监控
- 调整inotify内核参数
[root@localhost opt]# vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 监控事例队列的大小
fs.inotify.max_user_instances = 1024 最多监控实力的数量
fs.inotify.max_user_watches = 1048576 每个实力最多监控文件数
那么要是想完成实时同步就需要rsync+inotify 来完成实时同步的操作
- 安专inotify-tools 辅助工具
♦ inotifywait : 用于持续监控,实时输出结果
♦ inotifywatch : 用于短期监控,任务完成后再出结果
常用的可选项
- -m 持续进行监控
- -r 递归监控所有子对象
- -q 简化输出信息
- -e 指定要监控那些事件类型
先对文件过进行解压,解压之后切到扩展目录
[root@localhost ~]# cd inotify-tools-3.14
[root@localhost inotify-tools-3.14]# yum -y install gcc gcc -c++ 安装底层环境
这里是引用
[root@localhost inotify-tools-3.14]# ./configure 执行
[root@localhost inotify-tools-3.14]# make && make install
装好之后我们就可以对它开启监控了
[root@localhost ~]# vi /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /opt/wot/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.password /opt/wot/ backuper@20.0.0.33::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE 读取输出的监控记录doif [ $(pgrep rsync | wc -l) -le 0 ] 如果rsync未在执行,则立即启动then$RSYNC_CMDfi
done
然后在服务器端修改配置文件
[root@localhost ~]# vi /etc/rsyncd.conf
[root@localhost ~]# netstat -anpt |grep rsync
[root@localhost ~]# kill -9 27257 干掉这个进程
[root@localhost ~]# netstat -anpt |grep rsync 在进行过滤就看不到该进程了
[root@localhost ~]# rsync --daemon 启动守护进程
failed to create pid file /var/run/rsyncd.pid: File exists
开启守护进程,但是提示/var/run/目录下还有一个rsyncd.pid的文件存在
[root@localhost ~]# cd /var/run/
[root@localhost run]# ls 确实发现里面还有一个进程文件
[root@localhost run]# cat rsyncd.pid 查看这个文件的进程显示的进程号就是之前过滤出来的进程号
[root@localhost run]# rm -rf rsyncd.pid 删除进程文件
[root@localhost run]# netstat -anpt |grep rsync
开始执行这个脚本
然后在客户端在开一个进程,然后在共享目录里面在创建一个文件
[root@localhost wot]# echo “this is abc” > test.txt
这时切换到服务器端就能看到信息
然后在客户端查看之前的创建的文件,发现已经同步成功了
这篇关于贴切生产环境rsync远程同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!