LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

LOFTER-网易轻博

elasticsearch

2411浏览    36参与
adolfjap

elasticsearch 判断数组是否为空

$rowArray = array();

$rowArray['script'] = array();

$rowArray['script']['script']["inline"] = "doc['illness_id'].values.length > 0";

$rowArray['script']['script']["lang"] = "painless";

$whereArray['bool']['must_not'][] = ...

$rowArray = array();

$rowArray['script'] = array();

$rowArray['script']['script']["inline"] = "doc['illness_id'].values.length > 0";

$rowArray['script']['script']["lang"] = "painless";

$whereArray['bool']['must_not'][] = $rowArray;


yangli-1128

docker 安装 ElasticSearch

https://www.cnblogs.com/killer21/p/12053541.html

1.安装ElasticSearch

docker run -d --name elasticsearch -p 9201:9200 -p 9301:9300 -e "discovery.type=single-node" elasticsearch:7.8.0


2.安装ElasticSearch-Head

docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head...

https://www.cnblogs.com/killer21/p/12053541.html

1.安装ElasticSearch

docker run -d --name elasticsearch -p 9201:9200 -p 9301:9300 -e "discovery.type=single-node" elasticsearch:7.8.0


2.安装ElasticSearch-Head

docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5-alpine


3.配置ElasticSearch跨域

进入es,修改配置

进入ES : docker exec -it 2c5 bash         //2c5为CONTAINER ID

修改配置文件:文件 config/elasticsearch.yml

增加内容:

http.cors.enabled: true

http.cors.allow-origin: "*"

保存

4.重启ElasticSearch


yangli-1128

ElasticSearch dotnetcore

https://blog.csdn.net/qq_38261174/article/details/97911363


安装 Nest

        class Tweet

        {

            public int Id { get; set; }...


https://blog.csdn.net/qq_38261174/article/details/97911363


安装 Nest

        class Tweet

        {

            public int Id { get; set; }

            public string User { get; set; }

            public DateTime PostDate { get; set; }

            public string Message { get; set; }

        }


1.插入数据

                var node = new Uri("http://118.31.127.222:9201/");

                var settings = new Nest.ConnectionSettings(node);

                var client = new Nest.ElasticClient(settings);


            var tweet = new Tweet

            {

                Id = 4,

                User = "yangli",

                PostDate = new DateTime(2009, 11, 16),

                Message = "ready go"

            };

            var response = await client.IndexAsync(tweet, idx => idx.Index("mytweetindex"));


2.查询数据

                var node = new Uri("http://118.31.127.222:9201/");

                var settings = new Nest.ConnectionSettings(node);

                var client = new Nest.ElasticClient(settings);


                var v = await client.SearchAsync<SearchGoods>(x =>

                {

                    return

                    x.Index("mytweetindex")

                    // .Query(q => q.Match(m => m.Field(f => f.User).Query("*kim* *yang*")))

                    .Query(q => q.MultiMatch(m => m.Fields(fd => fd.Fields(f => f.User, f => f.Message)).Query("1神23456789 yangli ready")))

                    .Query(q => q.DateRange(c => c.Field(f => f.PostDate).LessThanOrEquals("2009-11-15").GreaterThanOrEquals("2009-11-15"))) //范围查询

                    ;

                }

            );

//输出查询结果

Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(v.Documents.ToList()));

adolfjap

as the final mapping would have more than 1 type

Rejecting mapping update to [index1] as the final mapping would have more than 1 type: [type1,type2]


elasticsearch6 以后一个index只能有一个type,也就是一个库一个表

Rejecting mapping update to [index1] as the final mapping would have more than 1 type: [type1,type2]


elasticsearch6 以后一个index只能有一个type,也就是一个库一个表

zhmg23

Elasticsearch状态为red产生大量UNASSIGNED解决办法

昨天测试环境Elasticsearch集群状态突然为red了,原因是新起了一个集群,集群配置未及时调整,跟这个集群融入到一起,导致原集群状态产生大量UNASSIGNED。

1、简单的说一下Elasticsearch的三种状态:

green

所有的主分片和副本分片都已分配。你的集群是 100% 可用的。

yellow

所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。

red

至少一个...

昨天测试环境Elasticsearch集群状态突然为red了,原因是新起了一个集群,集群配置未及时调整,跟这个集群融入到一起,导致原集群状态产生大量UNASSIGNED。

1、简单的说一下Elasticsearch的三种状态:

green

所有的主分片和副本分片都已分配。你的集群是 100% 可用的。

yellow

所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。

red

至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。


2、简单过程回顾

Elasticsearch状态异常时,通过如下命令,查看一下

# curl -s 'localhost:8200/_cat/shards' | fgrep UNASSIGNED


注:第一列表示索引名,第二列表示分片编号,第三列p是主分片,r是副本

unassigned_shards 是已经在集群状态中存在的分片,但是实际在集群里又找不着。通常未分配分片的来源是未分配的副本。比如,一个有 5 分片和 1 副本的索引,在单节点集群上,就会有 5 个未分配副本分片。如果你的集群是 red 状态,也会长期保有未分配分片(因为缺少主分片)。


解决办法一:

手动删除这些(生产环境谨慎):

curl -XDELETE 'localhost:8200/user_re_3/'

curl -XDELETE 'localhost:8200/user_error_2/'



解决办法二:

重新分配索引

#!/bin/bash

range=2

IFS=$'\n'

