禅与计算机程序设计艺术JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统编程语言爱好者

集群分发脚本

2022-11-12  本文已影响0人  pq217

概述

当前集群环境用到的越来越多了,集群各服务器之间很多数据配置大体一致,导致一个文件可能需要同时上传到多个服务器,工作量很大而且容易失误

在网上参考了一些集群文件分发脚本,在此记录一下

scp拷贝

全程secure copy,即安全拷贝,这是一种最基础的服务器之前传递文件的方法

语法
scp -r $pdir/$fname $user@$host:$pdir/[$fname]

比如需要把服上/home/test.txt传递到B服务器,写法如下

文件复制到文件夹
scp /home/test.txt root@192.168.10.101:/home
文件复制并重命名
scp /home/test.txt root@192.168.10.101:/home/test.txt
批量复制
scp /home/* root@192.168.10.101:/home
复制文件夹
scp -r /home root@192.168.10.101:/

这是一个最基本的全量拷贝方法

rsync

相比如scp的全量拷贝,这是一个种增量更新复制方式,速度更快,适合做备份使用

安装

没有的话需要安装

yum install rsync

注意,同步数据的目标服务器也要安装

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

参数说明

使用

比如把/home/test文件夹同步到B服务器

rsync -av /home/test root@192.168.10.101:/home

分发脚本

上面的两种方式,无论使用哪个,都比较麻烦,需要指定源路径、目标路径

而在集群环境中一般路径都是一致的,我们希望只写一个路径,就自动同步路径下的文件到其它节点的相同路径下

这就需要自己写脚本,脚本名称取为xsync,内容如下

#!/bin/bash
#1. 判断参数大于1
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
#2. 遍历集群所有节点,这里假如有三个集群节点
for host in 192.168.10.100 192.168.10.101 192.168.10.102
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"
                #7.使用rsync增量复制
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

注意,脚本尽量在linux环境编写

把脚本存入一个文件夹下,为全局使用,可以配置环境变量(跟配jdk的bin目录差不多)

此时执行

xsync /home/test

就会把/home/test文件夹即里面的文件同步到集群所有节点,非常方便

但是有一点,需要不断的去输入密码,每个节点输入两遍(ssh和rsync命令各一遍),所以还要做到免密登录

免密登录

免密登录的原理就不说了,执行起来挺简单

找到用户文件夹下的.ssh文件夹,如果是root用户就是/root/.ssh文件夹,如果没有执行一次ssh命令就有了

进入.ssh文件夹,执行命令

ssh-keygen -t rsa

此时会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

此时执行

ssh-copy-id 192.168.10.101

192.168.10.101服务器上/root/.ssh就会出现authorized_keys文件,此时就可以不登录访问192.168.10.101服务器了,ssh/scp/rsync都不需要输入密码了

这时再执行自定义xsync脚本,就非常简单的可以实习集群数据同步了~

上一篇下一篇

猜你喜欢

热点阅读