5.rsync 报错解决和部署sersync

rsync 报错

第一种

image-20200509185927339

# No route to host     没有主机路由
# connection refused   拒绝连接    #####   碰到这个两个报错基本就是 网络 端口 防火墙 和selinux 出问题的意思


# 1.首先ping网络,看看是否出现问题 有问题就解决
[root@web01 ~]# ping 10.0.0.41
# 2.端口,看看端口是否启动 
[root@web01 ~]# telnet 10.0.0.41 873
Trying 10.0.0.41...
Connected to 10.0.0.41.
Escape character is '^]'.
@RSYNCD: 31.0
 
这就是启动了

# 3.防火墙,没关就关闭了
[root@backup ~]# systemctl status firewalld
[root@backup ~]# systemctl diable firewalld   #永久关闭
# 4.selinux,没关就关了
[root@backup ~]# getenforce  #查看状态s
Disabled                     # 关闭   不是就关了 setenforce 0   临时

第二种

image-20200509185947080

### 意思是配置文件有问题,检查配置文件,有没有写错或者权限有没有问题

# 1.检查配置文件的用户和密码文件
auth users = zls_bak
[root@backup ~]# vim /etc/rsync_account
zls_bak:123

# 2.检查配置文件的模块名有没有出错
[zls]

# 3.检查服务端密码文件的权限 是不是600权限,不是就更改权限
[root@backup ~]# ll /etc/rsync_account 
-rw-r--r-- 1 root root 12 May  9 09:29 /etc/rsync_account
[root@backup ~]# chmod 600 /etc/rsync_account

# 4.如果客户端也创建了密码文件,必须检查客户端的密码文件权限是不是600

第三种

image-20200509190000517

# 不认识 uid 是rsync的用户,那就创建
[root@backup ~]# id rsync
id: rsync: no such user
[root@backup ~]# useradd rsync -s /sbin/nologin -M

第四种

image-20200509190015759

# 权限不足,因为配置文件指定rsync用户传输文件,所有备份目录是root root,权限不够
[root@backup ~]# ll /backup
drwxr-xr-x 2 root root 6 May  9 09:14 /backup
# 修改属主和属组
[root@backup ~]# chown -R rsync.rsync /backup
[root@backup ~]# ll /backup
drwxr-xr-x 2 rsync rsync 6 May  9 09:14 /backup

第五种

image-20200509202645071

# chdir failed  
# 这个的意思是找不到备份服务器的备份目录,可能是误删除了,也可以能是创建错了,所以在服务器上重新创建
[root@backup ~]# mkdir /backup

rsync 守护进程模式工作流程缺一步都会报错

当执行rsync -avz /etc/passwd zls_bak@10.0.0.41::zls的一瞬间

1.网络是否可以通讯,客户端是否能连接服务端的IP和端口(通过)

# 网络
# 端口
# 防火墙
# selinux

2.验证用户名和密码(通过)

  • 检查配置文件:auth users=zls_bak
  • 检查密码文件里:/etc/rsync_accout 内容 zls_bak:123
  • 检查密码文件的权限是不是600
  • 检查模块名:配置文件中指定的[模块名]

3.检查机器上是否有配置文件中的uid指定的用户

4.检查对应模块名下面指定的path目录,是否有权限(uid指定用户的权限)

全部通过则没有问题

nfs报错

第一种

image-20200509190059682

# No route to host    #没有主机路由    #这个意思刚开始就说了 无非就是 网络 端口 防火墙 selinux 的问题

# 网络(通过)
## 查看服务端配置文件里面的ip,ping
[root@web01 ~]# ping 172.16.1.31
# 端口(nfs不检查端口)
# 防火墙
[root@nfs ~]# systemctl status firewalld
[root@nfs ~]# systemctl stop firewalld
# selinux
[root@nfs ~]# getenforce 

第二种

image-20200509190115788

# 查看服务端配置文件,允许的IP(网段)是谁
172.16.1.0/24       #  0/24 代表所有的网段

第三种

image-20200509190133589

# 查看配置文件,目录的权限是不是rw        ## ro就是只读
/yonghushuju 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

# 检查指定的共享目录权限,是不是666的用户
[root@nfs ~]# ll /yonghushuju/ -d

[root@nfs ~]# chown www.www /yonghushuju/
[root@nfs ~]# chown 666.666 /yonghushuju/

nfs 流程就是 在客户端上上传文件,在另外客户端也能共享,在nfs共享存储上也能共享

