Elasticsearch 集群

ops/2024/12/28 7:35:23/

集群结构

        以三台物理机为例。在这三台物理机上,搭建了 6 个 ES 的节点,三个 data 节点,三个 master 节点(每台物理机分别起了一个 data 和一个 master),3 个 master 节点,目的是达到(n/2) +1 等于 2 的要求,这样挂掉一台 master 后(不考虑 data),n 等于 2,满足参数,其他两个 master 节点都认为 master 挂掉之后开始重新选举.
master 节点上
node.master = true
node.data = false
discovery.zen.minimum_master_nodes = 2
data 节点上
node.master = false
node.data = true

集群搭建

所有之前先运行:sysctl -w vm.max_map_count=262144
我们只是测试,所以临时修改。永久修改使用下面
#防止 JVM 报错
echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p

准备 docker 网络

Docker 创建容器时默认采用 bridge 网络,自行分配 ip,不允许自己指定。

在实际部署中,我们需要指定容器 ip,不允许其自行分配 ip,尤其是搭建集群时,固定 ip
是必须的。
我们可以创建自己的 bridge 网络 : mynet,创建容器的时候指定网络为 mynet 并指定 ip
即可。
 
#查看网络模式
docker network ls;
#创建网络
docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1
mynet
#查看网络信息
docker network inspect mynet
以后使用--network=mynet --ip 172.18.12.x 指定 ip

docker-compose

设置权限:chmod -R 777 /

  elasticsearch1:

    # 使用elasticsearch:7.5.1镜像

    image: elasticsearch:7.17.2

    container_name: elasticsearch1

    # 设置环境变量:集群名称为elasticsearch,以确保节点互相发现

    environment:

      ES_JAVA_OPTS: "-Xms251m -Xmx251m"

    # 将9200端口映射到主机端口

    ports:

      - "9201:9201"

      - "9301:9301"

    # 挂载elasticsearch数据目录

    volumes:

      - /docker/elasticsearch1/data:/usr/share/elasticsearch/data

      - /docker/elasticsearch1/plugins:/usr/share/elasticsearch/plugins

      - /docker/elasticsearch1/logs:/usr/share/elasticsearch/logs

      - /docker/elasticsearch1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

    restart: always

    network_mode: "host"

  elasticsearch2:

    # 使用elasticsearch:7.5.1镜像

    image: elasticsearch:7.17.2

    container_name: elasticsearch2

    # 设置环境变量:集群名称为elasticsearch,以确保节点互相发现

    environment:

      ES_JAVA_OPTS: "-Xms251m -Xmx251m"

    # 将9200端口映射到主机端口

    ports:

      - "9202:9202"

      - "9302:9302"

    # 挂载elasticsearch数据目录

    volumes:

      - /docker/elasticsearch2/data:/usr/share/elasticsearch/data

      - /docker/elasticsearch2/plugins:/usr/share/elasticsearch/plugins

      - /docker/elasticsearch2/logs:/usr/share/elasticsearch/logs

      - /docker/elasticsearch2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

    restart: always

    network_mode: "host"

  elasticsearch3:

    # 使用elasticsearch:7.5.1镜像

    image: elasticsearch:7.17.2

    container_name: elasticsearch3

    # 设置环境变量:集群名称为elasticsearch,以确保节点互相发现

    environment:

      ES_JAVA_OPTS: "-Xms251m -Xmx251m"

    # 将9200端口映射到主机端口

    ports:

      - "9203:9203"

      - "9303:9303"

    # 挂载elasticsearch数据目录

    volumes:

      - /docker/elasticsearch3/data:/usr/share/elasticsearch/data

      - /docker/elasticsearch3/plugins:/usr/share/elasticsearch/plugins

      - /docker/elasticsearch3/logs:/usr/share/elasticsearch/logs

      - /docker/elasticsearch3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

    restart: always

    network_mode: "host"

elasticsearch.yml

master节点的配置

cluster.name: my-es #集群的名称,同一个集群该值必须设置成相同的

node.name: es-master-1 #该节点的名字

node.master: true #该节点有机会成为 master 节点

node.data: false #该节点可以存储数据

network.host: 0.0.0.0

http.host: 0.0.0.0 #所有 http 均可访问

http.port: 9201

transport.tcp.port: 9301

#discovery.zen.minimum_master_nodes: 2 #设置这个参数来保证集群中的节点可以知道其它 N 个有 master 资格的节点。官方推荐(N/2)+1

discovery.zen.ping_timeout: 10s #设置集群中自动发现其他节点时 ping 连接的超时时间

discovery.seed_hosts: ["192.168.1.145:9301", "192.168.1.145:9302", "192.168.1.145:9303"] #设置集群中的 Master 节点的初始列表,可以通过这些节点来自动发现其他新加入集群的节点,es7 的新增配置

