从零开始搭建Elasticsearch 8.13集群(保姆级),基于Docker命令方式

一、搭建环境

服务器ip系统elasticsearch版本
10.0.0.100CentOS 88.13.0
10.0.0.101CentOS 88.13.0
10.0.0.102CentOS 88.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.100docker 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.101docker 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.102docker 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.p12elastic-stack-ca.p12 两个证书放到另外两个服务器的es容器对应位置,并且 elasticsearch.yml 配置文件内容也需要同 10.0.0.100 的保持一致,然后也需要执行步骤(6),最后依次重启三个es容器。

7.设置密码

随意切换到任一服务器并进入es容器的bin目录,执行以下命令:

./elasticsearch-reset-password -u elastic -i

输入两次密码之后出现以下内容,说明密码设置成功:

三、验证

用head插件连接集群的任意一台node节点,会发现需要输入密码才能访问,如下图:

这时候我们输入账号密码,就能进入集群了:

至此,es集群搭建完成!

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Django DRF和Docker是两个不同的技术,它们分别用于Web开发框架和容器化部署。Elasticsearch是一个分布式搜索引擎,可以用于存储、搜索和分析大量数据。 如果您想在Django DRF应用程序中使用Elasticsearch进行搜索和分析,您可以使用Elasticsearch的Python客户端库elasticsearch-py,并将其安装到您的Django应用程序中。然后,您可以编写一些视图来与Elasticsearch进行交互,并使用DockerElasticsearch部署为集群。 以下是一些步骤来搭建Elasticsearch集群: 1. 安装DockerDocker Compose。 2. 编写一个Docker Compose文件来定义您的Elasticsearch集群。例如,以下是一个使用3个节点的集群的示例: ``` version: '3' services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0 container_name: es01 environment: - node.name=es01 - discovery.seed_hosts=es02,es03 - cluster.initial_master_nodes=es01,es02,es03 - cluster.name=es-docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata01:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - esnet es02: image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0 container_name: es02 environment: - node.name=es02 - discovery.seed_hosts=es01,es03 - cluster.initial_master_nodes=es01,es02,es03 - cluster.name=es-docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata02:/usr/share/elasticsearch/data networks: - esnet es03: image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0 container_name: es03 environment: - node.name=es03 - discovery.seed_hosts=es01,es02 - cluster.initial_master_nodes=es01,es02,es03 - cluster.name=es-docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata03:/usr/share/elasticsearch/data networks: - esnet volumes: esdata01: esdata02: esdata03: networks: esnet: ``` 3. 运行Docker Compose命令来启动您的Elasticsearch集群。例如,以下命令将在后台启动集群: ``` $ docker-compose up -d ``` 4. 确认您的集群已经启动。您可以使用以下命令来检查所有节点是否已经加入集群: ``` $ curl -X GET "localhost:9200/_cat/nodes?v&pretty" ``` 5. 在您的Django应用程序中安装elasticsearch-py库。例如,以下命令将安装最新版本的elasticsearch-py: ``` $ pip install elasticsearch ``` 6. 编写一些视图来与Elasticsearch集群进行交互。例如,以下视图将获取所有Elasticsearch集群中的文档: ``` from elasticsearch import Elasticsearch from rest_framework.views import APIView from rest_framework.response import Response class ElasticsearchView(APIView): def get(self, request): es = Elasticsearch(['es01', 'es02', 'es03']) res = es.search(index='my_index', body={'query': {'match_all': {}}}) return Response(res['hits']['hits']) ``` 7. 在您的Django应用程序中定义Elasticsearch集群的连接参数。例如,以下设置将定义3个节点的Elasticsearch集群: ``` ELASTICSEARCH_DSL = { 'default': { 'hosts': [ 'es01:9200', 'es02:9200', 'es03:9200' ] }, } ``` 8. 运行您的Django应用程序并测试您的Elasticsearch视图。例如,以下命令将启动Django开发服务器: ``` $ python manage.py runserver ``` 9. 测试您的Elasticsearch视图。例如,以下命令将获取所有Elasticsearch集群中的文档: ``` $ curl -X GET "http://localhost:8000/elasticsearch/" ``` 以上是一些步骤来搭建Elasticsearch集群并在Django DRF应用程序中使用它。请注意,这只是一个示例,您可能需要根据您自己的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值