大数据集群快速同步配置
一. 场景再现
在大数据集群中,所有节点的配置必须保持一致,一旦修改了某些配置,此时就需要把配置同步到其他节点,我们通常是用scp来同步配置的,此时需要写绝对路径才能scp,比如看下面的示例
scp -r /path/conf node1:/path/conf
scp -r /path/conf node2:/path/conf
scp -r /path/conf node3:/path/conf
二. 解决方法
我们可以利用 rsync 和 ssh,实现文件同步和远程执行命令。
ssh 互信免密
- 首先配置 ssh 的互信免密登录
# 配置当前用户免密登录
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
# 如果需要同步有root权限的文件,需要配置root用户免密等
sudo su -
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
同步文件命令
- 创建
/usr/bin/xsync
文件,并添加执行权限sudo chmod +x /usr/bin/xsync
#!/bin/bash
[ $# -lt 1 ] && { echo Not Enough Arguement!; exit 1; }
# **** nodes must can login without password ****
# **** you must check nodes to your hosts ****
nodes=(node1 node2 node3)
echo -n "Action Executing ON HOSTS: ${nodes[@]}, [yes/no] "
read input
[ "$input" == "yes" ] || exit 1
for host in "${nodes[@]}"
do
echo ==================== sync to $host ====================
for file in $@
do
if [ -e $file ]; then
pdir=$(cd -P $(dirname $file); pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -apz $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
- 使用示例
# 同步绝对路径文件 到所有节点:/etc/profile
xsync /etc/profile
# 同步当前路径文件 到所有节点:tmpfile
xsync tmpfile
远程执行命令
- 创建
/usr/bin/xcmd
文件,并添加执行权限sudo chmod +x /usr/bin/xcmd
#!/bin/bash
[ $# -lt 1 ] && { echo Not Enough Arguement!; exit 1; }
# **** nodes must can login without password ****
# **** you must check nodes to your hosts ****
nodes=(node1 node2 node3)
echo -n "Action Executing ON HOSTS: ${nodes[@]}, [yes/no] "
read input
[ "$input" == "yes" ] || exit 1
for host in "${nodes[@]}"
do
echo ================= executing cmd on $host =================
cdir="$(pwd)"
ssh $host "cd $cdir;source /etc/profile; $@"
done
- 使用示例
# 在所有节点上 远程执行命令(注意尽量使用双引号)
xcmd cat /tmp/tmpfile
xcmd "cat /tmp/tmpfile | wc -l"