二 进击消息中间件系列:Kafka 单机与集群部署实践( 二 )


#也可以在 hadoop104 上,将 hadoop102 中/opt/module/kafka_2.12-3.0.0 目录拷贝到hadoop104上 。[root@hadoop104 ~]# scp -rroot@hadoop102:/opt/module/kafka_2.12-3.0.0./
#还可以在 hadoop103 上操作,将 hadoop102 中/opt/modulekafka_2.12-3.0.0 目录拷贝到hadoop104上 。[root@hadoop103 ~]# scp -rroot@hadoop102:/opt/module/kafka_2.12-3.0.0root@hadoop104:/opt/module
② rsync 远程同步工具
rsync 主要用于备份和镜像 。具有速度快、避免复制相同内容和支持符号链接的优点 。rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新 。scp 是把所有文件都复制过去 。
1.基本语法
rsync-av$pdir/$fname$user@$host:$pdir/$fname命令选项参数要拷贝的文件路径/名称目的地用户@主机:目的地路径/名称-a 归档拷贝-v 显示复制过程
2.案例实操
#删除 hadoop103 中/opt/module/kafka_2.12-3.0.0 [root@hadoop103 module]# rm -rf kafka_2.12-3.0.0/#同步 hadoop102 中的/opt/module/kafka_2.12-3.0.0到 hadoop103[root@hadoop102 module]# rsync -av /opt/module/kafka_2.12-3.0.0/ root@hadoop103:/opt/module/kafka_2.12-3.0.0/
③ xsync 集群分发脚本
由于每次同步时都要输入很多命令,还要输入密码,所以可以通过 xsync 集群分发脚本,一步到位 。下面演示xsync集群分发脚本的编写与使用
#rsync 命令原始拷贝:之前hadoop102 同步到hadoop103、hadoop104需要输入以下命令[root@hadoop102 module]# rsync -av /opt/module/kafka_2.12-3.0.0/ root@hadoop103:/opt/module/kafka_2.12-3.0.0/[root@hadoop102 module]# rsync -av /opt/module/kafka_2.12-3.0.0/ root@hadoop104:/opt/module/kafka_2.12-3.0.0/#现在期望只输入以下命令就能同步到所有服务器上[root@hadoop102 module]# xsync kafka_2.12-3.0.0/#并且期望脚本xsync kafka_2.12-3.0.0/在任何路径都能使用(所以脚本需要放在声明了全局环境变量的路径下)1.首先查看哪些目录是全局的[root@hadoop102 module]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin2.如果不想在提供的目录下存放脚本, 可以添加一个自己的目录到全局环境中(前提是要创建好/home/hadoop/bin目录)#在/etc/profile.d/my_env.sh 文件中增加 export PATH="$PATH:/home/hadoop/bin" 环境变量配置[root@hadoop102 ~]# vim /etc/profile.d/my_env.shexport PATH="$PATH:/home/hadoop/bin"#配置完后,刷新一下环境变量[root@hadoop102 ~]# source /etc/profile3.再次查看时,多了一个全局目录/home/hadoop/bin[root@hadoop102 ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/hadoop/bin
更多关于消息中间件 Kafka 系列的学习文章,请参阅:消息中间件 Kafka,本系列持续更新中 。
编写脚本
#在/home/hadoop/bin 目录下创建 xsync 文件,在该文件中编写如下代码[root@hadoop102 bin]$ vim xsync#!/bin/bash#$#表示参数个数,判断参数个数是否小于1if [ $# -lt 1 ]thenecho Not Enough Arguement!exit;fi#遍历集群所有机器for host in hadoop102 hadoop103 hadoop104do#打印输入的主机名echo ==================== $host ====================#遍历所有目录,逐个发送# 例如执行命令:xsync kafka zookeeper,表示先同步kafka文件,再同步zookeeper文件for file in $@do#判断文件是否存在if [ -e $file ]then#获取父目录# 先执行cd -P /opt/module,再执行pwd,可以获取当前的父目录,-P表示软链接(P大写)pdir=$(cd -P $(dirname $file); pwd)#获取当前文件的名称# basename /opt/module/kafka,则当前文件名为kafkafname=$(basename $file)# ssh hadoop103可以访问hadoop103主机,并且创建目录mkdir -p /opt/module/kafka,-p表示不管目录存不存在都会创建ssh $host "mkdir -p $pdir"# rsync -av /opt/module/kafka/ root@hadoop103:/opt/module/kafka/rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidonedone