linux服务器文件实时同步
<h2 id="linux服务器文件实时同步">linux服务器文件实时同步</h2><h3 id="1-背景说明">1 背景说明</h3>
<p>在做系统集群部署时,涉及到两个或多个服务器之间文件同步.在软件层面linux服务环境找到以下两种同步方式</p>
<ul>
<li>利用linux NFS功能将网络共享文件挂载成本地目录</li>
<li>采用文件监听,实时推送</li>
</ul>
<p>服务器资源如下</p>
<ul>
<li>服务器1 10.2.4.51 ,作为主服务器</li>
<li>服务器2 10.2.4.52 ,作为从服务器</li>
</ul>
<h3 id="2-nfs网络共享配置">2 NFS网络共享配置</h3>
<h4 id="21-主服务器">2.1 主服务器</h4>
<h5 id="211-安装应用包">2.1.1 安装应用包</h5>
<pre><code class="language-bash">yum install -y nfs-utils rpcbind #nfs安装命令 author: herbert qq:464884492
systemctl enable nfs #将nfs设置开机启动
systemctl enable rpcbind #将rpcbind设置开机启动
</code></pre>
<h5 id="212-共享配置">2.1.2 共享配置</h5>
<p>主服务建立需要共享的文件夹</p>
<pre><code class="language-bash">mkdir /home/nfs_data # 主服务需要共享的目录
</code></pre>
<p>配置从服务可以访问主服务器</p>
<pre><code class="language-bash">vi /etc/exports #author: herbert qq:464884492
</code></pre>
<p>设置内容为</p>
<pre><code class="language-bash">/home/nfs_data/ 10.2.4.52(rw,sync,no_root_squash)
</code></pre>
<p>重启服务,注意一定要先启动 rpcbind</p>
<pre><code class="language-bash">systemctl stop nfs
systemctl stop rpcbind
systemctl start rpcbind
systemctl start nfs
showmount -e # 可以检查NFS配置是否生效
# 配置正确后,会有一下提示信息
Export list for hk51:
/home/nfs_data 10.2.4.52
</code></pre>
<h5 id="213-防火墙配置">2.1.3 防火墙配置</h5>
<p>如果服务器需要开启防火墙,需要在防火墙添加服务,可以通过<code>firewall-cmd --state</code> 防火墙开启状态</p>
<pre><code class="language-bash">firewall-cmd --add-service=nfs --permanent --zone=public
firewall-cmd --add-service=mountd --permanent --zone=public
firewall-cmd --add-service=rpc-bind --permanent --zone=public
firewall-cmd --reload #重新载入配置,使其生效
</code></pre>
<h4 id="22-从服务器">2.2 从服务器</h4>
<h5 id="221-应用包安装">2.2.1 应用包安装</h5>
<pre><code class="language-bash">yum -y install nfs-utils
</code></pre>
<h5 id="222-挂载配置">2.2.2 挂载配置</h5>
<p>在相同的路径建立同样的目录</p>
<pre><code class="language-bash">mkdir /home/nfs_data # 从服务需要共享的目录
</code></pre>
<p>挂载目录</p>
<pre><code class="language-bash">mount -t nfs -o sync,noac 10.2.4.51:/home/nfs_data /home/nfs_data #目录挂载
</code></pre>
<p>检查挂载</p>
<pre><code class="language-bash"> df -h #查看挂载
</code></pre>
<p>配置开机启动挂载</p>
<pre><code class="language-bash">vi /etc/fstab #追加内容 10.2.4.51:/home/nfs_data /home/nfs_data/ nfs sync,noac 0 0
</code></pre>
<h3 id="3-文件实时监听同步">3 文件实时监听同步</h3>
<h4 id="31-ssh互信配置">3.1 SSH互信配置</h4>
<p>主服务器和从服务分别生成自己的公钥,命令如下</p>
<pre><code class="language-bash">ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa# 生成证书
cd ~/.ssh/ #切换目录
touch authorized_keys #生成认证文件
cat id_rsa.pub >>authorized_keys #复制公钥到认证文件
scp authorized_keys 10.2.4.52:/root/.ssh #远程复制自己公钥到对方服务器
service sshd restart #重启SSH服务
</code></pre>
<p>主服务器和从服务器 authorized_keys 文件,保存所有<strong>需要免密登录</strong>服务器的公钥信息即<code>id_rsa.pub</code>文件中的值</p>
<h4 id="32-同步软件安装">3.2 同步软件安装</h4>
<p>主服务器和从服务器同时安装应用包</p>
<pre><code class="language-bash">yum -y install inotify-tools
yum -y install unison #author: herbert qq:464884492
</code></pre>
<p>主服务器从服务器在相同路径建立需要实时共享的目录</p>
<pre><code class="language-bash">mkdir /home/sync_data
</code></pre>
<h4 id="33-同步脚本编写">3.3 同步脚本编写</h4>
<p>主服务器(10.2.4.51)监听同步脚本,文件名 /home/runfilesync.sh</p>
<pre><code class="language-bash">#/bin/bash
dstIp="10.2.4.52"
src="/home/sync_data"
dst="/home/sync_data"
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
/usr/bin/unison -batch $src ssh://$dstIp/$dst
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
</code></pre>
<p>从服务器(10.2.4.52)监听同步脚本,文件名 /home/runfilesync.sh</p>
<pre><code class="language-bash">#/bin/bash
dstIp="10.2.4.51"
src="/home/sync_data"
dst="/home/sync_data"
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
/usr/bin/unison -batch $src ssh://$dstIp/$dst
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
</code></pre>
<h4 id="34-运行脚本开机自起">3.4 运行脚本,开机自起</h4>
<p>脚本需要后台运行,启动命令如下</p>
<pre><code class="language-bash">nohup sh /home/runfilesync.sh &
ps -aux | grep runfilesync #检查脚本是否在运行
#设置开机启动 author: herbert qq:464884492
crontab -e #追加内容@reboot/home/runfilesync.sh
</code></pre>
<h3 id="4-效果测试">4 效果测试</h3>
<ol>
<li>在主服务器 /home/nfs_data 和 /home/sync_data 两个文件夹中分别添加<code>touch 地心侠士.txt</code>,然后ssh到从服务,可以在从服务器这两个文件夹中找到<code>地心侠士.text</code></li>
<li>在从服务器 /home/nfs_data 和 /home/sync_data 两个文件夹中分别添加<code>touch 小院不小.txt</code>,然后ssh到主服务,可以在主服务器这两个文件夹中找到<code>小院不小.text</code></li>
</ol>
<h3 id="5-总结">5 总结</h3>
<p>通过软件或者协议实现实时同步,以上两种方法各有优劣.采用NFS网络共享协议,必须指定一个网络主节点.采用inotify+unison方式,有点分布式的感觉,无需指定主节点,但同步效果方面和稳定性方面会差一些<br>
文件监听同步软件<code>inotify</code> 和 <code>unison</code> 安装需要编译环境,安装时比较麻烦.我这里提供了<code>rpm</code>安装包以及对应依赖包(安装命令<code>rpm -ivh xxx.rpm</code>).如果需要请关注公众号[<strong>小院不小</strong>],回复<code>sync</code>获取下载连接,或者添加QQ:464884492,获取<br>
<img src="https://images.cnblogs.com/cnblogs_com/yfrs/1583406/o_210303114612gzh.png" alt="小院不小" loading="lazy"><br>
闲暇之余,做了一款有趣耐玩的消除类微信小游戏<code>地心侠士</code>,有兴趣可到微信搜索<em>地心侠士</em>玩玩,感谢支持</p>
</div>
<div id="MySignature" role="contentinfo">
<dl style="float: right; font-size: 16px;">
<dt>转载请注明来源</dt>
<dd> 作者:杨瀚博</dd>
<dd> QQ:464884492</dd>
</dl><br><br>
来源:https://www.cnblogs.com/yfrs/p/18046598/linux_sync
頁:
[1]