Charla sobre herramientas: configure de manera eficiente el entorno de clúster de Centos

Charla sobre herramientas: configure de manera eficiente el entorno de clúster de Centos

Número público: chef técnico

Sigue al pequeño chef y cocina deliciosas comidas técnicas.

⚠ Este artículo es largo, cómalo por etapas, preste atención a la combinación de práctica y teoría.

El contenido central de este artículo son las Secciones 4, 5 y 6

1. Introducción

Cuando obtuve el servidor por primera vez, el primer problema fue la configuración del entorno. Como usuario de Java, la configuración de JDK para máquinas nuevas y la configuración de clústeres de middleware son algo común. El trabajo de configuración es mecánico, pero suele llevar mucho tiempo debido a factores como la red, ¿hay alguna forma de hacerlo de una vez por todas? Este artículo le revelará la respuesta.

2. Entorno y requisitos previos

Este artículo llevará al lector a darse cuenta rápidamente de la configuración básica del entorno de las tres máquinas y dejará un andamiaje y un método práctico para que el lector configure otros entornos.

  • ventanas 11
  • Estación de trabajo VMware 16

Los lectores deben preparar la imagen de Centos y el paquete comprimido de JDK Linux aquí

Mi hábito es usar el paquete comprimido para la instalación, porque la ventaja del paquete comprimido es que yo mismo elijo la ubicación de la instalación, lo cual es conveniente para la administración unificada

3. Configurar el clúster de Centos

Aquí elegiremos construir 3 máquinas virtuales para simular un entorno de clúster de servidor real. Los lectores pueden elegir construir su propio y luego pasar directamente a la Sección 4, o pueden elegir seguir mi ritmo para construir un clúster centos. Al final, la construcción exitosa de esta sección se muestra en la figura.

3.1 Crear una máquina virtual centos

Si ya ha creado uno, puede optar por omitir esta sección

  1. Abrimos el asistente de nueva máquina virtual, aquí elegimos custom

    imagen-20220320151931689
  2. Después de hacer clic en Siguiente dos veces, aquí elegimos crear un disco duro virtual en blanco, el siguiente paso

    imagen-20220320160448877
  3. Aquí porque descargué la imagen de Centos 7x64, mi configuración es la siguiente, el siguiente paso

  4. Configure el nombre de la máquina virtual y la ubicación de almacenamiento, el siguiente paso

  5. Configuración de la máquina virtual (configuración del procesador y la memoria), si no necesita usar la interfaz visual, puede bajarla un poco. Por supuesto, estas configuraciones se pueden modificar más adelante, así que no te preocupes demasiado.

    imagen-20220320153030516 imagen-20220320153129741
  6. 选择 NAT 网络,这对我们之后配置虚拟网络的非常关键,下一步

    imagen-20220320153313087
  7. IO 控制器和磁盘类型我们不需要做变动,直接下一步就行

  8. 磁盘配置,大家可以参考我的配置

    imagen-20220320153454705 imagen-20220320160713489
  9. 后面的配置都无关紧要了,如果没有什么需要自定义的地方读者可以选择一直下一步到完成

  10. 配置操作系统镜像 到刚创建好的虚拟机,为其配置操作系统镜像,如图所示,

  11. 启动虚拟机,完成操作系统设置 如果读者使用的镜像也是 centos 7 的话,接下来的步骤基本相同。选择好语言和键盘后将会跳转到当前界面,

    我们接下来要在这个界面完成几项设置,

    • SOFTWARE SELECTION:软件设置,我的习惯是只安装一个最小的,只有命令交互界面的 centos,如果读者有使用 GUI 界面的习惯可以选择另外一个选项。

    • NETWORK & HOST NAME:配置网络,我们要让 centos 能够连接上网络

      将如图所示开关打开

    上述配置完成后我们选择 Begin Installation,之后会跳转到如图界面,

    按照它的指引配置 Root 密码和用户即可,这里作者配置 root 账号密码为 123456

  12. 安装完进行一波重启,应该就能进入如图所示的命令交互界面了

    imagen-20220320170832373

