Rsync+sersync实现数据实时同步(小白的“升级打怪”成长之路)

目录

一、rsync部署

push推数据

1、编写rsync配置文件

2、备份测试

3、检验结果

[二、rsync+sersync 实现数据实时同步](#二、rsync+sersync 实现数据实时同步)

1、安装sersync服务

2、检验结果

pull拉取数据

1、编写rsync配置文件

2、检验结果

三、脚本编写

1、客户端脚本编写

2、服务器脚本编写


一、rsync部署

  • 服务器:source 192.168.58.130 (进行数据备份的主机)

  • 客户端:targetpc 192.168.58.131 (备份存储的主机)

push推数据

1、编写rsync配置文件

复制代码
#192.168.58.131
# 在客户端上编写rsync配置文件,创建一个存放备份的同步目录
[root@targetpc ~]# vim /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
​
​
#在这些内容后面加上下面的内容
复制代码
#加上
port=873
address = 192.168.58.131
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = 192.168.58.0/24
[data]
path = /data/backup
comment = bakcup data
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd
复制代码
#192.168.58.131
# 创建密码文件,格式   用户名:密码
# 设置密码文件权限为600或者700
[root@targetpc ~]# touch /etc/rsync.passwd
[root@targetpc ~]# vim /etc/rsync.passwd 
rsyncuser:123456
[root@targetpc ~]# chmod 600 /etc/rsync.passwd
复制代码
#192.168.58.131
# 创建欢迎信息文件
[root@targetpc ~]# echo "Welcome to Backup Server" > /etc/rsyncd.motd
​
[root@targetpc ~]# systemctl start rsyncd
[root@targetpc ~]# mkdir -p /data/backup
[root@targetpc ~]# cd /data/backup

2、备份测试

复制代码
#192.168.58.130
[root@source ~]# mkdir /data
[root@source ~]# cd /data
[root@source data]# touch 1.txt
[root@source data]# mkdir aaa
[root@source data]# rsync -avz /data/* [email protected]::data
Welcome to Backup Server
​
Password: 
sending incremental file list
1.txt
aaa/
​
sent 124 bytes  received 43 bytes  9.03 bytes/sec
total size is 0  speedup is 0.00
[root@source data]# touch 2.txt
[root@source data]# ls
1.txt  2.txt  aaa
[root@source data]# rsync -avz /data/* [email protected]::data
Welcome to Backup Server
​
Password: 
sending incremental file list
2.txt
​
sent 137 bytes  received 36 bytes  9.89 bytes/sec
total size is 0  speedup is 0.00

3、检验结果

复制代码
#192.168.58.131
[root@targetpc backup]# ls
1.txt  2.txt  aaa
​
​
[root@targetpc backup]# touch 3.txt
[root@targetpc backup]# ls
1.txt  2.txt  3.txt  aaa
复制代码
#192.168.58.130
[root@source data]# rsync -avz --delete /data/ [email protected]::data
Welcome to Backup Server
​
Password: 
sending incremental file list
deleting 3.txt
​
sent 125 bytes  received 22 bytes  8.91 bytes/sec
total size is 0  speedup is 0.00
复制代码
#192.168.58.131
[root@targetpc backup]# ls
1.txt  2.txt  aaa

非交互式:

如果想不输入密码,可以使用--password-file参数指定密码

复制代码
#192.168.58.130
[root@source data]# vim /etc/rsync.passwd
123456
[root@source data]# chmod 600 /etc/rsync.passwd
[root@source data]#  rsync -avz --delete /data/ [email protected]::data --password-file=/etc/rsync.passwd
Welcome to Backup Server
​
sending incremental file list
deleting data/aaa/
deleting data/2.txt
deleting data/1.txt
deleting data/
./
​
sent 132 bytes  received 70 bytes  13.93 bytes/sec
total size is 0  speedup is 0.00
复制代码
#192.168.58.131
[root@targetpc backup]# ls
1.txt  2.txt  aaa

二、rsync+sersync 实现数据实时同步

1、安装sersync服务

复制代码
#192.168.58.130
[root@source data]# cd
[root@source ~]# rz
rz waiting to receive.**[root@source ~]# ls
anaconda-ks.cfg  ceph-release-1-1.el7.noarch.rpm  init.sh  sersync2.5.4_64bit_binary_stable_final.tar.gz  shell
​
[root@source ~]# ls
anaconda-ks.cfg  ceph-release-1-1.el7.noarch.rpm  init.sh  sersync2.5.4_64bit_binary_stable_final.tar.gz  shell
[root@source ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz 
[root@source ~]# ls
anaconda-ks.cfg                  GNU-Linux-x86  sersync2.5.4_64bit_binary_stable_final.tar.gz
ceph-release-1-1.el7.noarch.rpm  init.sh        shell
[root@source ~]# cd GNU-Linux-x86/
[root@source GNU-Linux-x86]# ls
confxml.xml  sersync2
[root@source GNU-Linux-x86]# vim confxml.xml 
<inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="false"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="false"/>
        <modify start="false"/>
    </inotify>
    
     <sersync>
        <localpath watch="/opt/tongbu">
            <remote ip="127.0.0.1" name="tongbu1"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
 
复制代码
<inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="true"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="true"/>
        <modify start="true"/>
    </inotify>
    
    <sersync>
        <localpath watch="/data">
            <remote ip="192.168.58.131" name="data"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.passwd"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
     
复制代码
#192.168.58.130
# 开启sersync守护进程同步数据,即实时同步。
# -r参数,先做一次完全同步,再做差异同步。
[root@source GNU-Linux-x86]# ./sersync2 -d -r -o ./confxml.xml 
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d      run as a daemon
option: -r      rsync all the local files to the remote servers before the sersync work
option: -o      config xml name:  ./confxml.xml
daemon thread num: 10
parse xml config file 
host ip : localhost     host port: 8008
will ignore the inotify createFile event 
daemon start,sersync run behind the console 
use rsync password-file :
user is rsyncuser
passwordfile is         /etc/rsync.passwd
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) 
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data && rsync -artuz -R --delete ./ [email protected]::data --password-file=/etc/rsync.passwd >/dev/null 2>&1
​
#或者
[root@source GNU-Linux-x86]# nohup ./sersync2 -r -o ./confxml.xml &
[1] 117240

2、检验结果

复制代码
#192.168.58.130
#更改名称,查看变化
[root@source data]# mv aaa AAA
root@source data]# ls
1.txt  2.txt  AAA
复制代码
#192.168.58.131
#检测到名称已变
[root@targetpc backup]# ls
1.txt  2.txt  AAA