for line in $(curl -s 'localhost:8200/_cat/shards' | fgrep UNASSIGNED); do

  INDEX=$(echo $line | (awk '{print $1}'))

  SHARD=$(echo $line | (awk '{print $2}'))

  number=$RANDOM

  let "number %= ${range}"


  curl -H "Content-Type: application/json" -XPOST http://localhost:8200/_cluster/reroute? -d '{

  "commands" : [ {

  "allocate_empty_primary" :

  {

    "index" : '\"${INDEX}\"',

    "shard" : '\"${SHARD}\"',

    "node" : "master_node",

    "accept_data_loss" : true

  }

}

]

}'

done


注:master_node为你的集群主节点



解决办法三:

新开启一个节点,此方案未验证,前面两个都已验证,一般推荐方案二

新启动一个节点,自动恢复后,在关闭


zhmg23

Prometheus +Grafana监控Elasticsearch集群

1、监控说明

监控原理跟我上一遍记录prometheus监控redis类似,通过elasticsearch_exporter,对Elasticsearch集群进行监控


2、下载安装elasticsearch_exporter

https://github.com/justwatchcom/elasticsearch_exporter

3、解压配置启动

cd /usr/local/elasticsearch_exporter

nohup ./elasticsearch_exporter --es.uri http://localhost:9200 &...

1、监控说明

监控原理跟我上一遍记录prometheus监控redis类似,通过elasticsearch_exporter,对Elasticsearch集群进行监控


2、下载安装elasticsearch_exporter

https://github.com/justwatchcom/elasticsearch_exporter

3、解压配置启动

cd /usr/local/elasticsearch_exporter

nohup ./elasticsearch_exporter --es.uri http://localhost:9200 &

注:如果多个集群,可以加上参数--web.listen-address=":9115"


4、配置Prometheus

vim prometheus.yml

  #采集ES集群监控数据

  - job_name: ES_cluster_9200

    static_configs:

      - targets: ['10.31.65.129:9114','10.31.65.130:9114','10.31.65.131:9114']

        labels:

          instance: elasticsearch_cluster_9200


重启Prometheus

systemctl  restart  prometheus


5、下载Grafana模板并导入

Grafana Dashboard:https://grafana.com/grafana/dashboards/2322



导入json



稍微等一会,就会有数据






adolfjap

elasticsearch should

        $whereArray = array();

        $whereArray['bool'] = array();

        $whereArray['bool']['must'] = array();


    $rowArray = array();...


        $whereArray = array();

        $whereArray['bool'] = array();

        $whereArray['bool']['must'] = array();


    $rowArray = array();

    $rowArray['term'] = array();

    $rowArray['term']['status'] = intval(1);

    $whereArray['bool']['must'][] = $rowArray;


    $rowArray = array();

    $rowArray['term'] = array();

    $rowArray['term']['is_col'] = intval(0);

    $whereArray['bool']['should'][] = $rowArray;


    $rowArray = array();

    $rowArray['term'] = array();

    $rowArray['term']['is_edit'] = intval(1);

    $whereArray['bool']['should'][] = $rowArray;

    $whereArray['bool']['minimum_should_match'] = 1;

minimum_should_match最少有几个条件符合,如果should里有联合条件类似 or (a=b or c=d)

需要在should里再加bool['should']

走过岁月......

Wazuh error: [FORBIDDEN/12/index read-only

报错内容

Health Check. 3002 - [cluster_block_exception] index [.wazuh] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]; (/api/check-stored-api)


原因:一旦在存储超过95%的磁盘中的节点上分配了一个或多个分片的任何索引,该索引将被强制进入只读模式

解决:

# curl -XPUT -H "Content-Type: application/json...

报错内容

Health Check. 3002 - [cluster_block_exception] index [.wazuh] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]; (/api/check-stored-api)


原因:一旦在存储超过95%的磁盘中的节点上分配了一个或多个分片的任何索引,该索引将被强制进入只读模式

解决:

# curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": false}'


# curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null'

OK!

走过岁月......

wazuh中elasticsearch 出错的解决

wazuh server运行中很意外地elasticsearch服务起不来了,重装数次无效

# systemctl status elasticsearch

● elasticsearch.service - Elasticsearch

   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)

   Active: failed (Result: exit-code) since Wed 2019...

wazuh server运行中很意外地elasticsearch服务起不来了,重装数次无效

# systemctl status elasticsearch

● elasticsearch.service - Elasticsearch

   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)

   Active: failed (Result: exit-code) since Wed 2019-09-11 11:08:50 CST; 621ms ago

     Docs: http://www.elastic.co

  Process: 57259 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=1/FAILURE)

Main PID: 57259 (code=exited, status=1/FAILURE)

Sep 11 11:08:46 wazuh-server systemd[1]: Started Elasticsearch.

Sep 11 11:08:47 wazuh-server elasticsearch[57259]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

Sep 11 11:08:50 wazuh-server systemd[1]: elasticsearch.service: main process exited, code=exited, status=1/FAILURE

Sep 11 11:08:50 wazuh-server systemd[1]: Unit elasticsearch.service entered failed state.

Sep 11 11:08:50 wazuh-server systemd[1]: elasticsearch.service failed.

根据提示,重新安装了新版本jdk也不行

查看elasticsearch运行日志

# cat /var/log/elasticsearch/elasticsearch.log

[2019-09-11T11:08:50,096][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main]

org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: failed to obtain node locks, tried [[/var/lib/elasticsearch]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?

        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-7.3.1.jar:7.3.1]

        at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.3.1.jar:7.3.1]

