1、Rsync+Inotify-tools
(1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
(2):rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。
2、Rsync+sersync
(1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
(2):rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。
小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync
一、需求
有台500G容量的磁盘需要更改成300G的磁盘,数据有200G一直有数据进来。
1、sersync+rsync实时同步
2、关闭服务再次同步数据
3、切换磁盘

sersync+rsync实时同步
1.1、备份服务器配置
升级rsync到3.0以上
rsync --version|head -2
rsync version 3.1.2 protocol version 31
1、rsync服务的配置文件:
vi /etc/rsyncd.conf

uid = root
gid = root
port=873
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = test
hosts allow = 172.0.0.0/8
hosts deny = 0.0.0.0/32
log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.password
motd file = /etc/rsyncd.Motd
[rsync]
path = /data1/clickhouse
comment = rsync

######
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
port=873 #默认端口
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600 #设置超时时间
auth users = test #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 172.0.0.0/8 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 0.0.0.0/32 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid #pid文件的存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motd file = /etc/rsyncd.Motd #rsync启动时欢迎信息页面文件位置(文件内容自定义)
[rsync] #自定义名称
path = /opt/rsync/ #rsync服务端数据目录路径
comment = rsync #模块名称与[home_www.osyunwei.com]自定义名称相同
########
上面的uid、gid要换成您服务器的相应的同步用户;注意,rsync服务账户(本文用的是root)要有对被同步目录(/data/)的写入更新权限;
2、创建用户认证文件,设置权限为600
echo "rsync_backup:rsync_backup">/etc/rsync.password
chmod 600 /etc/rsync.password
#格式,用户名:密码,可以设置多个,每行一个用户名:密码
chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsync.password
启动守护进程,并写入开机自启动
rsync --daemon
systemctl enable rsyncd
lsof -i:873
3、创建同步目录
mkdir /opt/rsync
二、master端被备份的服务器
1、在master上配置rsync客户端相关权限认证:
echo "test123" > /etc/rsyncd.conf
chmod 600 /etc/rsyncd.conf
2、mter主服务器上手工测试rsync同步情况
特别提示:此步非常关键,如果测试不成功,后面的sersync配好了也不会同步数据
/data1/clickhouse #备份到目的端的路径

测试:把本地/mnt/sersync2.5.4拷贝到定义的rsync路径/data1/clickhouse指定密码文件
rsync -avz /mnt/sersync2.5.4_64bit_binary_stable_final.tar.gz [email protected]::rsync --password-file=/etc/rsync.pass
查看客户端/opt/tongbu/是否有数据过来
安装sersync

wget  https://raw.githubusercontent.com/orangle/sersync/master/release/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/src
mv /usr/local/src/GNU-Linux-x86 /usr/local/sersync
cd /usr/local/sersync
cp confxml.xml confxml.xml.$(date +%F)

更改优化sersync配置文件:
vim confxml.xml
a) 修改24--28行
# 本地要同步的目录、备份的源路径

# 同步到哪台机器上 tongbu模块rsync端模块名字
# 同步到哪台机器上 tongbu模块

更改后

   
        
            
            
            
        
        
        
         
             
             
         
        

b)修改31--34行,认证部分【rsync密码认证】







修改后:


            
            
            
            
            
            
修改内容为 rsync的密码文件以及 同步所使用的账号类似:
rsync -avz /opt/tongbu/ [email protected]::rsync --password-file=/etc/rsync.password  

c)修改37行

当同步失败后,日志记录到/usr/local/sersync/logs/rsync_fail_log.sh路径中,并且每60分钟对失败的log进行重新同步

修改后:    
        

查看sersync参数
/usr/local/sersync/sersync2 -h
启动sersync
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml

关闭服务再次同步数据
2.1 停止服务
停止服务后再次实时同步下数据
more stop.sh 

#!/bin/bash
echo "关闭所有服务"
supervisorctl stop all
docker stop 6806d7682289 393365cb2259
sleep 2
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

切换磁盘
3.1、切换磁盘
卸载老的磁盘后挂载新磁盘加入到开机启动
more mount.sh 

#!/bin/bash
pkill rsync
umount /data
umount /data1
sed -i '/data/'d /etc/fstab
echo "挂载磁盘"
mount /dev/vdc /data
systemctl daemon-reload
echo "开机自动挂载"
UUID=$(blkid |grep vdc|awk -F ' ' '{print $2}')
echo "$UUID /data xfs defaults 0 0" >> /etc/fstab