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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~