cluster.initial_master_nodes: ["es-master-1", "es-master-2", "es-master-3"] #新集群初始时的候选主节点,es7 的新增配置

slave节点的配置 

cluster.name: my-es #集群的名称,同一个集群该值必须设置成相同的

node.name: es-master-1 #该节点的名字

node.master: false #该节点有机会成为 master 节点

node.data: true#该节点可以存储数据

network.host: 0.0.0.0

http.host: 0.0.0.0 #所有 http 均可访问

http.port: 9204

transport.tcp.port: 9304

#discovery.zen.minimum_master_nodes: 2 #设置这个参数来保证集群中的节点可以知道其它 N 个有 master 资格的节点。官方推荐(N/2)+1

discovery.zen.ping_timeout: 10s #设置集群中自动发现其他节点时 ping 连接的超时时间

discovery.seed_hosts: ["192.168.1.145:9301", "192.168.1.145:9302", "192.168.1.145:9303"] #设置集群中的 Master 节点的初始列表,可以通过这些节点来自动发现其他新加入集群的节点,es7 的新增配置

cluster.initial_master_nodes: ["es-master-1", "es-master-2", "es-master-3"] #新集群初始时的候选主节点,es7 的新增配置

 测试集群

http://192.168.1.145 :9201/_nodes/process?pretty 查看节点状况
http://192.168.1.145 :9201/_cluster/stats?pretty 查看集群状态
http://1192.168.1.145 :9201/_cluster/health?pretty 查看集群健康状况
http://192.168.1.145 :9202/_cat/nodes 查看各个节点信息
$ curl localhost:9200/_cat
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}

 


http://www.ppmy.cn/ops/145602.html

相关文章

EasyPlayer.js播放器RTSP windows播放器SDK API的接口说明

在数字化时代,流媒体播放器已成为信息传播和娱乐消遣的主流载体。随着技术的进步,流媒体播放器的核心技术和发展趋势不断演变,影响着整个行业的发展方向。 那么在实际运用中,关于EasyPlayer RTSP windows播放器SDK API接口要注意…

算法:LeetCode470_用Rand7()实现Rand10()_java实现

/*** LeetCode470_用Rand7()实现Rand10()*/ public class LeetCode470 extends SolBase {public int rand10() {int temp 40;while (temp > 40) {temp (rand7() - 1) * 7 rand7() - 1;}return temp % 10 1;} } 解题思路分析过程:

系统基础 -- AXI总线协议

AXI 总线详解 1. AXI的主要特点 高性能: 支持多主多从架构,可以实现高带宽和低延迟的数据传输。完全地址分离: 读操作和写操作使用独立的地址通道,支持并发。高灵活性: 支持非固定地址的突发传输(burst&a…

HDLBits训练4

时间&#xff1a;2024.12.23 Dff8ar 代码 注意敏感信号的写法 module top_module (input clk,input areset, // active high asynchronous resetinput [7:0] d,output [7:0] q );always(posedge clk or posedge areset)beginif(areset) q<8b0;else q<d;end endmodul…

FileLink为企业打造了一站式的跨网安全文件共享解决方案

在现代企业信息化建设中&#xff0c;内外网隔离已成为保障网络安全的重要手段。然而&#xff0c;这种隔离也带来了文件共享的诸多难题。如何在确保安全的前提下&#xff0c;实现高效、便捷的文件流通&#xff1f;FileLink 内外网文件共享平台应运而生&#xff0c;为企业打造了一…

LSTM实现天气模型训练与预测

要实现一个天气预测的模型&#xff0c;并确保该模型可以反复进行训练和更新&#xff0c;先设计&#xff1a; 设计方案 数据获取&#xff1a; 使用公开的天气数据API&#xff08;例如OpenWeather API或其他类似的API&#xff09;获取天气数据。确保数据以合适的格式&#xff08…

抖音小程序登录(前端通过tt.login获取code换取openId)

抖音小程序登录 抖音开放平台小程序登录&#xff1a; https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/tutorial/basic-ability/microapp-login 前端(通过tt.login获取code) 流程 静默登录依赖小程序 API tt.login&#xff0c;把tt.loginsuccess 回调…

PDF书籍《手写调用链监控APM系统-Java版》第7章 插件与链路的结合:Tomcat插件实现

本人阅读了 Skywalking 的大部分核心代码&#xff0c;也了解了相关的文献&#xff0c;对此深有感悟&#xff0c;特此借助巨人的思想自己手动用JAVA语言实现了一个 “调用链监控APM” 系统。本书采用边讲解实现原理边编写代码的方式&#xff0c;看本书时一定要跟着敲代码。 作者…