Caused by: java.lang.IllegalStateException: failed to obtain node locks, tried [[/var/lib/elasticsearch]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?

        at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:299) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.node.Node.<init>(Node.java:278) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.node.Node.<init>(Node.java:258) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:221) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:221) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.3.1.jar:7.3.1]

        ... 6 more

Caused by: java.io.IOException: failed to obtain lock on /var/lib/elasticsearch/nodes/0

        at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:221) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:269) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.node.Node.<init>(Node.java:278) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.node.Node.<init>(Node.java:258) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:221) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:221) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) ~[elasticsearch-7.3.1.jar:7.3.1]

        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.3.1.jar:7.3.1]

        ... 6 more

Caused by: java.nio.file.AccessDeniedException: /var/lib/elasticsearch/nodes/0/node.lock

        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) ~[?:?]

        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[?:?]

        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) ~[?:?]

        at sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:182) ~[?:?]

        at java.nio.channels.FileChannel.open(FileChannel.java:292) ~[?:?]

        at java.nio.channels.FileChannel.open(FileChannel.java:345) ~[?:?]


关键语句【maybe these locations are not writable or multiple nodes were started without increasing】

有可能是权限问题,给相关文件夹授权

# chmod -R 775 /var/lib/elasticsearch/

重启服务

# systemctl daemon-reload

# systemctl restart elasticsearch

搞定了!

走过岁月......

filebeat setup --index-management -E setup.templat

安装elasticsearch时发生以下命令执行错误

# filebeat setup --index-management -E setup.template.json.enabled=false

Exiting: Couldn't connect to any of the configured Elasticsearch hosts. Errors: [Error connection to Elasticsearch http://10.10.10.7:9200: Get http://10.10.10.7:9200: dial tcp 10.10...

安装elasticsearch时发生以下命令执行错误

# filebeat setup --index-management -E setup.template.json.enabled=false

Exiting: Couldn't connect to any of the configured Elasticsearch hosts. Errors: [Error connection to Elasticsearch http://10.10.10.7:9200: Get http://10.10.10.7:9200: dial tcp 10.10.10.7:9200: connect: connection refused]

解决方法

# filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

参考官网

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-template.html


adolfjap

elasticsearch update_by_query

curl -X POST "http://host:port/database/table/_update_by_query" -H 'Content-Type: application/json' -d'