3.2 配置虚拟网络

下面我们需要配置虚拟网络,配置的目的主要是为了模拟真实的网络环境,让虚拟机在宿主机上拥有自己的静态 ip,并且虚拟机之间能够成功访问彼此。

如果读者计划使用服务器,而不是本地虚拟机来实践的话,可以选择跳过这一节和后面的 3.4 节,在这两节我们主要做了这些工作,

  • 配置 NAT 网关
  • 通过克隆创建了三台虚拟机
  1. 点开 Vmware Workstation 的虚拟网络编辑器
  1. 点击更改设置通过 UAC 管理员设置后将会显示如图界面
imagen-20220322221749684
  1. 下面我们添加一个虚拟网络 Vmnet8

    点击添加网络,选择 Vmnet8,

    imagen-20220322222445596

    创建成功后,将会如图显示,我们要做几个配置,

    imagen-20220322223213216

    修改后长这样,

    imagen-20220322223532826

    现在我们点进去 NAT 设置,看看网关地址,

    imagen-20220322223640034

    一般来说如果你和我使用的是相同的配置,我们的网关地址都是 192.168.100.2,至此虚拟网络就配置好了,别忘了确定保存噢~

3.3 配置模板虚拟机网络

现在让我们进入之前创建的那台 centos 虚拟机,

  1. 修改网络配置文件

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    复制代码

    如果这时候提示 vim command not found,则读者需要通过以下命令安装 vim

    yum install -y vim
    复制代码

    我们需要修改配置文件中的几项,

    # 修改为 static
    BOOTPROTO=static
    ### 如果没有以下几项则添加 ###
    # 指定静态 ip
    IPADDR=192.168.100.100 
    # 指定前缀长度
    PREFIX=24 
    # 指定网关
    GATEWAY=192.168.100.2 
    # 指定 DNS
    DNS1=192.168.100.2 
    复制代码

    保存后重启虚拟机

  2. 测试是否已经成功配置网络

    我们在宿主机尝试 ping 配置好的虚拟机 192.168.100.100,如下图所示,可以看到结果如下所示。

    imagen-20220322225737162

3.4 克隆虚拟机

上面我们创建了一个模板虚拟机,现在我们要用它来创建两个 ip 分别为 192.168.100.101 和 192.168.100.102 的虚拟机

  1. 选择克隆菜单

  2. 接下来的步骤通过图示演示

    imagen-20220322232010039

    下面配置虚拟机名称和存储位置点击完成即可。

    1. 通过上面的步骤克隆两个虚拟机后,我们只需要将之前的网络配置文件中的静态 IP 地址分别修改即可。这里我们分别修改为 192.168.100.101 和 192.168.100.102

      ...
      # 指定静态 ip
      IPADDR=192.168.100.101 
      ...
      复制代码
      ...
      # 指定静态 ip
      IPADDR=192.168.100.102
      ...
      复制代码
    2. 配置完成后,重启虚拟机,这时候应该有三台虚拟机正在运行,现在我们要验证三台虚拟机是否能够互通

      这里读者使用了 XShell 来作为 SSH 工具,当然实际上直接使用虚拟机的 Terminal 也是没有问题的

      imagen-20220323141303356

      让虚拟机之间互相 ping 一下,看看是否能够联通

4. 配置 JDK 环境

本节我们首先会配置其中一台虚拟机的环境,这里我们配置 192.168.100.100 的 JDK 环境

按照作者习惯,一般软件压缩包会放置在 /opt/software 目录下,而其安装位置选择在 /opt/module,

mkdir /opt/software /opt/module
复制代码

进入 software,然后将 JDK 压缩包上传上去,上传成功后我们通过 ll 查看,

imagen-20220323145427597

进行解压,

tar -zxvf /opt/software/jdk-8u321-linux-x64.tar.gz -C /opt/module/
复制代码

进入解压好的 jdk 目录,

cd /opt/module/jdk1.8.0_321/
复制代码

pwd,然后复制一下路径,配置环境变量时会用到。

