已复制
全屏展示
复制代码

大数据集群快速同步配置


· 2 min read

一. 场景再现

在大数据集群中,所有节点的配置必须保持一致,一旦修改了某些配置,此时就需要把配置同步到其他节点,我们通常是用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"

文章推荐