{

   "query": {

"bool" : {"must_not": {"term":{"site_id":1}}}...


curl -X POST "http://host:port/database/table/_update_by_query" -H 'Content-Type: application/json' -d'

{

   "query": {

"bool" : {"must_not": {"term":{"site_id":1}}}

    },

  "script":{

    "inline": "ctx._source.site_id = 1",

    "lang": "painless"

  }

}

'



Saxon

Elasticsearch,Filebeat,Kibana部署,添加图表及elastalert报警

服务端安装Elasticsearch和Kibana(需要安装openjdk1.8以上)

安装方法:https://www.elastic.co
以Ubuntu为例:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -sudo apt-get install apt-transport-httpsecho "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo...

服务端安装Elasticsearch和Kibana(需要安装openjdk1.8以上)

安装方法:https://www.elastic.co
以Ubuntu为例:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -sudo apt-get install apt-transport-httpsecho "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.listapt-get updateapt-get install elasticsearchapt-get install kibanaelasticsearch配置 

cat /etc/elasticsearch/elasticsearch.yml

path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchnetwork.host: 172.16.80.28http.port: 9200discovery.zen.ping.unicast.hosts: ["172.16.80.28","172.16.80.155"] 

附件有文件elasticsearch.map

 Kibana配置

cat /etc/kibana/kibana.yml

server.port: 5601server.host: "172.16.80.28"elasticsearch.url: "http://172.16.80.28:9200"Elastalert(需要Python2.7) 

下载 https://github.com/Yelp/elastalert/releases

进入elastalert目录

pip install -r requirements.txtpython setup.py installelastalert-create-index

前台运行elastalert

python -m elastalert.elastalert --verbose --rule rules/my_rule.yaml

安装参考:
https://elastalert.readthedocs.io/en/latest/running_elastalert.html#downloading-and-configuring
https://blog.csdn.net/df007df/article/details/54773391

elastalert配置 

cat /etc/elastalert/rules/my_rule.yaml

es_host: 172.16.80.28es_port: 9200name: filebeat rulestype: frequencyindex: filebeat*num_events: 5timeframe:  hours: 1filter:- query:    query_string:      query: "message: *error*"alert:- "email"email:- "aaa@qq.com"- "bbb@qq.com"alert_text: "Ref Log http://172.16.80.28:5601/app/kibana"smtp_host: smtp.exmail.qq.comsmtp_port: 25smtp_ssl: falsesmtp_auth_file: /etc/elastalert/rules/smtp_auth_file.yamlfrom_addr:  aaa@qq.com

cat /etc/elastalert/rules/smtp_auth_file.yaml

user: "aaa@qq.com"password: "邮箱密码"   

cat /etc/elastalert/config.yaml

rules_folder: /etc/elastalert/rulesrun_every:  minutes: 1buffer_time:  minutes: 15es_host: 172.16.80.28es_port: 9200s_url_prefix: elasticsearchwriteback_index: elastalert_statusalert_time_limit:  days: 2  elastalert配置注解rules_folder:用来加载下一阶段rule的设置,默认是example_rulesrun_every:用来设置定时向elasticsearch发送请求buffer_time:用来设置请求里时间字段的范围,默认是45分钟es_host:elasticsearch的host地址es_port:elasticsearch 对应的端口号use_ssl:可选的,选择是否用SSL连接es,true或者falsees_username:es认证的usernamees_password:es认证的passwordwriteback_index:elastalert产生的日志在elasticsearch中的创建的索引alert_time_limit:失败重试的时间限制 

告警参考
https://blog.csdn.net/gamer_gyt/article/details/52917116
https://elastalert.readthedocs.io/en/latest/ruletypes.html

客户端安装Filebeat安装 

以Ubuntu为例:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -sudo apt-get install apt-transport-httpsecho "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.listapt-get updateapt-get install filebeatfilebeat配置 

cat /etc/filebeat/filebeat.yml

filebeat.prospectors:- type: log  enabled: true  paths:    - /var/log/nginx/*.log  path: ${path.config}/modules.d/*.yml  reload.enabled: falsesetup.template.settings:  index.number_of_shards: 3setup.kibana:  host: "172.16.80.28:5601"output.elasticsearch:  hosts: ["172.16.80.28:9200"]EFK备注 

日志位置 /var/lib/elasticsearch/nodes/
日志大小 暂时为345Mb
日志轮循 暂时不知道在哪设置

elasticsearch.map内容


# uint mapping

{

   "settings" : {

      "index" : {

         "number_of_replicas" : 1,

         "number_of_shards" : 5

      }

   },

   "mappings" : {

      "values" : {

         "properties" : {

            "itemid" : {

               "type" : "long"

            },

            "clock" : {

               "format" : "epoch_second",

               "type" : "date"

            },

            "value" : {

               "type" : "long"

            }

         }

      }

   }

}

 

# dbl mapping

{

   "settings" : {

      "index" : {

         "number_of_replicas" : 1,

         "number_of_shards" : 5

      }

   },

   "mappings" : {

      "values" : {

         "properties" : {

            "itemid" : {

               "type" : "long"

            },

            "clock" : {

               "format" : "epoch_second",

               "type" : "date"

            },

            "value" : {

               "type" : "double"

            }

         }

      }

   }

}

 

# str mapping

{

   "settings" : {

      "index" : {

         "number_of_replicas" : 1,

         "number_of_shards" : 5

      }

   },

   "mappings" : {

      "values" : {

         "properties" : {

            "itemid" : {

               "type" : "long"

            },

            "clock" : {

               "format" : "epoch_second",

               "type" : "date"

            },

            "value" : {

               "fields" : {

                  "analyzed" : {

                     "index" : true,

                     "type" : "text",

                     "analyzer" : "standard"

                  }

               },

               "index" : false,

               "type" : "text"

            }

         }

      }

   }

}

 

# text mapping

{

   "settings" : {

      "index" : {

         "number_of_replicas" : 1,

         "number_of_shards" : 5

      }

   },

   "mappings" : {

      "values" : {

         "properties" : {

            "itemid" : {

               "type" : "long"

            },

            "clock" : {

               "format" : "epoch_second",

               "type" : "date"

            },

            "value" : {

               "fields" : {

                  "analyzed" : {

                     "index" : true,

                     "type" : "text",

                     "analyzer" : "standard"

                  }

               },

               "index" : false,

               "type" : "text"

            }

         }

      }

   }

}

 

# log mapping

{

   "settings" : {

      "index" : {

         "number_of_replicas" : 1,

         "number_of_shards" : 5

      }

   },

   "mappings" : {

      "values" : {

         "properties" : {

            "itemid" : {

               "type" : "long"

            },

            "clock" : {

               "format" : "epoch_second",

               "type" : "date"

            },

            "value" : {

               "fields" : {

                  "analyzed" : {

                     "index" : true,

                     "type" : "text",

                     "analyzer" : "standard"

                  }

               },

               "index" : false,

               "type" : "text"

            }

         }

      }

   }

}


参考文献:https://www.cnblogs.com/ddif/p/9085051.html

zhmg23

Elasticsearch集群迁移状态问题

上周因业务需要,需要把业务从H机房迁移至B机房,因为是离线数据,所以迁移也比较简单,直接节点及相差数据拷贝过去,然后环境准备一样,即可启动,完成迁移,可是在B机房启动ES集群后,发现状态不对

$ curl -XGET http://172.22.7.11:9200/_cluster/health\?pretty

{

  "cluster_name" : "BIG-log-sale",

  "status" : "red",...


上周因业务需要,需要把业务从H机房迁移至B机房,因为是离线数据,所以迁移也比较简单,直接节点及相差数据拷贝过去,然后环境准备一样,即可启动,完成迁移,可是在B机房启动ES集群后,发现状态不对

$ curl -XGET http://172.22.7.11:9200/_cluster/health\?pretty

{

  "cluster_name" : "BIG-log-sale",

  "status" : "red",

  "timed_out" : false,

  "number_of_nodes" : 2,

  "number_of_data_nodes" : 2,

  "active_primary_shards" : 71,

  "active_shards" : 119,

  "relocating_shards" : 0,

  "initializing_shards" : 0,

  "unassigned_shards" : 27,

  "delayed_unassigned_shards" : 0,

  "number_of_pending_tasks" : 0,

  "number_of_in_flight_fetch" : 0,

  "task_max_waiting_in_queue_millis" : 0,

  "active_shards_percent_as_number" : 81.5068493150685

}

Es中用三种颜色状态表示:green,yellow,red。

Green:所有主分片和副本分片都可用;

Yellow:所有主分片可用,但不是所有副本分片都可用;

Red:不是所有的主分片都可用。

我的这个问题的解决办法可以找到master节点,执行reroute,但我没有这么做,我怀疑可能数据拷贝的也有问题,所以想先重新拷贝一下数据,如果不行,在执行reroute。

重新拷贝之后,在启动观察状态,果然好了

$ curl '172.22.7.11: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

1526537559 14:12:39  BIG-log-sale green           2         2    146  97    0    0        0             0                  -                100.0%


参考:

https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-shards.html


走过岁月......
碳基体

大数据之elasticsearch集群搭建与基本使用-渗透人员入门

我也开始玩集群了,写此文章来纪念


一、安装手册

第一步:安装java 7(最低版本java 7)

第二步:安装及配置elasticsearch(下载最新版)

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.5.1.tar.gz

tar zxvf elasticsearch-1.5.1.tar.gz

cd elasticsearch-1.5.1


修改二进制文件,指定JAVA_HOME

(1)elasticsearch

vim bin/elasticsearch...

我也开始玩集群了,写此文章来纪念


一、安装手册

第一步:安装java 7(最低版本java 7)

第二步:安装及配置elasticsearch(下载最新版)

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.5.1.tar.gz

tar zxvf elasticsearch-1.5.1.tar.gz

cd elasticsearch-1.5.1


修改二进制文件,指定JAVA_HOME

(1)elasticsearch

vim bin/elasticsearch

修改

JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64(替换为实际的JAVA安装目录)


(2)plugin

vim bin/plugin

修改

JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64(替换为实际的JAVA安装目录)


修改配置文件

vim config/elasticsearch.yml

做如下修改

cluster.name: elasticsearch-tanjiti  配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群

node.name: "tanjiti No.00" 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。

index.number_of_shards: 3 设置默认索引分片个数,默认为5片。

path.logs: /home/elasticsearch-1.5.1/logs 设置日志文件的存储路径,默认是es根目录下的logs文件夹

path.plugins: /home/elasticsearch-1.5.1/plugins设置插件的存放路径,默认是es根目录下的plugins文件夹

#bootstrap.mlockall: true  设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,因为发现开启这个选项会莫名的错误,所以选择了关闭,依靠把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个足够大的值来保证机器有足够的内存分配给es。

transport.tcp.port: 9310  设置节点间交互的tcp端口,默认是9300。

http.port: 8765 设置对外服务的http端口,默认为9200

discovery.zen.ping.timeout: 30s 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。

discovery.zen.ping.multicast.enabled: false 设置是否打开多播发现节点,默认是false,开启单播模式

discovery.zen.ping.unicast.hosts: ["xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"]  设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点

内存调整

vim bin/elasticsearch.in.sh

修改

if [ "x$ES_MIN_MEM" = "x" ]; then

    ES_MIN_MEM=256m #调整为机器内存的一半

fi

if [ "x$ES_MAX_MEM" = "x" ]; then

    ES_MAX_MEM=1g#调整为机器内存的一半 

fi



第三步:下载并安装插件 (插件非常多,以下列出我喜欢的,可以有选择性的安装)


(1) marvel

远程安装方式:

 bin/plugin -i elasticsearch/marvel/latest

本地安装方式:

wget https://download.elasticsearch.org/elasticsearch/marvel/marvel-latest.zip

bin/plugin -i marvel -u file:/home/elasticsearch-1.5.1/marvel-latest.zip

在启动后,可以通过以下方式查看elasticsearch运行情况

http://xxx.xxx.xxx.xxx:8765/_plugin/marvel/ 



(2) elasticsearch service [非常喜欢]

https://github.com/elastic/elasticsearch-servicewrapper

将service文件放置在elasticsearch bin 目录下

mv elasticsearch-servicewrapper-master/service/ bin/

配置bin/service/elasticsearch.conf

vim bin/service/elasticsearch.conf

按需作如下修改

set.default.ES_HOME=/home/elasticsearch-1.5.1 #替换为实际的elasticsearch路径

wrapper.java.command=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java #替换为实际的java二进制文件路径


(3). ElasticHQ [非常喜欢]

 http://www.elastichq.org/

bin/plugin -i royrusso/elasticsearch-HQ -u file:/home/elasticsearch-1.5.1/royrusso-elasticsearch-HQ-603ae9e.zip


在启动后,可以通过以下方式查看elasticsearch运行情况

http://xxx.xxx.xxx.xxx:8765/_plugin/HQ/


(4) elasticsearch-head [比较喜欢]

https://github.com/mobz/elasticsearch-head

bin/plugin -i mobz/elasticsearch-head -u file:/home/elasticsarch-1.5.1/elasticsearch-head-master.zip


在启动后,可以通过以下方式查看elasticsearch运行情况

http://xxx.xxx.xxx.xxxx:8765/_plugin/head



第四步:启动elasticsearch

bin/service/elasticsearch  start|stop|console|install|remove


start 在后台运行elasticsearch

stop 停止elasticsearch

console 在前台运行elasticsearch

install elasticsearch自启动

remove elasticsearch取消自启动


二、基本操作


首先我们批量导入示例数据——莎士比亚全集

(参照http://kibana.logstash.es/content/v3/10-minute-walk-through.html kibana 3指南10分钟入门

wget http://www.elasticsearch.org/guide/en/kibana/3.0/snippets/shakespeare.json

curl -XPUT http://localhost:8765/_bulk --data-binary @shakespeare.json

more shakespeare.json 察看存储内容
{"index":{"_index":"shakespeare","_type":"act","_id":0}}
{"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
{"index":{"_index":"shakespeare","_type":"scene","_id":1}}


接下来我们来通过与熟悉的关系数据库来对比elasticsearch的数据组成

(1)数据组成:元数据+实际数据

相当于察看数据库的模式定义

http localhost:8765/shakespeare/

返回

{
    "shakespeare": {
        "mappings": {
            "act": {
                "properties": {
                    "line_id": {
                        "type": "long"
                    }, 
                    "line_number": {
                        "type": "string"
                    }, 
                    "play_name": {
                        "type": "string"
                    }, 
                    "speaker": {
                        "type": "string"
                    }, 
                    "speech_number": {
                        "type": "long"
                    }, 
                    "text_entry": {
                        "type": "string"
                    }
                }
            }, 
            "line": {
                "properties": {
                    "line_id": {
                        "type": "long"
                    }, 
                    "line_number": {
                        "type": "string"
                    }, 
                    "play_name": {
                        "type": "string"
                    }, 
                    "speaker": {
                        "type": "string"
                    }, 
                    "speech_number": {
                        "type": "long"
                    }, 
                    "text_entry": {
                        "type": "string"
                    }
                }
            }, 
            "scene": {
                "properties": {
                    "line_id": {
                        "type": "long"
                    }, 
                    "line_number": {
                        "type": "string"
                    }, 
                    "play_name": {
                        "type": "string"
                    }, 
                    "speaker": {
                        "type": "string"
                    }, 
                    "speech_number": {
                        "type": "long"
                    }, 
                    "text_entry": {
                        "type": "string"
                    }
                }
            }
        }, 
        "settings": {
            "index": {
                "creation_date": "1429691321987", 
                "number_of_replicas": "1", 
                "number_of_shards": "5", 
                "uuid": "rrCmsKKcSDyLSpLFVnQnbg", 
                "version": {
                    "created": "1040299"
                }
            }
        }
    }
}


我们用熟悉的关系数据库来进行对比,映射关系如下

   


示例中,索引名为shakespeare(等同于数据库名为shakespeare)

类型有3个:act, line, scene (等同于表名为act, line, scene)

字段组成(等同于表的结构)

  

(2)简单检索 

示例1:通过index+type+文档_id来察看内容

格式:host:port/index_name/type_name/_id

http localhost:8108/shakespeare/line/2

结果如下:

{
    "_id": "2", 
    "_index": "shakespeare", 
    "_source": {
        "line_id": 3, 
        "line_number": "", 
        "play_name": "Henry IV", 
        "speaker": "", 
        "speech_number": "", 
        "text_entry": "Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL of WESTMORELAND, SIR WALTER BLUNT, and others"
    }, 
    "_type": "line", 
    "_version": 1, 
    "found": true
}

elasticsearch的数据由两部分组成:文档元数据(例如_id)与文档数据

_source 字段里的内容为文档数据(真实存储的数据),我们可以使用如下方法只读取实际数据

http localhost:8108/shakespeare/line/2/_source

结果如下:


{
    "line_id": 3, 
    "line_number": "", 
    "play_name": "Henry IV", 
    "speaker": "", 
    "speech_number": "", 
    "text_entry": "Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL of WESTMORELAND, SIR WALTER BLUNT, and others"
}



示例2:指定字段field进行搜索,例如搜索play_name字段为Romeo and Juliet

http localhost:8108/shakespeare/_search?q=play_name:"Romeo and Juliet"

结果如下(截取部分):

{
    "_shards": {
        "failed": 0, 
        "successful": 5, 
        "total": 5
    }, 
    "hits": {
        "hits": [
            {
                "_id": "86748", 
                "_index": "shakespeare", 
                "_score": 3.3792284, 
                "_source": {
                    "line_id": 86749, 
                    "line_number": "", 
                    "play_name": "Romeo and Juliet", 
                    "speaker": "JULIET", 
                    "speech_number": 19, 
                    "text_entry": "Exeunt"
                }, 
                "_type": "line"
            }, 


(3)复杂搜索

Elasticsearch支持丰富而灵活的查询语言——Query DSL。 在学习之前,我们可以先熟悉一下Lucene查询语法(其实和使用google搜索引擎区别不大)


支持AND,OR,NOT

查询语句"apache AND lucene"的意思是匹配含apache且含lucene的文档。

查询表达式"apache OR lucene"能够匹配包含“apache”的文档,也能匹配包含"lucene"的文档,还能匹配同时包含这两个Term的文档。

查询表达式“lucene NOT elasticsearch”就只能匹配包含lucene但是不含elasticsearch的文档


支持+, -符号

例如:希望搜索到包含关键词lucene,但是不含关键词elasticsearch的文档,可以用如下的查询表达式:"+lucene -elasticsearch"。


支持指定字段名进行搜索(类似RDBS按列名搜索)

例如:查询title域中包含关键词elasticsearch的文档,查询表达式如下:title:elasticsearch


支持通配符

 ? (匹配单个字符)

* (匹配多个字符)

注意默认的通配符不能是关键词的首字母


支持~整数符号

一个~符号,后面紧跟一个整数,~后面的整数表示短语中可接收的最大的词编辑距离(短语中替换一个词,添加一个词,删除一个词)

"writer~2"能够搜索到含writer和writers的文档。

title:"mastering elasticsearch"~2能够搜匹配title域中含"mastering elasticsearch"的文档与包含"mastering book elasticsearch"的文档


支持^符号进行加权boost设置

一个^符号后面接一个浮点数表示权重。如果权重小于1,就会降低关键词的重要程度。同理,如果权重大于1就会增加关键词的重要程度。默认的加权值为1


支持区间搜索

price:[10.00 TO 15.00查询price域的值在10.00到15.00之间的所有文档。

price:[10.00 TO 15.00}查询price域中价格在10.00(10.00要能够被搜索到)到15.00(15.00不能被搜索到)之间的文档


特殊字符需转义

+, -, &&, || , ! , (,) , { } , [ ] , ^, " , ~, *, ?, : , \, /


更多,Lucene原理 (打分算法,TF-IDF算法一定会在搜索中出境)



我们可以看到elasticsearch支持丰富的数据查询方式,结果展示方式(按什么方式来排序结果,使用什么图形来展示统计结果)

(1)关键词查询term

(2)短语查询phrase

(3)区间range

(4)布尔Boolean

(5)模糊fuzzy

(6)跨度span

(7)通配符wildcard

(8)地理位置spatial

(9) 统计aggregation ——这个功能非常非常赞,比如说生成各种统计图表

(10)prospective search



搜索语句支持通过URI提交(上面的例子演示的_search?q= 注意,使用这种方式的要遵循url编码,官方参考) ,也支持通过request body提交,简直就是HTTP RESTFULL最佳实践,官方参考


我们用熟悉的SQL语句来对比

实例1:

curl -XPOST 'http://localhost:8108/shakespeare/line/_search?pretty' -d '
{
"query":{ "match_all": {} },
"sort": {"line_id": {"order": "desc" }},
"size": 1,
"from": 10
}'

等同于

use shakespeare;

select * 

from line

order by line_id desc

limit 10,1

实例2:

curl -XPOST 'http://localhost:8108/shakespeare/line/_search?pretty' -d ' 
{
"query":{ 
"bool":{
"must":[
{"match_phrase": {"text_entry":"question"}},

{"match_phrase": {"text_entry":"not to be"}}
]
}
}
}'

结果


  "took" : 253,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 4.0433946,
    "hits" : [ {
      "_index" : "shakespeare",
      "_type" : "line",
      "_id" : "34229",
      "_score" : 4.0433946,
      "_source":{"line_id":34230,"play_name":"Hamlet","speech_number":19,"line_number":"3.1.64","speaker":"HAMLET","text_entry":"To be, or not to be: that is the question:"}
    }, {
      "_index" : "shakespeare",
      "_type" : "line",
      "_id" : "1397",
      "_score" : 4.0004296,
      "_source":{"line_id":1398,"play_name":"Henry IV","speech_number":152,"line_number":"2.4.392","speaker":"FALSTAFF","text_entry":"blackberries? a question not to be asked. Shall"}
    } ]
  }
}

等同于

use shakespeare;

select * 

from line

where text_entry like "%question%" and text_entry like "%not to be%"

Search APIs

Match Query APIs


三、更多的细节


1. 主要配置详解

 待续。。。


参考:

https://www.gitbook.com/book/fuxiaopang/learnelasticsearch/details

https://www.gitbook.com/book/shgy/mastering-elasticsearch/details

来源:碳基体

jay_xqt

ElasticSearch Root身份运行

如果以root身份运行将会出现以下问题

root@yxjay:/opt/elasticsearch-2.3.5/bin# ./elasticsearch
Exception in thread "main" Java.lang.RuntimeException: don't run elasticsearch as root.
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93)
at org.elasticsearch.bootstrap.Bootstrap...

如果以root身份运行将会出现以下问题

root@yxjay:/opt/elasticsearch-2.3.5/bin# ./elasticsearch
Exception in thread "main" Java.lang.RuntimeException: don't run elasticsearch as root.
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:144)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
Refer to the log for complete error details.


解决方法1:

在执行elasticSearch时加上参数-Des.insecure.allow.root=true,完整命令如下:

./elasticsearch -Des.insecure.allow.root=true  


解决办法2: 

用vi打开elasicsearch执行文件,在变量ES_JAVA_OPTS使用前添加以下命令:

 ES_JAVA_OPTS="-Des.insecure.allow.root=true"
如下图所示,这个方法的好处是以后不用添加参数就能以root身份执行了。



参考出处:http://stackoverflow.com/questions/34920801/how-to-run-elasticsearch-2-1-1-as-root-user-in-Linux-machine

滑稽 的博客

centos下部署安装elasticsearch和head插件的常见错误和解决

来源:http://www.dajiangtai.com/community/18136.do?origin=csdn-geek&dt=1214


本人的测试环境是:centos7.2 elasticsearch 5.2

内容:


问题一:


[2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] unable to install syscall filter:


Java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel...

来源:http://www.dajiangtai.com/community/18136.do?origin=csdn-geek&dt=1214


本人的测试环境是:centos7.2 elasticsearch 5.2

内容:


问题一:


[2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] unable to install syscall filter:


Java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMPandCONFIG_SECCOMP_FILTERcompiledinatorg.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349) ~[elasticsearch-5.0.0.jar:5.0.0]


at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630) ~[elasticsearch-5.0.0.jar:5.0.0]


原因:报了一大串错误,大家不必惊慌,其实只是一个警告,主要是因为你Linux版本过低造成的。


解决方案:

1、重新安装新版本的Linux系统

2、警告不影响使用,可以忽略


问题二:

ERROR: bootstrap checks failed


max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]


原因:无法创建本地文件问题,用户最大可创建文件数太小


解决方案:

切换到root用户,编辑limits.conf配置文件, 添加类似如下内容:


vi /etc/security/limits.conf


添加如下内容:

*  soft nofile 65536


* hard nofile 131072


* soft nproc 2048


* hard nproc 4096

备注:* 代表Linux所有用户名称(比如 hadoop)


保存、退出、重新登录才可生效


问题三:

max number of threads [1024] for user [es] likely too low, increase to at least [2048]

原因:无法创建本地线程问题,用户最大可创建线程数太小

解决方案:切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置文件。


vi /etc/security/limits.d/90-nproc.conf


找到如下内容:


* soft nproc 1024


#修改为


* soft nproc 2048


问题四:

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

原因:最大虚拟内存太小

解决方案:切换到root用户下,修改配置文件sysctl.conf


vi /etc/sysctl.conf


添加下面配置:


vm.max_map_count=655360


并执行命令:


sysctl -p


然后重新启动elasticsearch,即可启动成功。


问题五:

ElasticSearch启动找不到主机或路由

原因:ElasticSearch 单播配置有问题

解决方案:

检查ElasticSearch中的配置文件

vi  config/elasticsearch.yml

找到如下配置:


discovery.zen.ping.unicast.hosts:["192.168.**.**:9300","192.168.**.**:9300"]

一般情况下,是这里配置有问题,注意书写格式


问题六:

org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream


原因:ElasticSearch节点之间的jdk版本不一致


解决方案:ElasticSearch集群统一jdk环境


问题七:

Unsupported major.minor version 52.0


原因:jdk版本问题太低

解决方案:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0


问题八:

bin/elasticsearch-plugin install license

ERROR: Unknown plugin license


原因:ElasticSearch5.0.0以后插件命令已经改变

解决方案:使用最新命令安装所有插件

bin/elasticsearch-plugin install x-pack


作者:杨俊


其他:

head插件链接安装:http://www.cnblogs.com/xing901022/p/6030296.html  


然后连接elastic search 报错:No Access Control Allow Origin with elastic search


文档可以参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html


解决方案:在elasticsearch/config/elasticsearch.yml 添加配置文件

http.cors.enabled : true

http.cors.allow-origin: "/.*/"

http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE

http.cors.allow-headers : "X-Requested-With,X-Auth-Token,Content-Type, Content-Length, Authorization"


然后保存,重启elasticsearch就行,这个是允许跨域链接的,


同时,可以修改Apache的配置,允许所有跨域,不推荐修改Apache跨域,elastic search的归于elastic search,Apache的归于Apache


原链接:http://stackoverflow.com/questions/33051405/elasticsearch-js-client-connection-refused-access-control-allow-origin-not-reco


我们的故事
走过岁月......

Elasticsearch集群设置

一. 基本环境

服务器环境为centos 7

node-1:192.168.31.244

node-2:192.168.31.127

二.修改配置文件

安装jdk和es步骤略

节点1上配置如下:

vi /etc/elasticsearch/elasticsearch.yml

cluster.name: elasticsearch

node.name: node-1

node.master: true

path.data: /data

path.logs: /data/logs

network.host: 192.168....

一. 基本环境

服务器环境为centos 7

node-1:192.168.31.244

node-2:192.168.31.127

二.修改配置文件

安装jdk和es步骤略

节点1上配置如下:

vi /etc/elasticsearch/elasticsearch.yml

cluster.name: elasticsearch

node.name: node-1

node.master: true

path.data: /data

path.logs: /data/logs

network.host: 192.168.31.244

discovery.zen.ping.unicast.hosts: ["192.168.31.127", "192.168.31.224"]

节点2上配置如下: 

vi /etc/elasticsearch/elasticsearch.yml

cluster.name: elasticsearch

node.name: node-2

node.master: true

path.data: /data

path.logs: /data/logs

network.host: 192.168.31.127

discovery.zen.ping.unicast.hosts: ["192.168.31.127", "192.168.31.224"]

重启服务生效

# systemctl restart elasticsearch

查看运行状态

# systemctl status elasticsearch

三. 查看集群状态

返回数据中的status字段提供一个综合的指标来表示集群的服务状况.三种颜色定义如下:

green ] : 所有主要分片和币制分片都可用

yellow ] : 所有主要分片可用,但不是所有复制分片都可用

