rsync 是一个常用的 Linux 应用程序,用于文件同步。rsync 服务可以实现数据的同步,但不是自动同步。
我们将A源服务器(192.168.201)指定的目录同步到B目标服务器(192.168.200)指定的目录。
因此B服务器需要在873端口开启rsync服务,A服务器仅使用rsync命令就可以实现文件同步。
我们这里使用虚拟机,具体操作请参考 VirtualBox5虚拟机安装CentOS-7-x86_64
首先B服务器(192.168.200)搭建 rsync 环境
1. 关闭SELINUX,省略
2. 然后启动双网卡,配置静态IP(192.168.0.200),省略
3. 服务器端开启 873 端口
yum -y install iptables-services
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
:wq
systemctl disable firewalld.service
systemctl enable iptables.service
4. 安装 rsync
yum -y install rsync
5. 添加启动用户,如果我们同步的是Web目录,且使用apache或者nginx的话,可以直接使用它们对应的用户
groupadd rsyncuser
useradd -g rsyncuser rsyncuser -s /sbin/nologin
6. 修改配置文件
vi /etc/rsyncd.conf
uid = rsyncuser #设置rsync运行用户
gid = rsyncuser #设置rsync运行用户
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
auth users = opuser #用户认证
secrets file = /etc/rsyncd.pswd #用户认证配置文件
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[tongbu]
path = /data/www/Public
comment = tongbu export area
ignore errors = yes #忽略IO错误
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
hosts allow = 192.168.0.201 #允许进行数据同步的客户端IP地址
#hosts deny = * #禁止数据同步的客户端IP地址
:wq
7. 创建客户端密码文件
vi /etc/rsyncd.pswd
opuser:QAZ123WSX456
:wq
chmod 600 /etc/rsyncd.pswd
8. 启动rsync服务
systemctl start rsyncd.service
systemctl enable rsyncd.service
netstat -lnp|grep 873
9. 创建/data/www/Public目录,并随意写一个text.txt文件
mkdir /data
mkdir /data/www
mkdir /data/www/Public
chown -R rsyncuser:rsyncuser /data/www/Public
cd /data/www/Public
echo "hello" > hello.txt
ls
到这里位置,环境就配置完了,下面来给A服务器(192.168.0.201)安装 rsync
1. 关闭SELINUX,省略
2. 然后启动双网卡,配置静态IP(192.168.0.201),省略
3. 安装 rsync
yum -y install rsync
4. 创建客户端密码文件,注意这里只有密码!!!
vi /etc/rsyncd.pswd
QAZ123WSX456
:wq
chmod 600 /etc/rsyncd.pswd
5. 我们在A服务器(192.168.0.201)上执行如下命令,即可同步上面的hello.txt文件
mkdir /data
mkdir /data/www
mkdir /data/www/Public
cd /data/www/Public
rsync -avz [email protected]::tongbu --password-file=/etc/rsyncd.pswd /data/www/Public/
ls
从截图里面可以看到,我们已经从把B服务器上面的文件同步到了本地。
6. 从本地A服务器推送给B服务器文件:
cd /data/www/Public
echo "hi" > hi.txt
rsync -avz /data/www/Public/ [email protected]::tongbu --password-file=/etc/rsyncd.pswd
去B服务器的/data/www/Public/目录看看,是否存在 hi.txt 文件吧!
rsync服务可以实现数据的同步,但不是自动同步,需要用到inotify进行自动监控。
sersync其实是利用inotify和rsync两种软件技术来实现数据实时同步功能的,
inotify是用于监听sersync所在服务器上的文件变化,
结合rsync软件来进行数据同步,将数据实时同步给客户端服务器。