Linux集群分发文件xsync,多机器同时运行脚本xcall

xsync同步脚本的使用

1.简介

在集群机器配置时,经常需要将一个文件或目录copy到同样的多台集群上,如果一个一个机器去复制,比较麻烦。如果有一个办法,通过一条命令就可以实现这个目的,就简单多了。xsync就是这样一个同步脚本。xsync其实是对rsync脚本的二次封装,脚本内容可以根据自己需要进行修改。

2.配置集群hostname

2.1 配置hostname文件在每台机器执行命令

echo hostname1 > /etc/hostname
hostname hostname1

备注:hostname1 为主机名,最好能标识主机用途,例如:kafkaos1、kafkaos2。

2.2 配置hosts文件

修改完hostname后,将集群集群名称都加入到/etc/hosts文件中,以后登录不同机器,直接使用hostname而不用IP。
示例:

10.8.10.101 zkos1
10.8.10.102 zkos2
10.8.10.103 zkos3
10.8.10.104 zkos4
10.8.10.111 kafkaos1
10.8.10.112 kafkaos2
10.8.10.113 kafkaos3

-。。。。。 hostname1

 

3.配置免密登录(可以使用脚本不需要密码)

3.1 生成rsa密钥

命令生成rsa密钥,配置信息直接回车即可, 生成的密钥默认在当前用户主目录的.ssh目录下。

ssh-keygen

 

密钥文件有两个:

id_rsa 存放着私钥
id_rsa.pub 存放着公钥
命令执行结果如下:

[root@zkos1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:kXclvgbcNBCbW9Z88eP1brP1TtPOc+YAuWTw0xi4QrU root@zkos1
The key’s randomart image is:
±–[RSA 2048]----+
| +o+ … |
| + O * o|
| + E B o.+|
| . o X …+|
| S o @ …|
| . + + …|
| . .o|
| BO|
| =O|
±—[SHA256]-----+

3.2 copy公钥到目标机器

例子是在:hostname1中(即目标机器是hostname1
在用户主目录创建.ssh目录
mkdir -p ~/.ssh

在本地执行远程拷贝命令
cd /root/.ssh

hostname1的公钥(在hostname1中操作,传给hostname1)

scp id_rsa.pub root@hostname1:/root/.ssh/authorized1_keys

hostname2的公钥(在hostname2中操作,传给hostname1)

scp id_rsa.pub root@hostname1:/root/.ssh/authorized2_keys

合并密钥(在hostname1中操作)

cat authorized1_keys authorized2_keys > authorized_keys

 

再在其他的机器上操作

 

3.3 远程登录测试

输入命令

ssh root@kafkaos1

此时不再需要输入命令,可直接登录成功(若第一次连接,需保持对方公钥,提升时输入yes即可)。

 

4.xsync脚本使用

4.1 安装rsync脚本

xsync是对rsync脚本的二次封装,所以需要先下载rsync命令。
使用以下命令即可安装

yum install -y rsync

4.2 添加xsync脚本

在用户主目录的bin目录下添加脚本,脚本内容如下

cd /usr/local/bin 

touch xsync

vi xsync

 

以下是编写内容(可以修改内容slave='hostname'为自己的主机名前缀,(host=2; host<=3; host++)需要修改为主机名后的编号范围)

#!/bin/sh

# 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount!=1)); then
    echo Usage: $0 filename
    exit;
fi


# 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

# 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
# 获取当前用户名称
user='root'
# 获取hostname及起止号
slave='hostname'

# 循环
for((host=2; host<=3; host++))
do
    echo $pdir/$fname $user@$slave$host:$pdir
    echo ==================$slave$host==================
    rsync -rvl $pdir/$fname $user@$slave$host:$pdir
done

 

需要携带1个参数

filename 待发送的文件或目录名

 

添加执行权限

chmod 777 xsync

 

测试

例如我要将当前目录下的a.t文件同步到服务器hostname2、hostname3上,使用命令

xsync a.t

 

xcall.sh批量运行脚本

[root@hostname1 ~]# cd /usr/local/bin

touch xcall

vi xcall

以下是编写内容(for i in hostname1 hostname2,需要修改自己批量运行程序的主机名)

#!/bin/bash

for i in hostname1 hostname2
do
echo --------- $i ----------
ssh root@$i "source /etc/profile;$*"
done

添加执行权限

chmod 777 xcall

 

测试

xcall jps

posted @ 2021-08-21 16:33  低调的。。。  阅读(1160)  评论(0编辑  收藏  举报