文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于rsync写脚本实现多节点多服务器文件一键同步的方法

2024-04-02 19:55

关注

集群脚本分发

在处理 Linux 集群的时候,常常会涉及到集群内文件的同步。文件数量多,且需要频繁同步的情况下,运用 一些 Linux 命令能很大程度上的帮助我们节省时间和精力。

本文将介绍 scp 和 rsync 两个命令

  1. scp(secure copy) 安全拷贝:可以实现服务器与服务器之间的数据拷贝。rsync 远程同步工具:主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
  2. 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。

scp

基本语法

scp -r $pdir/$fname $user@$host:$pdir/$fname

scp:命令

-r:递归

p d i r / pdir/ pdir/fname:要拷贝的文件路径/名称

u s e r @ user@ user@host: p d i r / pdir/ pdir/fname:目的地用户@主机:目的地路径/名称

简单操作

在 ndmiao 用户目录下,创建一个 test 文件夹, 并创建一些文件。修改 test 文件目录权限归属为 ndmiao:ndmiao

[ndmiao@centos01 ~]$ sudo chown ndmiao:ndmiao -R test

在 centos01 上将 test 文件目录拷贝到 centos02 上,回车后会提示是否确认连接,确认连接后输入 centos02 的密码即可

[ndmiao@centos01 ~]$ scp -r test ndmiao@centos02:/home/ndmiao/

在 centos02 上将 centos01 中的目录拷贝到 centos02

[ndmiao@centos01 ~]$ scp -r test ndmiao@centos02:/home/ndmiao/

在 centos02 上将 centos01 上的目录拷贝到 centos03

[ndmiao@centos02 ~]$ scp -r ndmiao@centos01:/home/ndmiao/test ndmiao@centos03:/home/ndmiao/

rsync

基本语法

rsync -av $pdir/$fname $user@$host:$pdir/$fname

rsync:命令

-a:归档拷贝

-v:显示复制过程

p d i r / pdir/ pdir/fname:要拷贝的文件路径/名称

u s e r @ user@ user@host: p d i r / pdir/ pdir/fname:目的地用户@主机:目的地路径/名称

简单操作

同步 centos01 目录到 centos02

[ndmiao@centos01 ~]$ rsync -av test ndmiao@centos02:/home/ndmiao/

xsync

虽然上面两个命令已经极大的方便了文件的同步,但是当集群中存在着几十几百甚至上千服务器的时候,就又显的麻烦了,这时候就可以编写一个shell脚本来实现集群文件的同步。

需求

能够一条命令同步目录至集群所有的节点

实现

配置 /etc/hosts ,因为脚本需要通过主机名来获取节点的地址, 文件中追加节点地址以及对应的主机名。配置好之后,需要重启。

192.168.10.101 centos01
192.168.10.102 centos02
192.168.10.102 centos03

因为需要脚本在任何路径下都能够使用,所以需要将脚本放置在声明了全局环境变量的路径下面。

[ndmiao@centos01 ~]$ /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ndmiao/.local/bin:/home/ndmiao/bin

于是选择将 xsync 文件放置在 /home/ndmiao/bin 目录下

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
#2. 遍历集群所有机器
for host in centos01 centos02 centos03
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)
                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

修改脚本 xsync 的权限

[ndmiao@centos01 bin]$ chmod 777 xsync

测试脚本

[ndmiao@centos01 ~]$ xsync /home/ndmiao/bin

运行后会发现所有节点的 /home/ndmiao/bin 下都会出现 xsync 脚本

如果想要以 root 的身份来运行

[ndmiao@centos01 ~]$ sudo /home/ndmiao/bin/xsync /home/ndmiao/test

SSH 无密码登录

虽然已经配置好了xsync,但是每同步一个节点就要输入一次节点的密码,SSH 无密码登录就可以去除这种重复的操作

免登陆原理

假设有两台服务器,一台为 centos01,一台为 centos02,使用 ssh-key-gen 在 centos01 的 /home/ndmiao/.ssh 会生成私钥 id_rsa 和 公钥 id_rsa.pub。将 centos01 的公钥拷贝到 centos02 的 authorized_keys 后,当 centos01 通过 ssh 访问 centos02(数据用私钥加密),centos02 会授权 authorized_keys 中的 centos01 公钥来解密私钥,然后用 centos01 公钥加密数据返还给 centos01,centos01 接受到数据后用私钥来解密数据。

操作步骤

生成公钥和私钥

[ndmiao@centos01 ~]$ cd .ssh
[ndmiao@centos01 .ssh]$ ssh-keygen -t rsa

将公钥拷贝到需要免密登录的目标节点,因为 ssh 访问自身节点也需要密码,所以自身也需要拷贝

[ndmiao@centos01 .ssh]$ ssh-copy-id centos01
[ndmiao@centos01 .ssh]$ ssh-copy-id centos02
[ndmiao@centos01 .ssh]$ ssh-copy-id centos03

这时候就可以通过 centos01 来 ssh 免密访问三台节点了,运行 xsync 也不再需要输入密码。如果想要其它节点也能无密码访问其它的节点,也需要同样的配置过程。因为 Linux 不同用户是隔离的,所以其它用户想要无密码访问其它节点,也需要同样操作配置,包括 root 用户。

到此这篇关于利用rsync写脚本实现多节点多服务器文件一键同步的文章就介绍到这了,更多相关rsync多服务器文件同步内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