一、什么是Rsync?
Rsync 是一个用于文件同步和传输的开源工具,它可以在本地或通过网络在两个位置之间同步文件和目录。
Rsync 的主要特点包括
增量传输:Rsync 可以识别并仅传输源和目标之间的差异,而不需要每次都传输整个文件。这使得同步大文件和目录时效率更高。
支持远程同步:Rsync 可以在本地和远程系统之间同步文件,通过 SSH 或 Rsync 协议进行安全的传输。
保持文件属性:Rsync 可以保持文件的权限、时间戳、所有者信息等属性。
传输加密:当使用 SSH 协议时,Rsync 可以通过 SSH 加密传输数据,确保数据传输的安全性。
灵活的配置选项:Rsync 提供了许多配置选项,可以根据需要进行定制,例如排除特定文件、保留硬链接关系等。
Rsync 在数据备份、镜像站点、软件发布等场景下被广泛使用,它能够快速、高效地同步文件和目录,同时提供了可靠的数据传输保证
二、什么Sersync?
Sersync 是一个基于 Rsync 开发的开源工具,用于实现文件的实时同步。与 Rsync 不同的是,Sersync 主要用于在服务器集群中实现文件的实时同步,以满足高可用性和负载均衡的需求。
Sersync 主要具有以下特点
1. **实时同步**:Sersync 能够监视源文件的变化,并在文件发生变化时立即将变化的部分同步到目标服务器,实现实时同步。
2. **支持集群环境**:Sersync 可以在服务器集群环境下运行,实现多台服务器之间的文件同步,以提高系统的可用性和负载均衡能力。
3. **简单配置**:Sersync 的配置相对简单,用户可以通过简单的配置文件指定需要同步的源文件路径、目标服务器信息以及同步规则等。
4. **监控文件变化**:Sersync 可以监控源文件的变化,包括文件的新增、修改、删除等操作,并及时将变化同步到目标服务器。
5. **基于 Rsync**:Sersync 是基于 Rsync 开发的工具,在实现文件同步的同时,也继承了 Rsync 的高效、可靠的特性。
三、环境
备份服务器(mysql)):192.168.91.143 操作系统:Centos7.9
数据源服务器(mysql_extra):192.168.1.142 操作系统:Centos7.9
四、备份服务器操作
1、关闭selinux
[root@mysql_extra ~]# vim /etc/selinux/config
SELINUX=disabled
[root@mysql_extra ~]# getenforce
Disabled
2、永久关闭linux防火墙
[root@mysql_extra ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@mysql_extra ~]# systemctl disable firewalld #关闭防火墙开机自启
3、安装rsync软件
[root@mysql_extra ~]# yum install rsync xinetd -y
[root@mysql_extra ~]# vim /etc/rc.d/rc.local #开机自启动配置文件
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf #添加开机自启动
[root@mysql_extra ~]# chmod +x /etc/rc.d/rc.local #给文件添加可执行权限
[root@mysql_extra ~]# systemctl start xinetd #启动xinetd
xinetd 是提供保姆服务的进制,rsync是被服务的进程
独立的服务:ssh,dhcp,mysql
非独立的服务:rsync 需要依赖其他的服务来管理,例如rsync服务依赖xinetd来管理
4、改rsync.conf配置文件
[root@mysql_extra ~]# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
max connections = 0
log file = /var/log/rsyncd. log
pid file = /var/run/rsyncd. pid
lock file = /var/run/rsync. lock
secrets file = /etc/rsync. pass
mot d file = /etc/rsyncd. Motd
[back_data] #配置项名称自定义
path= /backup
#备份文件存储地址
comment = A directory in which data is stored
ignore errors = yes
read only = no
hosts allow = 192.168.91.142 #允许的ip地址(数据源服务器地址)
5、创建用户认证文件
[root@mysql_extra ~]# vim /etc/rsync.pass #.pass文件本不存在,要自己新建,文件名称与rsync.conf里面secrets file选定的文件名称要一致
rs:rs123456 #用户名和密码,自定义
6、设置文件权限
[root@mysql_extra ~]# chmod 600 /etc/rsyncd.conf #只有root用户有读和写的权限
[root@mysql_extra ~]# chmod 600 /etc/rsync.pass
7、启动rsync和xinetd
[root@mysql_extra ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf #做为守护进程进行
[root@mysql_extra ~]# ps -aux |egrep rsync #查看rsync进程启动
root 2164 0.0 0.0 114852 580 ? Ss 12:50 0:00 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
root 2166 0.0 0.0 112824 984 pts/0 S+ 12:51 0:00 grep -E --color=auto rsync
[root@mysql_extra ~]# systemctl start xinetd #启动xinetd
[root@mysql_extra ~]# ps -aux |egrep xinetd #查看xinetd进程启动
root 2149 0.0 0.0 25044 588 ? Ss 12:33 0:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
root 2174 0.0 0.0 112824 988 pts/0 S+ 12:52 0:00 grep -E --color=auto xinetd
8、查看rsync监听的端口号(873)
[root@mysql_extra ~]# netstat -anplut |egrep rsync #ss -anplut也可以查看端口号
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2164/rsync
tcp6 0 0 :::873 :::* LISTEN 2164/rsync
五、数据源服务器的操作
1、关闭selinux
[root@mysql ~]# vim /etc/selinux/config
SELINUX=disabled
[root@mysql ~]# getenforce
Disabled
2、永久关闭防火墙
[root@mysql ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@mysql ~]# systemctl disable firewalld
3、安装rsync软件
[root@mysql ~]# yum install rsync xinetd -y
[root@mysql ~]# vim /etc/rc.d/rc.local
/usr/bin/rsync --daemon #添加开机自启动(没有指定文件)
[root@mysql ~]# chmod +x /etc/rc.d/rc.local
4、改配置文件
[root@mysql ~]# vim /etc/rsyncd.conf
log file= /var/log/rsyncd. log
pid file = /var/run/rsyncd. pid
lock file = /var/run/rsync. lock
mot d file = /etc/rsyncd. Motd
[Sync]
comment = Sync
uid = root
gid = root
port= 873 #监听的端口
[root@mysql ~]# systemctl start xinetd #启动(Centos是以xinetd来管理rsync服务的)
[root@mysql ~]# ps -aux |egrep xinetd
root 2082 0.0 0.0 25044 588 ? Ss 13:09 0:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
root 2088 0.0 0.0 112824 988 pts/0 S+ 13:11 0:00 grep -E --color=auto xinetd
5、创建用户和密码
[root@mysql ~]# vim /etc/passwd.txt #应该和备份服务器的/etc/rsync.pass中的密码一致
rs123456
[root@mysql ~]# chmod 600 /etc/passwd.txt #设置文件权限
六、测试数据同步
数据源服务器:192.168.91.142和备份服务器:192.168.91.143之间的数据同步 #整体测试完全备份
#整体测试完全备份
[root@mysql backup]# rsync -avH --port=873 --progress --delete /backup root@192.168.91.143::back_data --password- file=/etc/passwd.txt
sending incremental file list
backup/
backup/2024-04-01_wanghai.sql
2,113 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=6/8)
backup/TENNIS.sql
793 100% 774.41kB/s 0:00:00 (xfr#2, to-chk=5/8)
backup/all_databases
908,058 100% 108.25MB/s 0:00:00 (xfr#3, to-chk=4/8)
backup/backup_data.sh
163 100% 19.90kB/s 0:00:00 (xfr#4, to-chk=3/8)
backup/wh.sql
2,070 100% 252.69kB/s 0:00:00 (xfr#5, to-chk=2/8)
backup/hunan/
backup/hunan/sc_student.sql
2,308 100% 281.74kB/s 0:00:00 (xfr#6, to-chk=0/8)
sent 916,261 bytes received 138 bytes 87,276.10 bytes/sec
total size is 915,505 speedup is 1.00
查看备份服务器
[root@mysql_extra ~]# cd /backup
[root@mysql_extra backup]# ls
2024-04-01_wanghai.sql backup wh.sql
[root@mysql_extra backup]# cd backup/
[root@mysql_extra backup]# pwd
/backup/backup
#增量备份测试
[root@mysql backup]# cp /etc/passwd .
[root@mysql backup]# ls
2024-04-01_wanghai.sql all_databases backup_data.sh hunan passwd TENNIS.sql wh.sql
[root@mysql backup]# rsync -avH --port=873 --progress --delete /backup root@192.168.91.143::back_data --password-file=/etc/passwd.txt
sending incremental file list
backup/
backup/passwd
887 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=3/9)
sent 1,236 bytes received 40 bytes 121.52 bytes/sec
total size is 916,392 speedup is 718.18
[root@mysql_extra backup]# ls
2024-04-01_wanghai.sql all_databases backup_data.sh hunan passwd TENNIS.sql wh.sql
[root@mysql backup]# rm -rf passwd
[root@mysql backup]# cp /etc/hosts .
[root@mysql backup]# ls
2024-04-01_wanghai.sql all_databases backup_data.sh hosts hunan TENNIS.sql wh.sql
[root@mysql backup]# rsync -avH --port=873 --progress --delete /backup root@192.168.91.143::back_data --password-file=/etc/passwd.txt
sending incremental file list
deleting backup/passwd
backup/
backup/hosts
158 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=3/9)
sent 505 bytes received 57 bytes 48.87 bytes/sec
total size is 915,663 speedup is 1,629.29
[root@mysql_extra backup]# ls #删除了passwd,新增了hosts
2024-04-01_wanghai.sql all_databases backup_data.sh hosts hunan TENNIS.sql wh.sql
rsync -avH --port=873 --progress --delete /backup root@192.168.91.143::back_data --password-file=/etc/passwd.txt (源服务器上操作)
rsync: 该命令用于同步文件和目录。
-avH: 这是一组选项,含义如下:
-a: 表示 archive 模式,它会保持文件的所有属性,包括权限、所有者信息、时间戳等。
-v: 表示 verbose 模式,它会输出详细的同步信息。
-H: 表示保留硬链接。如果文件是硬链接文件,则会保留文件的硬链接关系。
--port=873: 指定 rsync 服务器端口为 873。默认情况下,rsync 使用 873 端口进行通信。
--progress: 显示传输进度。
--delete: 在目标目录中删除源目录中不存在的文件。
/backup: 源文件或目录的路径,这里是要备份的数据所在的路径。 root@192.168.91.143::back_data: 目标服务器的用户名、IP 地址以及目标模块(module)。在这个例子中,用户名为 root,IP 地址为 192.168.91.143,目标模块为 back_data。Rsync 服务器上通常会将要同步的目录配置为一个模块,客户端通过模块名称进行访问。
--password-file=/etc/passwd.txt: 指定用于认证的密码文件的路径。这里将密码文件存储在了 /etc/passwd.txt 中。
如果还需更加深入的了解,可以通过rsync --help 查看用法
目前实现的是手动同步,需要手动输入:[root@mysql backup]# rsync -avH --port=873 --progress --delete /backup root@192.168.91.143::back_data --password-file=/etc/passwd.txt
接下来实现实时同步
七、在数据源服务器上安装sersync工具,实时触发rsync进行同步
1、在数据源服务器上修改inotify默认参数
(inotify默认内核参数太小)修改参数(inotify已经默认在内核里安装了,不需要安装了),临时修改
[root@mysql backup]# sysctl -w fs.inotify.max_queued_events="99999999"
fs.inotify.max_queued_events = 99999999
[root@mysql backup]# sysctl -w fs.inotify.max_user_watches="99999999"
fs.inotify.max_user_watches = 99999999
[root@mysql backup]# sysctl -w fs.inotify.max_user_instances="65535"
fs.inotify.max_user_instances = 65535
永久修改
[root@mysql backup]# vim /etc/sysctl.conf
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
2、安装sersync
[root@mysql backup]# yum install wget -y
[root@mysql backup]# wget http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
--2024-04-01 13:55:48-- http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
正在解析主机 down.whsir.com (down.whsir.com)... 111.180.191.24
正在连接 down.whsir.com (down.whsir.com)|111.180.191.24|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz [跟随至新的 URL]
--2024-04-01 13:55:48-- https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
正在连接 down.whsir.com (down.whsir.com)|111.180.191.24|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:727290 (710K) [application/octet-stream]
正在保存至: “sersync2.5.4_64bit_binary_stable_final.tar.gz”
100%[====================================================>] 727,290 --.-K/s 用时 0.1s
2024-04-01 13:55:48 (5.52 MB/s) - 已保存 “sersync2.5.4_64bit_binary_stable_final.tar.gz” [727290/727290])
3.解压,备份文件
[root@mysql backup]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@mysql backup]# ls
2024-04-01_wanghai.sql GNU-Linux-x86 sersync2.5.4_64bit_binary_stable_final.tar.gz
all_databases hosts TENNIS.sql
backup_data.sh hunan wh.sql
[root@mysql backup]# mv GNU-Linux-x86/ /usr/local/sersync
[root@mysql backup]# cd /usr/local/sersync/
[root@mysql sersync]# ls
confxml.xml sersync2
备份配置文件,防止修改出错,以便于还原
[root@mysql sersync]# cp confxml.xml confxml.xml.bak
[root@mysql sersync]# cp confxml.xml data_configxml.xml
[root@mysql sersync]# ls
confxml.xml confxml.xml.bak data_configxml.xml sersync2
4、修改配置文件
[root@mysql sersync]# vim data_configxml.xml
<sersync>
<localpath watch="/backup"> #备份文件目录
<remote ip="192.168.91.143" name="back_data"/>
<!--<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/passwd.txt"/>
5、启动sersync服务
[root@mysql sersync]# PATH=/usr/local/sersync/:$PATH #临时修改
[root@mysql sersync]# which sersync2
/usr/local/sersync/sersync2
[root@mysql sersync]# echo 'PATH=/usr/local/sersync/:$PATH' >>/root/.bashrc #永久修改
[root@mysql sersync]# sersync2 -d -r -o /usr/local/sersync/data_configxml.xml
[root@mysql sersync]# ps -aux |egrep ser
root 1 0.1 0.1 125376 3912 ? Ss 16:44 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
mysql 1292 0.3 5.8 1544156 227788 ? Sl 16:44 0:03 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=mysql.err --open-files-limit=8192 --pid-file=/data/mysql/mysql.pid --socket=/data/mysql/mysql.sock --port=3306
root 1798 0.0 0.0 157860 708 ? Ssl 17:02 0:00 sersync2 -d -r -o /usr/local/sersync/data_configxml.xml
root 1815 0.0 0.0 112828 984 pts/0 S+ 17:04 0:00 grep -E --color=auto ser
已经可以实时同步了
八、测试
[root@mysql backup]# cp /etc/passwd .
[root@mysql backup]# ls
2024-04-01_wanghai.sql hosts sersync2.5.4_64bit_binary_stable_final.tar.gz
all_databases hunan TENNIS.sql
backup_data.sh passwd wh.sql
[root@mysql_extra backup]# ls
2024-04-01_wanghai.sql hosts sersync2.5.4_64bit_binary_stable_final.tar.gz
all_databases hunan TENNIS.sql
backup_data.sh passwd wh.sql
九、总结
1.问题:
1.在数据源服务器上 vim /etc/rsyncd.conf path= /backup 这个文件夹备份服务器上必须有
2.数据源服务器和备份服务器上创建的用户和密码要一致
3.防火墙和selinux需要关闭
4.权限设置
5.配置问价内容出错
6.查看日志排错
2.小结
1、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
2、rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。