pull拉取数据

以上的同步过程都是服务端主动推送数据给目标主机(服务器),这里演示下目标主机主动拉取数据进行同步。

1、编写rsync配置文件

复制代码
#192.168.58.130
[root@source ~]# vim /etc/rsyncd.conf
#在这个文件里加入下面内容#
ort=873
address = 192.168.58.130
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = 192.168.58.0/24
[data]
path = /data
comment = master data
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd
​
复制代码
# 认证文件
[root@source ~]# vim /etc/rsync.passwd
rsyncuser:123456
# 服务端上启动rsync
[root@source ~]# systemctl start rsyncd
[root@source ~]# netstat -antup | grep 873
tcp        0      0 192.168.58.130:873      0.0.0.0:*               LISTEN      15646/rsync     
# 看到以上结果,说明服务端的rsync服务已经配置完成。
# 开放873端口号,允许通过873端口号拉取数据
[root@source ~]# cd /data
[root@source data]# mkdir BBB
[root@source data]# ls
1.txt  2.txt  AAA  BBB

2、检验结果

复制代码
#192.168.58.131
# 目标主机上拉取数据
[root@targetpc backup]#  rsync -avz [email protected]::data /data/backup/
​
Password: 
receiving incremental file list
./
BBB/
​
sent 32 bytes  received 145 bytes  9.57 bytes/sec
total size is 0  speedup is 0.00
[root@targetpc backup]# ls
1.txt  2.txt  AAA  BBB

三、脚本编写

计划将服务器的/data目录的文件实时发送到客户端/data/backup目录中,操作前请检查服务器是否有该目录

1、客户端脚本编写

复制代码
#!/bin/bash
#客户端配置
#编写rsync配置文件
read -p "请输入符合此掩码的当前主机IP(默认掩码为255.255.255.0):" ip
ip1=$(echo $ip | awk -F. '{print $1"."$2"."$3}')
echo "
port=873
address = $ip
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = $ip1.0/24
[data]
path = /data/backup
comment = bakcup data
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd
" > /etc/rsyncd.conf
touch /etc/rsync.passwd
echo "rsyncuser:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
echo "Welcome to Backup Server" > /etc/rsyncd.motd
systemctl restart rsyncd
mkdir -p /data/backup

2、服务器脚本编写

复制代码
#!/bin/bash
#服务端配置
read -p "请输入符合此掩码的客户端主机IP(默认掩码为255.255.255.0):" ip
echo "123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
rsync -avz --delete /data/ rsyncuser@$ip::data --password-file=/etc/rsync.passwd

看到感觉有帮助的朋友,劳烦动动发财的小手给博主点个赞

相关推荐
爱喝西北风的东北风37 分钟前
Linux树莓派项目实战:外网访问、PWM呼吸灯、超声波测距与驱动开发
linux·运维·驱动开发
哆啦A梦的口袋呀40 分钟前
《HTTP权威指南》 第3章 HTTP报文
网络·网络协议·http
Blossom.1181 小时前
基于深度学习的智能图像去雾技术:技术与实践
运维·服务器·人工智能·深度学习·机器学习·sklearn·智能电视
铃木隼.1 小时前
haproxy搭建nginx网站访问
运维·nginx
Liugh1 小时前
图解 Linux 内核网络栈
linux
yuren_xia1 小时前
Java 公平锁与非公平锁详解
java·网络
ZaaaaacK2 小时前
Linux系统远程操作和程序编译
linux·运维·postgresql
Y_3_72 小时前
Netty实战:从核心组件到多协议实现(超详细注释,udp,tcp,websocket,http完整demo)
linux·运维·后端·ubuntu·netty
测试专家3 小时前
ARINC653系统架构
大数据·linux·运维
IT_10243 小时前
Nginx教程:概念+安装+SSL安装,通过调优Nginx来提高应用性能
运维·nginx·ssl