red ] : 不是所有的主要分片都可用

四. 相关插件

1. head插件(查看集群几乎所有信息,进行简单的搜索查询,观察自动恢复的情况等)

#/usr/share/elasticsearch/bin/plugin -install mobz/elasticsearch-head

插入一段测试数据


查看内容


从图中可以看到集群健康状态为green

2. kopf插件(提供了一个简单的方法,一个elasticsearch集群上执行常见的任务)

# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf/1.6

使用效果如下:



[延伸]

在配置文件中有一个设置选项

discovery.zen.ping.unicast.hosts: ["192.168.31.127", "192.168.31.224"]

其中的IP地址可以使用节点地址,如

discovery.zen.ping.unicast.hosts: ["node-1", "node-2"]

这样设置的同时要修改/etc/hosts文件,添加以下内容

192.168.31.244 node-1

192.168.31.127 node-2

走过岁月......

Elasticsearch启动失败

启动elasticsearch失败,报错信息如下:


没有找到详细的debug信息

可能原因

配置文件有问题

path.data: /data

path.logs: /data/logs

设置了以上选项,但是没有授权

# chown -R elasticsearch:elasticsearch /data

重启es服务后问题解决

启动elasticsearch失败,报错信息如下:


没有找到详细的debug信息

可能原因

配置文件有问题

path.data: /data

path.logs: /data/logs

设置了以上选项,但是没有授权

# chown -R elasticsearch:elasticsearch /data

重启es服务后问题解决

LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息