现在我们进入环境变量目录,

cd /etc/profile.d/
复制代码

创建一个自定义的脚本,

vim my_env.sh
复制代码

将下面的内容输入到文件中进行保存,

export JAVA_HOME=/opt/module/jdk1.8.0_321/
export PATH=$PATH:$JAVA_HOME/bin
复制代码

使得环境变量生效,

source /etc/profile
复制代码

检查 Java 环境是否生效,

java -version
复制代码

imagen-20220323154040251

这里可能有读者有疑问,为什么不直接修改 /etc/profile 文件?而是通过在 profile.d 目录下创建一个自己的配置文件。首先,是不推荐大家修改 profile,相较于创建一个专门的文件来管理自定义环境变量,追加式地修改 profile 不容易维护,并且容易修改错误,导致其他系统变量出现问题。

5. Linux 集群分发介绍

5.1 SCP 命令介绍

scp 是 secure copy 的简写,用于 linux 下远程文件拷贝的命令,功能和 cp 是类似的,只不过强制使用 SSH 连接加密的方式。通常来说如果不配置服务器之间的免密登录,那么每次使用命令都将需要输入目标服务器的账户密码。

scp 的命令的简单使用格式如下所示:

scp -r local_path remote_username@remote_ip:remote_path
复制代码
  • local_path:本地文件路径
  • remote_username:远程服务器的用户名
  • remote_ip:远程服务器 ip 地址
  • remote_path:要拷贝到的远程路径

下面我们简单使用一下,我们尝试使用这条命令从 192.168.100.100 拷贝 JDK 安装目录到 192.168.100.101,

scp -r /opt/module/ [email protected]:/opt/module/
复制代码

这时候会提示你非对称加密指纹的警告,我们输入 yes 再继续,

接下来会提示你需要输入密码才能继续,输入密码回车后,你将会看到一大段输入,和 cp 命令的输出是一个道理的,

imagen-20220323225328417

重新执行 scp 命令之后还是需要重新输入密码的,这很麻烦,在第六节,作者将会介绍如何配置免密登录

我们到 192.168.100.101 的目录下验证是否已经拷贝成功,

imagen-20220323230539273

细心的读者再重复执行一次拷贝命令,会发现 scp 命令会重复完整地拷贝整个 module 并以覆盖的形式传送到指定服务器,我们将会看到和第一次执行 scp 命令一样的输出。换言之,scp 命令无论远程服务器指定目录下是否已经存在相同的文件,scp 都会重复地拷贝,这样带来许多无用的拷贝工作,造成了很多额外的耗时。

事实上,我们希望找到一种类似 SVN 或者 Git 版本控制工具的同步方式,而不需要每一次都进行完整的拷贝,那么接下来介绍的命令将会以一种镜像同步的方式解决集群分发问题。

5.2 RSYNC 命令介绍

rsync 主要用于备份和镜像同步。相较于 scp,它具备速度更快、避免复制相同内容等优点。

rsync 的命令的简单使用格式如下所示:

rsync -av local_path remote_username@remote_ip:remote_path
复制代码

现在我们尝试使用 rsync 来将 JDK 同步到 192.168.100.102,

rsync -av /opt/module/ [email protected]:/opt/module/
复制代码

读者可能需要先安装一下 rsync

yum install -y rsync
复制代码

第一次执行的前两步和前面的 scp 一样,都是要保存远程服务器的密钥指纹和输入密码,后续执行就只需要输入密码了。

输入密码回车执行后,由于是第一次同步 module 路径,那么第一次肯定是全量同步的,也就是和拷贝是没有什么去别的。当我们重复执行这条命令后,你会发现和 scp 有所不同,

命令会很快执行完毕,因为 rsync 使用的是增量同步的方式,由于文件没有经过修改,那么 rsync 不会产生任何文件拷贝操作。

现在我们尝试同步 /etc/profile.d/my_env.sh 配置文件到其他服务器中,

