xsync 集群同步工具

2023-11-18

前言

在配置集群时,往往需要将文件拷贝到各个机器,一来二去就很麻烦;我们可以使用 xsync 工具同时进行多台机器同步数据。

环境准备

我们准备三台虚拟机,他们的 IP 分别为 192.168.56.2、192.168.56.3、192.168.56.4,先修改它们的主机名,在不同的机器下执行以下命令:

# 192.168.56.2
echo > kafka2 /etc/hostname
# 192.168.56.3
echo > kafka3 /etc/hostname
# 192.168.56.4
echo > kafka4 /etc/hostname

完成后将每台机器添加到 hosts 文件:

vim /etc/hosts
# 添加以下内容到文件中
192.168.56.2 kafka2
192.168.56.3 kafka3
192.168.56.4 kafka4

保存后可以执行 ping 命令测试是否能通:

[root@kafka2 ~]# ping -c 3 kafka3
PING kafka3 (192.168.56.3) 56(84) bytes of data.
64 bytes from kafka3 (192.168.56.3): icmp_seq=1 ttl=64 time=0.407 ms
64 bytes from kafka3 (192.168.56.3): icmp_seq=2 ttl=64 time=0.425 ms
64 bytes from kafka3 (192.168.56.3): icmp_seq=3 ttl=64 time=0.531 ms

--- kafka3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.407/0.454/0.531/0.057 ms

在其他机器上完成同样的步骤,前期工作就准备好了。

SSH 配置

生成 RSA 公钥

现在 192.168.56.2这台机器完成一下命令。输入ssh-keygen 直接全部按回车即可,由于我之前生成过,因此会提示覆盖