sersync 介绍

底层,使用的inotify

如果是把nfs的/user_upload目录下面内容实时推送到rsync服务器的/backup目录下

把inotify部署在,rsync的客户端上

那就是把inotify部署在nfs上,因为要监控nfs的目录状态,才能实时的推送

同理,sersync也部署在客户端

# sersync的一个部署,在nfs共享服务器上

# 1.安装sersync的依赖包
[root@nfs ~]# yum install -y rsync inotify-tools

# 2.下载sersync
[root@nfs ~]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

# 3.解压sersync
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

# 4.移动并改名
[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync

# 5.修改配置文件
[root@nfs ~]# vim /usr/local/sersync/confxml.xml
## 从这开始看起,有修改的就要修改
<inotify>
<delete start="true"/>
	<createFolder start="true"/>
	<createFile start="false"/>
	<closeWrite start="true"/>
	<moveFrom start="true"/>
	<moveTo start="true"/>
	<attrib start="true"/>         #修改                 
	<modify start="true"/>         #修改               ## true 开启  false 不行,不开启
    </inotify>

    <sersync>
     #  客户端需要监控的目录 
	<localpath watch="/data">   #修改

            #  rsync服务端的IP 和 name:模块 
	    <remote ip="10.0.0.41" name="nfs"/>   #修改
	    <!--<remote ip="192.168.8.39" name="tongbu"/>-->   
	    <!--<remote ip="192.168.8.40" name="tongbu"/>-->
	</localpath>
	<rsync>
	              # rsync命令执行的参数
	    <commonParams params="-az"/>  #修改
        # rsync认证开启  #rsync指定的匿名用户   #指定一个密码文件的位置权限必须600
     <auth start="true" users="nfs_bak" passwordfile="/etc/rsync.pas"/>     #修改
     
     
# 6.创建密码文件并设置权限为其他人不可查看
[root@nfs ~]# echo '123' > /etc/rsync.pas
[root@nfs ~]# chmod 600 /etc/rsync.pas

# 7.启动sersync(绝对路径启动)
[root@nfs ~]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml

修改前

image-20200509210922038

修改后

image-20200509210728279

基于sersync海量文件实时同步:TP

linux 9期架构作业 day5

sersync实时同步实战

底层,使用的inotify

如果是把nfs的/user_upload目录下面内容实时推送到rsync服务器的/backup目录下

把inotify部署在,rsync的客户端上

那就是把inotify部署在nfs上,因为要监控nfs的目录状态,才能实时的推送

同理,sersync也部署在客户端

部署sersync

思路

  1. 环境准备

  2. 配置nfs服务端

  3. 配置nfs的客户端和部署apache和php

  4. 配置rsync的服务端backup

  5. 配置sersync的客户端(nfs)

  6. 测试共享目录和实时同步备份

1. 环境准备

主机名 外网IP 内网IP 角色 部署服务
web01 10.0.0.7 172.16.1.7 rsync的客户端,nfs的客户端,网站 rsync,nfs,apache,php
web02 10.0.0.8 172.16.1.8 rsync的客户端,nfs的客户端,网站 rsync,nfs,apache,php
nfs 10.0.0.31 172.16.1.31 rsync的客户端,nfs的服务端(共享存储) rsync,nfs,sersync
backup 10.0.0.41 172.16.1.41 rsync的服务端 rsync

2. 配置nfs服务端

# 1.下载nfs和rsync服务
[root@nfs ~]# yum install -y rpcbind nfs-utils

# 2.修改nfs的配置文件
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

# 3.创建通用服务的用户和用户组
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

# 4.创建共享目录,并且修改目录的属主和属组
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown www.www /data

# 5.启动服务并开机自启
[root@nfs ~]# systemctl start nfs.service 
[root@nfs ~]# systemctl enable nfs.service 

3. 配置nfs的客户端和部署apache和php(web01举例,其他客户端操作相同)

# 配置nfs客户端
[root@web01 ~]# yum install -y nfs-utils



# 部署apache和php
# 1.下载服务
[root@web01 ~]# yum install -y httpd php

# 2.修改服务的用户和用户组
[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
User apache       修改成   User www
Group apache      修改成   Group www

# 3.创建服务的通用用户和用户组
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

# 4.在站点目录下解压php文件
[root@web01 ~]# cd /var/www/html/
[root@web01 /var/www/html]# rz
[root@web01 /var/www/html]# unzip kaoshi.zip

# 5.修改php代码,指定用户上传文件文件的目录
[root@web01 /var/www/html]# vim upload_file.php
修改为 
$wen="/var/www/html/upload";

# 6.创建目录并修改目录的属主和属组
[root@web01 ~]# mkdir -p /var/www/html/upload
[root@web01 ~]# chown www.www /var/www/html/upload

# 7.启动和开机自启服务
[root@web01 ~]# systemctl start httpd
[root@web01 ~]# systemctl enable httpd

# 8.检查端口和进程
[root@web01 ~]# netstat -lntup |grep 80
[root@web01 ~]# ps -ef |grep [h]ttpd

# 9.查看服务端的共享目录
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

# 10.挂载目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /var/www/html/upload

4. 配置rsync的服务端backup

# 1.安装rsync
[root@backup ~]# yum install -y rsync

# 2.修改配置文件
# 指定启动rsync服务的用户id
uid = www
# 指定启动rsync服务的用户组id
gid = www
# 指定rsync服务启动的端口
port = 873
# 假装是root
fake super = yes
# 禁锢path目录
use chroot = no
# 最大连接数是200
max connections = 200
# 超时时间是600s
timeout = 600
# 忽略错误
ignore errors
# 可读可写
read only = false
# 其它客户端用户不允许查看模块名
list = false
# rsync服务的日志所在路径
log file = /var/log/rsyncd.log

########### 命令相关配置 #############
auth users = nfs_bak
secrets file = /etc/rsync_pass
[nfs]
comment = welcome to oldboyedu backup!
path = /backup


# 3.创建通用服务的用户和用户组
[root@backup ~]# groupadd www -g 666
[root@backup ~]#  useradd www -g 666 -u 666 -s /sbin/nologin -M

# 4.创建密码文件
[root@backup ~]# echo 'nfs_bak:123' > /etc/rsync_pass

# 5.修改密码文件的权限,不让其他用户看见用户名和密码
[root@backup ~]# chmod 600 /etc/rsync_pass

# 6.创建备份目录并且修改属主和属组
[root@backup ~]# mkdir /backup
[root@backup ~]# chown www.www /backup/

# 7.启动服务并开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

# 8.检查端口和进程
[root@backup ~]# netstat -lntup |grep 873
[root@backup ~]# ps -ef |grep [r]sync

5. 配置sersync的客户端(nfs)

# 1.安装sersync的依赖包
[root@nfs ~]# yum install -y rsync inotify-tools

# 2.下载sersync
[root@nfs ~]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

# 3.解压sersync
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

# 4.移动并改名
[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync

# 5.修改配置文件
[root@nfs ~]# vim /usr/local/sersync/confxml.xml
	<delete start="true"/>
	<createFolder start="true"/>
	<createFile start="false"/>
	<closeWrite start="true"/>
	<moveFrom start="true"/>
	<moveTo start="true"/>
	<attrib start="true"/>         #修改
	<modify start="true"/>         #修改
    </inotify>

    <sersync>
     #  客户端需要监控的目录 
	<localpath watch="/data">   #修改

            #  rsync服务端的IP 和 name:模块 
	    <remote ip="10.0.0.41" name="nfs"/>   #修改
	    <!--<remote ip="192.168.8.39" name="tongbu"/>-->   
	    <!--<remote ip="192.168.8.40" name="tongbu"/>-->
	</localpath>
	<rsync>
	              # rsync命令执行的参数
	    <commonParams params="-az"/>  #修改
        # rsync认证开启  #rsync指定的匿名用户   #指定一个密码文件的位置权限必须600
     <auth start="true" users="nfs_bak" passwordfile="/etc/rsync.pas"/>     #修改
     
     
# 6.创建密码文件并设置权限为其他人不可查看
[root@nfs ~]# echo '123' > /etc/rsync.pas
[root@nfs ~]# chmod 600 /etc/rsync.pas

# 7.启动sersync(绝对路径启动)
[root@nfs ~]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml

6. 测试实时同步和共享

从web01上上传文件

image-20200509175746722

终端上也显示有

image-20200509175841893

再到8ip上传一个

image-20200509183629899

在查看7.8ip访问的都是同一个文件(共享完成)

image-20200509183208257

image-20200509183219404

实时备份共享完成

image-20200509183026031

posted @ 2020-06-01 23:28  柯正  阅读(877)  评论(0)    收藏  举报