一、作用
搭建集群的时候,可以将一份内容同时分发给多个已配置的服务器,不需要多次手动上传。
xsync是对rsync脚本的二次封装,可以自定义内容
二、scp和rsync
- scp :命令格式为scp -r ·
pdir/$fname $user@host:$pdir/$filename
-r表示递归复制,给定本机的文件或目录地址 和 目标机器的用户名、主机IP、目的地路径和文件名就可以完成拷贝操作。使用 scp 传输数据时,文件是加密的,因此任何敏感内容都不会在传输过程中被篡改 - rsync : 命令格式为
rsync -av $pdir/$fname $user@$host:$pdir/$fname
-a表示归档拷贝,-v表示显示复制过程
scp与rsync的差别:
- scp 通过安全的 SSH 连接将文件从本地机器复制到远程机器,而 rsync 允许您同步远程文件夹。
- scp 读取源文件并将其写入目标,是在本地或通过网络执行线性复制。rsync 也是在本地或通过网络复制文件,但它使用特殊的增量传输算法和一些优化来使操作更快。
- scp 总是安全的,而 rsync 必须通过 SSH 传输才能安全。
- 如果要传输大文件,并且传输在完成之前断开连接,rsync 会从中断的地方继续传输,而 scp 没有。
- rsync 比较每一端的文件并只传输更改文件的更改部分,当你第一次传输文件时,它的行为与 scp 非常相似,但是对于大多数文件未更改的第二次传输,它推送的数据将比 scp 少得多。这也是一种重新启动失败传输的便捷方法,你只需重新发出相同的命令,它就会从上次中断的地方开始,而 scp 将从头开始。
三、配置ssh免密登录,以001服务器为例,其余的一样
vim /etc/hosts
# 增加以下内容
192.168.74.133 kafka001
192.168.74.134 kafka002
192.168.74.135 kafka003
# 返回家目录
cd
# 生成公钥私钥,一直回车即可
ssh-keygen -t rsa
# 查看
ls -al
# 进入.ssh
cd .ssh
# 配置免密登录服务器
ssh-copy-id kafka002
ssh-copy-id kafka003
四、安装rsync(都安装)
yum -y install rsync
# 启动服务
systemctl start rsyncd.service
# 设置开机自启
systemctl enable rsyncd.service
1、创建xsync脚本
#!/bin/bash
# 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
# 遍历集群所有机器
hostlist="kafka002 kafka003"
for host in $hostlist
do
echo ==================== $host ====================
# 遍历所有目录,挨个发送
for file in $@
do
# 判断文件是否存在
if [ -e $file ]
then
# 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir
# 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname
# 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "mkdir -p $pdir"
# 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file does not exists!
fi
done
done
2、设置到全局命令
# 将上面的脚本文件复制到目录即可
echo $path
五、xcall
在一个节点上输入命令可以同步到其余节点执行
#!/bin/bash
# 获取控制台指令
cmd=$*
# 判断指令是否为空
if [ ! -n "$cmd" ]
then
echo "command can not be null !"
exit
fi
source /etc/profile
hostlist="kafka001 kafka002 kafka003"
for i in $hostlist
do
echo "================ $i ================="
echo "--> excute command \"$cmd\""
ssh $USER@$i $cmd
done
echo "excute successfully !"
将上面的shell脚本放到任意$PATH下即可
jps命令找不到的解决方式,创建软连接
ln -s -f /usr/local/tools/jdk1.8/bin/jps /usr/local/bin/