[root@kafka2 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:O/y8hCL2Q/ltzkckr6p7f/GC+IC8PaoUhumX0azaYdQ root@kafka2
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|   o +    . .    |
|  o = E.S  +     |
| . o *oo o  +    |
|  . X.+.*o.+ o   |
|   B +.+=B= + .  |
|  . o.**oBO+ .   |
+----[SHA256]-----+

将公钥拷贝到其他机器,输入命令 ssh-copy-id -i ~/.ssh/id_rsa.pub remote_ip remote_ip 为远程主机的 IP 地址,我们需要同时输入 .2 .3 .4 三台机器。

[root@kafka2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.56.2's password: 
[root@kafka2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.3
...
[root@kafka2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.4
...

上述步骤完成后,再在 192.168.56.3 与 192.168.56.4 的机器上重复上述步骤。

xsync 脚本编写

由于 xsync 是对 rsync 的再封装,因此需要先安装 rsync

[root@kafka2 ~]# yum install -y rsync

在 /usr/bin 下新建 xsync.sh

[root@kafka2 bin]# vim /usr/bin/xsync.sh

将以下内容粘贴到 xsync.sh 脚本中

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in kafka2 kafka3 kafka4
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送

    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

修改文件权限

[root@kafka2 bin]# chmod 777 /usr/bin/xsync.sh

测试

新建 a.txt 并且将其同步到其他服务器:

[root@kafka2 bin]# touch /usr/local/a.txt
[root@kafka2 bin]# xsync.sh /usr/local/a.txt 
==================== kafka2 ====================
sending incremental file list

sent 44 bytes  received 12 bytes  112.00 bytes/sec
total size is 0  speedup is 0.00
==================== kafka3 ====================
sending incremental file list

sent 44 bytes  received 12 bytes  112.00 bytes/sec
total size is 0  speedup is 0.00
==================== kafka4 ====================
sending incremental file list

sent 44 bytes  received 12 bytes  112.00 bytes/sec
total size is 0  speedup is 0.00

至此,xsync 工具已完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xsync 集群同步工具 的相关文章

随机推荐

  • 事务,不只ACID

    1 什么是事务 应用在运行时可能会发生数据库 硬件的故障 应用与数据库的网络连接断开或多个客户端端并发修改数据导致预期之外的数据覆盖问题 为了提高应用的可靠性和数据的一致性 事务应运而生 从概念上讲 事务是应用程序将多个读写操作组合成一个逻
  • 微信h5分享好友和朋友圈功能

    在开发公众号H5项目时 如果想和小程序一样有分享朋友圈和好友功能时发现会不一样 开发微信小程序时做分享有会有onShareAppMessage 这个方法 因为H5有许多限制 所以在做微信H5分享时就比较麻烦了 首先明确一点 微信H5分享是没
  • Disruptor 详解

    Disruptor 详解 想了解一个项目 最好的办法就是 把它的源码搞到本地自己捣鼓 在网上看了 N 多人对 Disruptor 速度的吹捧 M 多人对它的机制分析 就连 Disruptor 官方文档中 也 NB 哄哄自诩 At LMAX
  • Netty学习17-Netty的可视化

    学习第41节 Netty 可视化方案 Console 日志定时输出 JMX 实时展示 ELKK TIG etc ChannelHandler Sharable public class MetricsHandler extends Chan
  • 08-----查找某个文件的路径

    1 使用find命令查找 关于find这个命令 非常强大 它可以根据文件大小 属性 用户 文件名等去查找匹配的文件 这里不再解释 这里只是列出常用的方法 查找某个文件并不输出错误 find name GetInfo 2 gt dev nul
  • 【Arthas】Arthas retransform动态重新加载类

    1 概述 转载 Arthas retransform动态重新加载类 2 开篇 Arthas提供retransform命令来重新加载已加载的类 通过该命令可以在有限制的反编译已加载的类重新修改后生成class文件重新加载 在测试环境中可以尝试
  • springboot参数配置

    全局配置文件 application properties 配置文件 先准备两个pojo实体类Pet和Person Component 用于将Person类作为Bean注入到spring容器中 ConfigurationProperties
  • 【js小游戏&案例】纯前端实现飞机大战,附带源码

    技能 使用html js css实现飞机大战小游戏 需求 我军飞机左右移动 并且按空格 可以发射炮弹 敌方飞机从上往下飞 接触到我方炮弹 飞机被歼灭 我军接触到敌军飞机也将会被歼灭 我方飞机吃到道具可以增加弹道 思路 初始化 初始创建我方飞
  • enum一个最不像class的class

    enum一个最不像class的classjava枚举类型是jdk5出现的 它的出现主要为了解决一些有特殊意义 已经确定的 长度不会改变的集合 月份描述 public class Month 月份名称 private final String
  • SpringMVC之JSR303使用及拦截器使用(带你探索SpringMVC的新领域)

    目录 前言 一 探索JSR303的世界 1 JSR303简介 1 1 什么是JSR303 1 2 JSR303的重要性及使用原因 重要性 原因 1 3 JSR303的常用注解 扩展 2 JSR303快速入门 基本使用 2 1 导入依赖 2
  • 【算法】直接插入排序C语言实现

    不知道大家喜不喜欢打扑克 哈哈 我就挺喜欢的 尤其是三人斗地主 很喜欢 现在我来描述一幅画面看看大家熟不熟悉 我抓牌的习惯是 在抓牌的时候 我要看着我的牌 看看牌的状况 有没有大小鬼 有几个2 有没有长的连 顺便做好基本的排序工作 比如我第
  • http 请求报文响应报文的格式以及Token cookie session 区别

    面试必备 http 请求报文响应报文的格式 Token cookie session 区别 http 请求报文响应报文的格式 HTTP 请求报文和响应报文的格式如下 HTTP 请求报文格式 lt 方法 gt lt 路径 gt lt 协议版本
  • RabbitMQ --- SpringAMQP

    一 简介 SpringAMQP是基于RabbitMQ封装的一套模板 并且还利用SpringBoot对其实现了自动装配 使用起来非常方便 SpringAmqp的官方地址 Spring AMQP SpringAMQP提供了三个功能 自动声明队列
  • gitlab down: redis: 0s, normally up, want up; run:log

    突然发现gitlab不能访问了 报错505 1 查看gitlab的状态 发现redis的状态是down gitlab ctl status down redis 0s normally up want up run log 解决 启动red
  • matlab中global的用法

    Matlab 中子函数不传参直接调用主函数global变量方法 在一个m文件里要调用一个函数 自定义的 但是我希望这个函数能利用并修改workspace中的变量 m文件中的 可是函数的变量全是局部的 无法修改工作区的变量 该怎么办 同时在
  • KMP算法最浅显理解——一看就明白

    说明 KMP算法看懂了觉得特别简单 思路很简单 看不懂之前 查各种资料 看的稀里糊涂 即使网上最简单的解释 依然看的稀里糊涂 我花了半天时间 争取用最短的篇幅大致搞明白这玩意到底是啥 这里不扯概念 只讲算法过程和代码理解 KMP算法求解什么
  • Artec独立三维(3D)扫描软件

    最新版本 Artec Studio 9 1 中文界面 您是否想将自己的Kinect作为 3D 三维扫描仪来使用呢 ArtecStudio9 1为您提供解决方案 它可以和微软的Kinect 华硕的 Xtion XtionProLive以及其他
  • Uncaught SyntaxError: Unexpected end of input

    Uncaught SyntaxError Unexpected end of input 最近做项目遇到这样一个问题Uncaught SyntaxError Unexpected end of input Unexpected end of
  • mysql有没有flashback_Flashback for MySQL 5.7

    实现原理 flashback的概念最早出现于Oracle数据库 用于快速恢复用户的误操作 flashback for MySQL用于恢复由DML语句引起的误操作 目前不支持DDL语句 例如下面的语句 DELETE FROM XXX UPDA
  • xsync 集群同步工具

    前言 在配置集群时 往往需要将文件拷贝到各个机器 一来二去就很麻烦 我们可以使用 xsync 工具同时进行多台机器同步数据 环境准备 我们准备三台虚拟机 他们的 IP 分别为 192 168 56 2 192 168 56 3 192 16