rsync -av /etc/profile.d/my_env.sh [email protected]:/etc/profile.d/
rsync -av /etc/profile.d/my_env.sh [email protected]:/etc/profile.d/
复制代码

读者将会看到以下输出,

现在我们往配置文件中添加一些注释,

# Java Home
export JAVA_HOME=/opt/module/jdk1.8.0_321/
# add to path
export PATH=$PATH:$JAVA_HOME/bin
复制代码

再次执行 rsync,只不过这时候我们选择同步整个 profile.d 路径,

rsync -av /etc/profile.d/ [email protected]:/etc/profile.d/
复制代码

读者会发现 rsync 只同步了被修改的 my_env.sh 文件,我们也就验证了 rsync 增量同步的特性。这个特性非常有用,加入我们在 /opt/module 和 /etc/profile.d 目录下分别放置着非常多的软件目录和配置文件,rsync 能够帮助我们实现修改一处然后同步到多处的需求

5.3 集群分发脚本

通过上面我们介绍了 rsync 命令的使用,在使用中我们发现一个问题,如果需要同步一个路径到多个服务器时,我们需要执行下面的多条命令,并且如果需要同步的服务器越多,命令执行的次数就越多,

rsync -av local_path [email protected]:remote_path
rsync -av local_path [email protected]:remote_path
...
复制代码

我们能不能有一种一劳永逸的办法,我只需要给命令提供路径,它就自动帮我同步到所有节点呢?那这就是 shell 脚本的命令了,下面提供一个脚本供读者使用,

#!/bin/bash

# 判断参数是否足够
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

# 遍历集群所有 ip
for host in 192.168.100.100 192.168.100.101 192.168.100.102
do
    echo ====================  $host  ====================
    
    # 遍历所有目录
    for file in $@
    do
        # 判断文件是否存在
        if [ -e $file ]
            then
                # 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)
                # 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                # 循环执行 rsync 命令
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done
复制代码

如果读者使用了不同的 ip 地址,则只需要修改脚本这一处为你的 ip 列表,

...
for host in ip1 ip2 ip3 ... ipn
...
复制代码

下面我们来使用这个脚本,

cd
vim syncall
复制代码

然后将上面的脚本写入文件中并保存。

修改脚本执行权限,使其能够被执行,

chmod +x syncall
复制代码

验证脚本是否能够被执行,

./syncall /etc/profile.d/
复制代码
imagen-20220324001525055

可以看到除了要处理密钥指纹和输入多次密码之外,脚本是正常执行的。

拷贝到 bin 目录以便全局可用,

cp syncall /bin
复制代码

至此你已经能够在任何地方使用这个集群分发脚本了。

6. SSH 免密登录

因为篇幅问题,我们不在本文介绍 SSH 免密登录原理,直接提供步骤给大家。

  1. 生成本机的公私钥

    cd .ssh/
    ssh-keygen -t rsa
    复制代码

    然后直接敲回车,让它做默认选择

    imagen-20220324002139567
  2. 拷贝公钥到指定服务器

    ssh-copy-id 192.168.100.100
    ssh-copy-id 192.168.100.101
    ssh-copy-id 192.168.100.102
    复制代码

    期间会需要输入指定服务器的 root 密码

    注意,如果读者希望其他服务器也能互相无密登录,则需要到 101 和 102 的服务器上重复执行上面的步骤。如果读者希望不适用 root 账号来做无密登录,则需要切换到其他用户账户,并重复上面步骤即可。

  3. 使用集群分发来验证是否配置成功

    imagen-20220324002801484

    一路畅通~

7. 总结经验

El contenido principal de este artículo SCPes RSYNCel uso y los scripts de distribución de clústeres de y . Como regla general, si desea configurar rápidamente un servidor recién adquirido, le recomiendo guardar localmente algunas máquinas de plantilla de uso común y luego instalarlas en un servidor remoto rsynce iniciar la máquina de plantilla para la distribución del clúster para completar rápidamente la configuración de la plantilla.

Supongo que te gusta

Origin juejin.im/post/7078339983945236511
Recomendado
Clasificación