本文主要是将原来Elasticsearch 单节点改成两个节点组成的集群,以及查看集群信息。
原来的node-1(192.168.1.240),准备部署的node-2(192.168.1.231)组成一个集群。
Elasticsearch的 docker-compose.yml 内容如下:
version: '3'
services:
elasticsearch: # 服务名称
image: "elasticsearch:${ELK_VERSION}" # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=node-1 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.1.240 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts=192.168.1.240 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=192.168.1.240 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- $PWD/elasticsearch/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地,本地必须提前先有该文件,设置跨域, 否则head插件无法连接该节点
- $PWD/elasticsearch/data:/usr/share/elasticsearch/data # 存放数据的文件
- $PWD/elasticsearch/plugins:/usr/share/elasticsearch/plugins # 存放插件的文件
ports:
- 9200:9200 # http端口,可以直接浏览器访问
- 9300:9300 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
现在需要正在一台机器,做Elasticsearch 节点。
version: '3'
services:
elasticsearch: # 服务名称
image: "docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}" # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=node-1 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.1.240 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts=192.168.1.231 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- discovery.zen.ping_timeout=3s # 节点状态的最大响应时间,减少网络延迟的误判
- discovery.zen.minimum_master_nodes=1 # 集群中最小master数量
- cluster.initial_master_nodes=192.168.1.240,192.168.1.231 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- $PWD/elasticsearch/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地,本地必须提前先有该文件,设置跨域, 否则head插件无法连接该节点
- $PWD/elasticsearch/data:/usr/share/elasticsearch/data # 存放数据的文件
- $PWD/elasticsearch/plugins:/usr/share/elasticsearch/plugins # 存放插件的文件
ports:
- "9200:9200" # http端口,可以直接浏览器访问
- "9300:9300" # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
主要修改和新增了以下地方:
- discovery.seed_hosts=192.168.1.231 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- discovery.zen.ping_timeout=3s # 节点状态的最大响应时间,减少网络延迟的误判
- discovery.zen.minimum_master_nodes=1 # 集群中最小master数量
- cluster.initial_master_nodes=192.168.1.240,192.168.1.231 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
docker-compose up -d
node-2所在的机器IP为:192.168.1.231,和192.168.1.240属同一个网络,互通。
新建一个.env文件,添加以下内容:
ELK_VERSION=7.16.1
node-2的docker-compose 内容如下:
version: '3'
services:
elasticsearch: # 服务名称
image: "docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}" # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=node-2 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.1.231 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts=192.168.1.240 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- discovery.zen.ping_timeout=3s
- discovery.zen.minimum_master_nodes=1
- cluster.initial_master_nodes=node-1,node-2 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- $PWD/elasticsearch/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地,本地必须提前先有该文件,设置跨域, 否则head插件无法连接该节点
- $PWD/elasticsearch/data:/usr/share/elasticsearch/data # 存放数据的文件
- $PWD/elasticsearch/plugins:/usr/share/elasticsearch/plugins # 存放插件的文件
ports:
- "9200:9200" # http端口,可以直接浏览器访问
- "9300:9300" # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
mkdir -p elasticsearch/{data,plugins}
docker run -d --rm --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:7.16.1
docker cp elasticsearch:/usr/share/elasticsearch/config/ elasticsearch/
docker stop elasticsearch
chown -R 1000:root elasticsearch/config/
chown 1000:root elasticsearch/data/
chmod 775 elasticsearch/data/
chown 1000:root elasticsearch/plugins/
/etc/sysctl.conf 添加以下内容:
vm.max_map_count=655360
保存后,执行刷新命令生效:
sysctl -p
http.cors.enabled: true # 是否支持跨域
http.cors.allow-origin: "*" # 表示支持所有域名
docker-compose up -d
访问:http://192.168.1.240:9200/_cat/nodes?v 和 http://192.168.1.231:9200/_cat/nodes?v ,结果如下:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.1.231 45 92 20 1.19 0.44 0.21 cdfhilmrstw - node-2
192.168.1.240 21 84 93 3.62 0.97 0.60 cdfhilmrstw * node-1
看到 192.168.1.240 的 master 列是 * ,所以192.168.1.240是这个集群的master。
浏览器访问:http://192.168.1.240:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1653557959 09:39:19 es-cluster green 2 2 26 13 0 0 0 0 - 100.0%
解析如下:
cluster ,集群名称
status,集群状态 green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
node.total,代表在线的节点总数量
node.data,代表在线的数据节点的数量
shards, active_shards 存活的分片数量
pri,active_primary_shards 存活的主分片数量 正常情况下 shards的数量是pri的两倍。
relo, relocating_shards 迁移中的分片数量,正常情况为 0
init, initializing_shards 初始化中的分片数量 正常情况为 0
unassign, unassigned_shards 未分配的分片 正常情况为 0
pending_tasks,准备中的任务,任务指迁移分片等 正常情况为 0
max_task_wait_time,任务最长等待时间
active_shards_percent,正常分片百分比 正常情况为 100%
查询es集群状态、分片、索引
https://blog.51cto.com/u_15162069/2901128
查看es分片信息,模糊匹配:
浏览器打开:http://192.168.1.240:9200/_cat/shards/nginx*?v
index shard prirep state docs store ip node
nginx-access-log-2022.05.24 0 r STARTED 319 264.3kb 192.168.1.240 node-1
nginx-access-log-2022.05.24 0 p STARTED 319 264.3kb 192.168.1.231 node-2
nginx-access-log-2022.05.26 0 p STARTED 326068 53.9mb 192.168.1.240 node-1
nginx-access-log-2022.05.26 0 r STARTED 329318 74.5mb 192.168.1.231 node-2
nginx-access-log-2022.05.23 0 r STARTED 78953 12.3mb 192.168.1.240 node-1
nginx-access-log-2022.05.23 0 p STARTED 78953 12.3mb 192.168.1.231 node-2
nginx-access-log-2022.05.25 0 p STARTED 538 318.6kb 192.168.1.240 node-1
nginx-access-log-2022.05.25 0 r STARTED 538 318.6kb 192.168.1.231 node-2
解析如下:
index:所有名称
shard:分片数
prirep:分片类型,p=pri=primary为主分片,r=rep=replicas为复制分片
state:分片状态,STARTED为正常分片,INITIALIZING为异常分片
docs:记录数
store:存储大小
ip:es节点ip
node:es节点名称
查看所有分片信息
http://192.168.1.240:9200/_cat/shards
nginx-access-log-2022.05.25 0 p STARTED 538 318.6kb 192.168.1.240 node-1
nginx-access-log-2022.05.25 0 r STARTED 538 318.6kb 192.168.1.231 node-2
.apm-custom-link 0 p STARTED 0 226b 192.168.1.240 node-1
.apm-custom-link 0 r STARTED 0 226b 192.168.1.231 node-2
.geoip_databases 0 p STARTED 41 61.8mb 192.168.1.240 node-1
.geoip_databases 0 r STARTED 41 61.8mb 192.168.1.231 node-2
nginx-access-log-2022.05.24 0 r STARTED 319 264.3kb 192.168.1.240 node-1
nginx-access-log-2022.05.24 0 p STARTED 319 264.3kb 192.168.1.231 node-2
nginx-access-log-2022.05.23 0 r STARTED 78953 12.3mb 192.168.1.240 node-1
nginx-access-log-2022.05.23 0 p STARTED 78953 12.3mb 192.168.1.231 node-2
.async-search 0 p STARTED 0 22.4kb 192.168.1.240 node-1
.async-search 0 r STARTED 0 22.4kb 192.168.1.231 node-2
nginx-access-log-2022.05.26 0 p STARTED 326068 53.9mb 192.168.1.240 node-1
nginx-access-log-2022.05.26 0 r STARTED 329318 74.5mb 192.168.1.231 node-2
.kibana_7.16.1_001 0 p STARTED 414 2.4mb 192.168.1.240 node-1
.kibana_7.16.1_001 0 r STARTED 414 2.4mb 192.168.1.231 node-2
.kibana_task_manager_7.16.1_001 0 p STARTED 17 867.5kb 192.168.1.240 node-1
.kibana_task_manager_7.16.1_001 0 r STARTED 17 673.9kb 192.168.1.231 node-2
.ds-ilm-history-5-2022.05.23-000001 0 r STARTED 192.168.1.240 node-1
.ds-ilm-history-5-2022.05.23-000001 0 p STARTED 192.168.1.231 node-2
.apm-agent-configuration 0 p STARTED 0 226b 192.168.1.240 node-1
.apm-agent-configuration 0 r STARTED 0 226b 192.168.1.231 node-2
.ds-.logs-deprecation.elasticsearch-default-2022.05.23-000001 0 p STARTED 192.168.1.240 node-1
.ds-.logs-deprecation.elasticsearch-default-2022.05.23-000001 0 r STARTED 192.168.1.231 node-2
.kibana-event-log-7.16.1-000001 0 r STARTED 192.168.1.240 node-1
.kibana-event-log-7.16.1-000001 0 p STARTED 192.168.1.231 node-2
浏览器打开:http://192.168.1.240:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .geoip_databases c7jwW_aFQbS8qFLAoVW3BQ 1 1 41 63 123.6mb 61.8mb
green open nginx-access-log-2022.05.26 m6lp1Q6xTTi3RZKMXve2Pw 1 1 401024 0 135.1mb 60.5mb
green open .apm-custom-link MXLP40JCQfSQGyN4NupfPg 1 1 0 0 452b 226b
green open nginx-access-log-2022.05.25 9_aje1QRTgG79C7AQwcA0A 1 1 538 0 637.3kb 318.6kb
green open nginx-access-log-2022.05.24 Tk4oyfbtQom3lYIMNRBwDA 1 1 319 0 528.7kb 264.3kb
green open .kibana_7.16.1_001 u5boJ_cGSkWl-fytiIzQfw 1 1 415 14 4.8mb 2.4mb
green open nginx-access-log-2022.05.23 z9k1cN9tRzSMtnUsvJ-XIQ 1 1 78953 0 24.6mb 12.3mb
green open .kibana_task_manager_7.16.1_001 YZFRtMthSQ6pITFC4E1Msw 1 1 17 6139 1.7mb 1005.1kb
green open .apm-agent-configuration MsntlFjaTniEZn2VaZoRUw 1 1 0 0 452b 226b
green open .async-search TY5KsBwMQjKk_-DXv6i4-g 1 1 0 0 44.9kb 22.4kb
解析如下:
health: green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
pri:primary缩写,主分片数量
rep:副分片数量
docs.count: Lucene 级别的文档数量
docs.deleted: 删除的文档
store.size:全部分片大小(包含副本)
pri.store.size:主分片大小
浏览器打开:http://192.168.1.240:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_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/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
/_cat/ml/anomaly_detectors
/_cat/ml/anomaly_detectors/{job_id}
/_cat/ml/trained_models
/_cat/ml/trained_models/{model_id}
/_cat/ml/datafeeds
/_cat/ml/datafeeds/{datafeed_id}
/_cat/ml/data_frame/analytics
/_cat/ml/data_frame/analytics/{id}
/_cat/transforms
/_cat/transforms/{transform_id}
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
我遇到了这个奇怪的错误.../Users/gideon/Documents/ca_ruby/rubytactoe/lib/player.rb:13:in`gets':Isadirectory-spec(Errno::EISDIR)player_spec.rb:require_relative'../spec_helper'#theuniverseisvastandinfinite...itcontainsagame....butnoplayersdescribe"tictactoegame"docontext"theplayerclass"doit"musthaveahumanplay
我的ruby脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende
不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a
我使用raise(ConfigurationError.new(msg))引发错误我试着用rspec测试一下:expect{Base.configuration.username}.toraise_error(ConfigurationError,message)但这行不通。我该如何测试呢?目标是匹配message。 最佳答案 您可以使用正则表达式匹配错误消息:it{expect{Foo.bar}.toraise_error(NoMethodError,/private/)}这将检查NoMethodError是否由privateme