一、搭建环境
服务器ip | 系统 | elasticsearch版本 |
10.0.0.100 | CentOS 8 | 8.13.0 |
10.0.0.101 | CentOS 8 | 8.13.0 |
10.0.0.102 | CentOS 8 | 8.13.0 |
注意:所有环境已经安装Docker,并且打开9200和9300端口(或者关闭防火墙)。
每个服务器均需进行以下操作:
1.修改每个进程最大同时打开文件数和最大线程个数:
vi /etc/security/limits.conf
文件最后加上:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
2.修改内存大小:
vi /etc/sysctl.conf
文件最后加上:
vm.max_map_count=262144
3.最后所有执行命令:sysctl -p
二、搭建集群
1.三台服务器均需要拉取镜像:docker pull elasticsearch:8.13.0
2.在每台服务器分别执行下面docker启动命令:
10.0.0.100 | docker run -itd \ --privileged=true \ --name=es8 \ -p 9200:9200 \ -p 9300:9300 \ -e node.name=node-1 \ -e network.publish_host=10.0.0.100 \ -e network.host=0.0.0.0 \ -e discovery.seed_hosts=10.0.0.100:9300,10.0.0.101:9300,10.0.0.102:9300 \ -e cluster.initial_master_nodes=node-1,node-2,node-3 \ -e cluster.name=es8-cluster \ -e TZ=Asia/Shanghai \ elasticsearch:8.13.0 |
10.0.0.101 | docker run -itd \ --privileged=true \ --name=es8 \ -p 9200:9200 \ -p 9300:9300 \ -e node.name=node-2 \ -e network.publish_host=10.0.0.101 \ -e network.host=0.0.0.0 \ -e discovery.seed_hosts=10.0.0.100:9300,10.0.0.101:9300,10.0.0.102:9300 \ -e cluster.initial_master_nodes=node-1,node-2,node-3 \ -e cluster.name=es8-cluster \ -e TZ=Asia/Shanghai \ elasticsearch:8.13.0 |
10.0.0.102 | docker run -itd \ --privileged=true \ --name=es8 \ -p 9200:9200 \ -p 9300:9300 \ -e node.name=node-3 \ -e network.publish_host=10.0.0.102 \ -e network.host=0.0.0.0 \ -e discovery.seed_hosts=10.0.0.100:9300,10.0.0.101:9300,10.0.0.102:9300 \ -e cluster.initial_master_nodes=node-1,node-2,node-3 \ -e cluster.name=es8-cluster \ -e TZ=Asia/Shanghai \ elasticsearch:8.13.0 |
注意:这个时候我们会发现容器启动起来然后又挂掉了,这是正常的,因为没有配置xpack。
3.切换到10.0.0.100,然后执行:docker inspect es8
找到下图红色方框所示的地方:
然后执行:
cd /var/lib/docker/overlay2/a7e9386a61527212efb0f67332a5abdde6c2f008618cde083bfb46711ac26664/diff/usr/share/elasticsearch/config
在当前路径下新建文件:elasticsearch.yml
在文件中输入(如下图):xpack.security.enabled: false
最后启动10.0.0.100的es容器,这时候我们发现容器启动起来了。(另外两台服务器同理执行以上操作)
最后用head插件连(注意:只启一个节点head是连不上的):http://10.0.0.100:9200/
如果能看到这个页面,恭喜你,集群已经搭建成功。接下来就给集群加上密码。
4.切换到10.0.0.100,用root身份进入es8容器:docker exec -u root -it es8 /bin/bash
安装vim模块(另外两个服务器也需要安装):(1) apt-get update (2) apt-get install vim
然后退出容器:exit
5.切换到10.0.0.100,用elasticsearch身份进入es容器:docker exec -it es8 /bin/bash
进入config目录编辑elasticsearch.yml文件,用以下内容覆盖掉原来的内容:
xpack.license.self_generated.type: basic xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.client_authentication: required xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
6.生成ca证书:
(1)切换到10.0.0.100,用elasticsearch身份进入es8容器:docker exec -it es8 /bin/bash
(2)进入bin目录执行:elasticsearch-certutil ca
(3)然后接着输入:elasticsearch-certutil cert --ca elastic-stack-ca.p12
(4)这时候我们会发现在elasticsearch目录下面有两个证书:
(5)将这两个证书移动到config目录下并修改读写权限:
chmod 642 elastic-certificates.p12 chmod 642 elastic-stack-ca.p12
(6)切换到bin目录下执行(如果在上面步骤(2)和步骤(3)未输入密码则不需要执行下面两条命令)并输入对应的密码:
elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
(7)将 elastic-certificates.p12 和 elastic-stack-ca.p12 两个证书放到另外两个服务器的es容器对应位置,并且 elasticsearch.yml 配置文件内容也需要同 10.0.0.100 的保持一致,然后也需要执行步骤(6),最后依次重启三个es容器。
7.设置密码
随意切换到任一服务器并进入es容器的bin目录,执行以下命令:
./elasticsearch-reset-password -u elastic -i
输入两次密码之后出现以下内容,说明密码设置成功:
三、验证
用head插件连接集群的任意一台node节点,会发现需要输入密码才能访问,如下图:
这时候我们输入账号密码,就能进入集群了:
至此,es集群搭建完成!