# ElasticsearchThreeNode **Repository Path**: brianchou/elasticsearch-three-node ## Basic Information - **Project Name**: ElasticsearchThreeNode - **Description**: ElasticsearchThreeNode:配置三节点Elasticsearch集群 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-11 - **Last Updated**: 2025-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: ElasticSearch ## README # 三节点Elasticsearch7.16.3部署 [toc] ## 获取代码 ```shell git clone https://gitee.com/brianchou/elasticsearch-three-node.git ``` > [!CAUTION] > > 由于要从`ES_IP_LIST`里的第一台服务器(下文称作服务器A)拷贝`elastic-certificates.p12`到另外两台服务器(下文称作服务器B和C),所以需要配置第一台服务器到另外两台的`ssh`免密登录。 ## 设置SSH免密登录 > 以下步骤都使用`root`账号执行。如果不是,执行`sudo su -`切换为`root`账号。如果已经配置了SSH免密登录,则跳过此步骤。 ### 生成SSH密钥对 在服务器A上使用 `ssh-keygen` 命令生成 SSH 密钥对。默认情况下,密钥对将存储在 `~/.ssh/id_rsa`(私钥)和 `~/.ssh/id_rsa.pub`(公钥)中。按照提示操作,连续回车即可。 ```shell ssh-keygen -t rsa -b 4096 -C "hello.world@qq.com" ``` - `-t rsa`: 指定密钥类型为 RSA。 - `-b 4096`: 指定密钥长度为 4096 位。 - `-C "hello.world@qq.com"`: 添加注释,可以将其改为自己的邮箱或其它信息。 ![2025-03-16 20.12.12](README.assets/2025-03-16-20.12.12.gif) ### 复制公钥至另外两台服务器 #### 使用`ssh-copy-id`命令 > 如果知道密码,则使用`ssh-copy-id`自动将公钥添加到远程服务器的 `~/.ssh/authorized_keys` 文件中。 `server_b_ip_or_hostname` 修改为服务器B的IP,`server_c_ip_or_hostname` 修改为服务器C的IP。根据提示输入服务器密码。 ```shell ssh-copy-id -p 22 root@server_b_ip_or_hostname ssh-copy-id -p 22 root@server_c_ip_or_hostname ``` ![2025-03-16 22.41.12](README.assets/2025-03-16-22.41.12.gif) #### 手动复制公钥 > 如果不知道密码,则选择手动复制模式。 在服务器A上查看公钥内容并复制所有内容。 ```shell cat ~/.ssh/id_rsa.pub ``` 登录服务器B和C。打开或创建 `~/.ssh/authorized_keys` 文件,并将`复制的服务器A的公钥内容`替换为上一步骤中服务器A的公钥内容。 ```shell mkdir -p ~/.ssh echo "复制的服务器A的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` ### 测试免密登录 在服务器A上执行以下命令验证。 ```shell ssh root@server_b_ip_or_hostname ssh root@server_c_ip_or_hostname ``` ## 获取安装包 在服务器上执行以下命令 ```shell curl https://brianhsiung.oss-cn-hangzhou.aliyuncs.com/health ``` 出现`echo ok`字样,则表示服务器可访问外网,如下图。 ![image-20250310144533806](README.assets/image-20250310144533806.png) **若服务器不能访问外网,有两种获取方式。可以访问外网的话跳过此步骤。** ### 官网下载 访问https://www.elastic.co/downloads/past-releases/elasticsearch-7-16-3, 根据服务器的CPU架构选择合适的版本,本文下载的是`LINUX_X86_64`。请注意,脚本只可使用`LINUX_X86_64`和`LINUX_AARCH64` ,勿下载其它格式的安装包。 ![image-20250213172447634](README.assets/image-20250213172447634.png) 然后从此处下载相同版本的分词器:https://release.infinilabs.com/, 脚本中用的分词器有`analysis-ik`和`analysis-pinyin` 。 ### 三方下载 浏览器访问以下地址下载。 - **x86_64架构**: https://brianhsiung.oss-cn-hangzhou.aliyuncs.com/deploy/elastic/x64/elasticsearch-7.16.3-linux-x86_64.tar.gz - **aarch64架构**:https://brianhsiung.oss-cn-hangzhou.aliyuncs.com/deploy/elastic/aarch64/elasticsearch-7.16.3-linux-aarch64.tar.gz - **分词器(不区分架构)**: - https://brianhsiung.oss-cn-hangzhou.aliyuncs.com/deploy/elastic/x64/elasticsearch-analysis-ik-7.16.3.zip - https://brianhsiung.oss-cn-hangzhou.aliyuncs.com/deploy/elastic/x64/elasticsearch-analysis-pinyin-7.16.3.zip ## 执行安装 1. 修改脚本`install_es_cluster.sh` 。若不清楚具体含义,只需要修改`ES_IP_LIST`对应的`IP`地址。**`ES_IP_LIST`为集群的`IP`地址,必须根据实际情况修改为实际的`IP`地址。** | 变量名 | 含义 | 示例值 | | --------------- | ------------------ | ----------------------------------------- | | ES_USER | 运行用户(非root) | elkuser | | ES_BASE_DIR | 安装目录 | /data/elasticsearch | | ES_JAVA_OPTS | JVM堆内存 | 4g | | ES_CLUSTER_NAME | 集群名称 | elasticsearch-cluster | | ES_IP_LIST | 集群的`IP`地址列表 | 172.26.85.157 172.26.85.158 172.26.85.159 | 脚本中的换行符如果是`CRLF`,需要使用`vs code`或其他编辑器将其调整为如下图的`LF`。 ![image-20250310134442034](README.assets/image-20250310134442034.png) 2. 在每台服务器上创建临时目录`/tmp/es_install`,并将安装包和脚本上传至此目录(若服务器可访问外网,只需要上传脚本)。 ```shell mkdir -p /tmp/es_install ``` 3. 在每台服务器上执行安装,根据脚本提示进行相关操作。需要额外关注服务器A。 ```shell cd /tmp/es_install bash install_es_cluster.sh ``` 执行过程如下。 ![image-20250312232015699](README.assets/image-20250312232015699.png) 4. 执行以下命令检查集群状态 ```shell curl -uelastic http://127.0.0.1:9200/_cat/health?v ``` ![image-20250312175518686](README.assets/image-20250312175518686.png) ```shell curl -uelastic http://127.0.0.1:9200/_cat/nodes?v ``` ![image-20250312175545694](README.assets/image-20250312175545694.png) 5. 安装完成后删除脚本和安装包。 ```shell rm -rf /tmp/es_install ``` ## 取消免密登录 > [!TIP] > > 若设置了SSH免密登录,在集群部署完成后,建议将服务器B和C中的公钥去掉。 登录上服务器B和C,打开`~/.ssh/authorized_keys`,删除或注释公钥。 ```shell cp -a ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bak vim ~/.ssh/authorized_keys ``` 假设公钥内容如下。 ```shell ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... user@example.com ``` 输入`i`进入编辑模式,找到添加的那条公钥,并用键盘的上下左右键将光标移至行首,输入`#`,按下`Esc`退出编辑模式,输入`:wq!`保存并退出。 注释掉此行后,内容如下。 ```shell # ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... user@example.com ```