背景说明
我们每天都在使用观看视频、浏览新闻、网络购物、网络聊天等等服务,给我们提供这种服务的前端服务器是如何运作的?一台服务器能承载我们所有人的访问吗?多台服务器之间的文件如何做到同步的?
带着这种问题,开始我们明天的述说。
Linux服务器下快速将文件传递给其他10台(其实是100台)服务器的方式有很多种,人工用U盘拷贝、利用共享文件Samba系统复制等等。明天我们要使用的是另外一种方式,Rsync文件同步分发软件
Rsync是哪些?
Rsync是Linux系统下的数据镜像备份工具。Rsync的顾客端会将服务器端的指定的文件完整的同步到本地服务器上。Rsync支持无限多级的文件分发同步,可以镜像保存整个目录树和文件系统,可以做到保持原先文件的权限、时间、软硬链接等等。Rsync在传输的过程中支持压缩和解压缩,可以大幅度节省带宽。可以使用scp、ssh方法来传输文件以保证数据安全,其实也可以使用直接socket联接的形式。
工作过程是:第一次同步会将所有文件复制到本地服务器红旗linux5.0,下一次同步的时侯,只同步新增或更改的文件。
做个不恰当的比喻,Rsync的文件同步非常像主服务器在台上讲演,Rsync子服务器在下边一边听一边记录,便于传达下去。
安装规划
我们以1主3子共4台服务器的网路环境作为举例,来瞧瞧Rsync是怎样安装、设置和运作的。
曾经比较喜欢源码编译的形式来安装各类的软件,遇到一个文件就下载源码包,之后"./configure"、"make",再之后"makeinstall"。后来发觉,有些软件的源码自己根本就没看过,也不打算去修改一下它的代码和配置,所以还不如直接就用YUM安装的形式。这样做最大的用处是不耽搁时间。
另外,我没有修改CentOSLinux8的默认包管理软件(默认是:DNF),以下所有的DNF操作,都是用YUM来完成的嵌入式linux驱动程序设计从入门到精通,虽然CentOSLinux8上面加上了YUM对DNF的软链接。
防火墙设置
Rsync服务会开启一个873/tcp的端口(port),要在服务器端的防火墙上开启这个端口。关于防火墙的安装与管理hosts文件的作用 linux,请参考我发的相关文章。
针对外网IP开启873/tcp端口(port)的命令如下:
firewall命令permanent--zone=public--add-rich-rule='rulefamily="ipv4"sourceaddress="192.168.1.1/24"portprotocal="tcp"port="873"accept'
以上指令比较好理解,你可以对照更改
本次为了测试便捷,以免出现权限问题,我们一并吧selinux和防火墙全部关掉掉,之后重启服务器,生产环境中不要如此操作。具体操作如下:
运行以下命令,关掉防火墙
systemctlstopfirewalld#临时关掉防火墙
systemctldisablefirewalld#严禁开机启动防火墙
systemctlstatusfirewalld#查看防火墙状态。
关掉SELINUX
运行以下命令:
vi/etc/selinux/config#SELINUX配置文件
相关参数更改如下:
#SELINUX=enforcing
SELINUX=disabled
重启服务器,之后查看SELINUX状态:
reboot#重启
getenforce#查询SELinux的运行模式,permissive(包容模式);enforcing(强制模式);
/usr/sbin/sestatus-v#查看SELINUX的状态
显示如下内容,则说明SELINUX早已关掉了
关掉防火墙和SELinux成功。
安装并配置Rsync
为了之后灵活便捷,一下操作我们在4台服务器上均进行操作,这样虽然主服务器192.168.1.222受损难以使用,另外一台服务器也可以虽然顶替起来。
运行以下指令安装:
dnf-yinstallrsyncrsync-daemon
创建运行中须要用到的目录
mkdir-p/log/rsync/
mkdir-p/data/rsync/conf/
mkdir-p/data/rsync/run/
更改主配置文件rsyncd.conf,执行命令:
vi/etc/rsyncd.conf
录入下述文件内容:
uid=root
gid=root
port=873
#usechroot=no#是否可以改变同步的根目录
#readonly=yes#只读或则可以上传文件
#hostsallow=192.168.1.223
#hostsdeny=*
#transferlogging=yes
#motdfile=/data/rsync/conf/motd
#logformat=%t%a%m%f%b
#syslogfacility=local3
#timeout=300
maxconnections=200
pidfile=/data/rsync/run/rsyncd.pid
lockfile=/data/rsync/run/rsync.lock
logfile=/log/rsync/rsyncd.log
[wwwroot]//顾客端使用rsync来同步的路径,只是模块名称,无需跟目录名子相同
path=/wwwroot
comment=lg69_rsync
readonly=yes
authusers=pusher
secretsfile=/data/rsync/conf/server.pass
hostsallow=192.168.1.0/24,2.2.2.0/24,3.3.3.0/24,4.4.4.0/24,5.5.5.0/24
#list=yes
#ignoreerrors
#exclude=test/test.php
编辑生成服务端密码文件,此文件为服务器端使用;列举可以登入的用户名和密码
vi/data/rsync/conf/server.pass
内容如下:
pusher:7d5df8ed3057bc3e09d52c718e724a75
编辑顾客端密码文件,此文件为顾客端使用;登陆的密码,与server.pass内容对应
vi/data/rsync/conf/client.pass
内容如下:
7d5df8ed3057bc3e09d52c718e724a75
配置不可被同步的文件内容列表
vi/data/rsync/conf/site.exclude.list
内容如同下边的这样就可以
test/user
login.php
login
更改各文件的权限
chmod600/data/rsync/conf/server.pass
chmod600/data/rsync/conf/client.pass
chmod600/data/rsync/conf/site.exclude.list
上述内容最好台服务器都配置上,这样一但主服务器出问题,任何一台服务器都可以作为主服务器来使用。
启动Rsync服务
主服务器服务端操作,只在192.168.1.222上配置
启动Rsync服务,等同于systemctlstartrsyncd
servicersyncdstart
设置开机启动Rsync服务
systemctlenablersyncd
ps-aux|greprsync#假如见到rsync的进程在,就说明启动成功了
能看见类似如下内容,就说明启动成功了
到这儿务器端启动就完成了
servicersyncdstart#等同于systemctlstartrsyncd启动Rsync服务
servicersyncdstop#等同于systemctlstoprsyncd关掉Rsync服务
servicersyncdstatus#等同于systemctlstatusrsyncd查看Rsync服务状态
systemctlenablersyncd#设置开机启动Rsync服务
systemctldisablersyncd#设置开机不启动Rsync服务
顾客端操作并测试使用
设置顾客端的可执行文件(拉取服务端文件的shell),在223、224和225上操作
vi/root/get.sh
内容如下(大意是获取服务端/wwwroot/下所有的文件):
#!/bin/bash
/usr/bin/rsync-vrtopg--password-file=/data/rsync/conf/client.pass--exclude-from=/data/rsync/conf/site.exclude.list--progresspusher@192.168.1.222::wwwroot/wwwroot/
给这个文件可执行的权限
chmod+x/root/get.sh#client.pass和site.exclude.list里面早已介绍了这儿直接使用
测试同步文件
获取一下文件试试
./get.sh#同步一下试试注:顾客端的rsync配置最好和服务端一模一样
早已将服务器端(222)上的hello.php文件同步到本地服务器(228)上了。
配置服务器手动同步文件
执行命令:
crontab-e
crontab默认使用vi编辑,填入一下内容:
*/108-23***/root/get.sh
00-7***/root/get.sh
说明:8-23点每10分钟执行一次hosts文件的作用 linux,0-7每一小时执行一次
至此我们早已将所有的安装配置操作完毕,222服务器上/wwwroot/目录下新增或更改的任何文件,223-225都会同步获取到。这儿举的是4台服务器的反例,假如你的服务器能承受得了压力,可以扩充到任意台服务器起来。
在实际的使用过程中,假如/wwwroot/目录中的文件过多,可以会出现性能极具升高的情况,极端的情况是同步文件失败。当发生此类情况的时侯,我们可以设置每一次同步只同步/wwwroot/下边的一个子目录,并且我们多设置多个同步脚本,也就是将/wwwroot/下的子目录每位设置一个同步脚本,这样才能解决这个问题。