翼度科技»论坛 云主机 LINUX 查看内容

linux服务器文件实时同步

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
linux服务器文件实时同步

1 背景说明

在做系统集群部署时,涉及到两个或多个服务器之间文件同步.在软件层面linux服务环境找到以下两种同步方式

  • 利用linux NFS功能将网络共享文件挂载成本地目录
  • 采用文件监听,实时推送
服务器资源如下

  • 服务器1 10.2.4.51 ,作为主服务器
  • 服务器2 10.2.4.52 ,作为从服务器
2 NFS网络共享配置

2.1 主服务器

2.1.1 安装应用包
  1. yum install -y nfs-utils rpcbind #nfs安装命令 author: herbert qq:464884492
  2. systemctl enable nfs #将nfs设置开机启动
  3. systemctl enable rpcbind #将rpcbind设置开机启动
复制代码
2.1.2 共享配置

主服务建立需要共享的文件夹
  1. mkdir /home/nfs_data # 主服务需要共享的目录
复制代码
配置从服务可以访问主服务器
  1. vi /etc/exports #author: herbert qq:464884492
复制代码
设置内容为
  1. /home/nfs_data/ 10.2.4.52(rw,sync,no_root_squash)
复制代码
重启服务,注意一定要先启动 rpcbind
  1. systemctl stop nfs
  2. systemctl stop rpcbind
  3. systemctl start rpcbind
  4. systemctl start nfs
  5. showmount -e # 可以检查NFS配置是否生效
  6. # 配置正确后,会有一下提示信息
  7. Export list for hk51:
  8. /home/nfs_data 10.2.4.52
复制代码
2.1.3 防火墙配置

如果服务器需要开启防火墙,需要在防火墙添加服务,可以通过firewall-cmd --state 防火墙开启状态
  1. firewall-cmd --add-service=nfs --permanent --zone=public
  2. firewall-cmd --add-service=mountd --permanent --zone=public
  3. firewall-cmd --add-service=rpc-bind --permanent --zone=public
  4. firewall-cmd --reload #重新载入配置,使其生效
复制代码
2.2 从服务器

2.2.1 应用包安装
  1. yum -y install nfs-utils
复制代码
2.2.2 挂载配置

在相同的路径建立同样的目录
  1. mkdir /home/nfs_data # 从服务需要共享的目录
复制代码
挂载目录
  1. mount -t nfs -o sync,noac 10.2.4.51:/home/nfs_data /home/nfs_data #目录挂载
复制代码
检查挂载
  1. df -h #查看挂载
复制代码
配置开机启动挂载
  1. vi /etc/fstab #追加内容 10.2.4.51:/home/nfs_data /home/nfs_data/ nfs sync,noac 0 0
复制代码
3 文件实时监听同步

3.1 SSH互信配置

主服务器和从服务分别生成自己的公钥,命令如下
  1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa  # 生成证书
  2. cd ~/.ssh/ #切换目录
  3. touch authorized_keys #生成认证文件
  4. cat id_rsa.pub >>authorized_keys #复制公钥到认证文件
  5. scp authorized_keys 10.2.4.52:/root/.ssh #远程复制自己公钥到对方服务器
  6. service sshd restart #重启SSH服务
复制代码
主服务器和从服务器 authorized_keys 文件,保存所有需要免密登录服务器的公钥信息即id_rsa.pub文件中的值
3.2 同步软件安装

主服务器和从服务器同时安装应用包
  1. yum -y install inotify-tools
  2. yum -y install unison #author: herbert qq:464884492
复制代码
主服务器从服务器在相同路径建立需要实时共享的目录
  1. mkdir /home/sync_data
复制代码
3.3 同步脚本编写

主服务器(10.2.4.51)监听同步脚本,文件名 /home/runfilesync.sh
  1. #/bin/bash
  2. dstIp="10.2.4.52"
  3. src="/home/sync_data"
  4. dst="/home/sync_data"
  5. /usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
  6. /usr/bin/unison -batch $src ssh://$dstIp/$dst
  7. echo -n "$line " >> /var/log/inotify.log
  8. echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
  9. done   
复制代码
从服务器(10.2.4.52)监听同步脚本,文件名 /home/runfilesync.sh
  1. #/bin/bash
  2. dstIp="10.2.4.51"
  3. src="/home/sync_data"
  4. dst="/home/sync_data"
  5. /usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
  6. /usr/bin/unison -batch $src ssh://$dstIp/$dst
  7. echo -n "$line " >> /var/log/inotify.log
  8. echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
  9. done  
复制代码
3.4 运行脚本,开机自起

脚本需要后台运行,启动命令如下
  1. nohup sh /home/runfilesync.sh &
  2. ps -aux | grep runfilesync #检查脚本是否在运行
  3. #设置开机启动 author: herbert qq:464884492
  4. crontab -e #追加内容  @reboot  /home/runfilesync.sh
复制代码
4 效果测试


  • 在主服务器 /home/nfs_data 和 /home/sync_data 两个文件夹中分别添加touch 地心侠士.txt,然后ssh到从服务,可以在从服务器这两个文件夹中找到地心侠士.text
  • 在从服务器 /home/nfs_data 和 /home/sync_data 两个文件夹中分别添加touch 小院不小.txt,然后ssh到主服务,可以在主服务器这两个文件夹中找到小院不小.text
5 总结

通过软件或者协议实现实时同步,以上两种方法各有优劣.采用NFS网络共享协议,必须指定一个网络主节点.采用inotify+unison方式,有点分布式的感觉,无需指定主节点,但同步效果方面和稳定性方面会差一些
文件监听同步软件inotify 和 unison 安装需要编译环境,安装时比较麻烦.我这里提供了rpm安装包以及对应依赖包(安装命令rpm -ivh xxx.rpm).如果需要请关注公众号[小院不小],回复sync获取下载连接,或者添加QQ:464884492,获取

闲暇之余,做了一款有趣耐玩的消除类微信小游戏地心侠士,有兴趣可到微信搜索地心侠士玩玩,感谢支持

来源:https://www.cnblogs.com/yfrs/p/18046598/linux_sync
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具