elsticsearch6.5.2集群安装+head插件

一、环境准备

1、修改系统hosts

cat /etc/hosts
10.100.12.111   node01
10.100.12.112   node02
10.100.12.113   node03

2.角色分配

主机名角色内存
node01master+data6G
node02master+data6G
node03master+data6G

3.创建用户、数据目录、日志目录

adduser elastic
echo 'elastic' |passwd --stdin elastic
mkdir -p /data/elasticsearch_6_5_2/{data,log}
chown	-R elastic /data/elasticsearch_6_5_2

4、调整系统参数
Elasticsearch 要求其可用的文件句柄至少为 65536,同时要求其进程数限制至少为 2048,可用按照下面的指令进行修改。
分别对应以下两个报错信息:

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [es] is too low, increase to at least [2048]
cat /etc/security/limits.conf

*     soft   nofile  100001
*     hard   nofile  100002
*     soft   nproc   65536
*     hard   nproc   65536
elastic soft memlock unlimited
elastic hard memlock unlimited

5、设置内存交换
为了避免不必要的磁盘和内存交换,影响效率,需要将 vm.swappiness 修改为 1(进行最少量的交换,而不禁用交换)或者 10(当系统存在足够内存时,推荐设置为该值以提高性能),其默认值为 60。
此外需要修改最大虚拟内存 vm.max_map_count 防止启动时报错:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]。

vi /etc/sysctl.conf
vm.swappiness = 1
vm.max_map_count = 262144

6、下载安装文件

cd /usr/local/src
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.2.tar.gz
wget http://download.oracle.com/otn/java/jdk/xxxxxx/jdk-8u25-linux-x64.tar.gz
tar xf elasticsearch-6.5.2.tar.gz -C /usr/local
cd ../
mv elasticsearch-6.5.2 elasticsearch_6_5_2
chown -R elastic /usr/local/elasticsearch_6_5_2
二、安装

1、配置jdk

cd /usr/local/src
tar xf  jdk-8u25-linux-x64.gz -C /usr/local
cd ../
mv jdk1.8.0_25 jdk825x64
vi /etc/profile
export JAVA_HOME=/usr/local/jdk825x64
export CLASSPATH=.
export PATH=$JAVA_HOME/bin:$PATH
$ source /etc/profile
$ mkdir -p  /data/elasticsearch6_5_2/{data,log}
$ chown -R elastic /data/elasticsearch6_5_2/

2.配置es占用内存大小

 vi /usr/local/elasticsearch_6_5_2/config/jvm.options 
 -Xms3g      # 请根据自己机器配置调整
-Xmx3g

3、配置es集群
请参考一下配置,多个节点使用同一份配置,节点名称略有不同。请注意更改

egrep -v '^#|#$' /usr/local/elasticsearch_6_5_2/config/elasticsearch.yml
cluster.name: cluster_elasticsearch_6_5_2
node.name: node01
path.data: /data/elasticsearch6_5_2/data/
path.logs: /data/elasticsearch6_5_2/log
## 内存锁
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
## 网络设置
network.host: 0.0.0.0
http.port: 9200
# 设置zen发现范围(只需要填写主节点的 ip 即可)
discovery.zen.ping.unicast.hosts: ["node01", "node02", "node03"]
# 设置最小主节点个数,一般为:(master_node_count+1)/2
discovery.zen.minimum_master_nodes: 2
# 设置在有2个节点后进行数据恢复
gateway.recover_after_nodes: 2
gateway.expected_nodes: 3
gateway.recover_after_time: 1m

http.cors.enabled: true
http.cors.allow-origin: "*"
三、安装head插件

1、下载elasticsearch-head 包

wget https://codeload.github.com/mobz/elasticsearch-head/zip/master

2、安装依赖包

yum -y install epel-release bzip2
yum -y install npm

3、解压包安装head插件

unzip master
mv elasticsearch-head-master/ es-head
cd es-head
npm install
echo $?
返回为0 安装成功

4、修改app.js

vi _site/app.js 
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; 
修改为:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.6.56:9200";

5、修改es配置文件增加以下两行
如果不作为elasticsearch的插件运行(甚至不能从版本5运行),则必须在elasticsearch中启用CORS,否则您的浏览器将拒绝看似不安全的请求。
您还必须设置 http.cors.allow-origin因为默认情况下不允许原点。http.cors.allow-origin: "*"是有效值,但它被视为安全风险,因为您的群集可以从任何地方开放交叉。

vi elasticsearch.yml 
http.cors.enabled: true
http.cors.allow-origin: "*"

6、重新启动elasticsearch及启动elasticsearch-head

$ su elastic
$ cd /usr/local/elasticsearch_6_5_2/bin
$ ./elasticsearch -d

7.启动es-head插件

cd /usr/local/es-head
npm run start &

8、浏览器访问http://192.168.6.56:9100
注意防火墙设置放开9100端口

firewall-cmd  --permanent --add-port=9100/tcp --zone=public 
firewall-cmd  --permanent --add-port=9200/tcp --zone=public 
firewall-cmd  --permanent --add-port=9300/tcp --zone=public 
firewall-cmd --reload

在这里插入图片描述

四、分片策略制定
偷懒了上链接:https://segmentfault.com/a/1190000008868585
https://blog.csdn.net/my201110lc/article/details/82017516

五、集群热配置

curl 'localhost:9200/_cat/indices?v'   //查看全部索引
curl --user elastic:changeme 'localhost:9200/_cat/nodes?v'     //查看节点列表及其信息、 
curl 'localhost:9200/_cat/health?v' 		//查看集群
curl -XGET 'http://localhost:9200/_cat/shards'  
curl -X GET http://localhost:9200/_cat/allocation?v  --user elastic:changeme    //allocation提供了每个数据节点分配了多少个碎片,以及它们使用了多少磁盘空间的信息 
curl -XGET  --user elastic:changeme http://localhost:9200/_cat/nodes?h=heap.max  ##堆大小

##查看node信息和
curl -XGET 'http://localhost:9200/_nodes/process?pretty'
##或者
curl -XGET 'http://localhost:9200/_nodes/stats'
##通过nodes/stats可以看到很多信息,包括:写入、读取、搜索性能,JVM等数据。
##查看node的文件描述符
curl -XGET 'http://localhost:9200/_nodes/stats/process?filter_path=**.max_file_descriptors'
##任务管理
curl -XGET 'http://localhost:9200/_cat/tasks?v'

##更改kibana超级管理员密码:
[root@tracker1-2 ~]# curl -u elastic -XPUT 'http://localhost:9200/_xpack/security/user/elastic/_password?pretty' -H 'Content-Type: application/json' -d '{ "password" : "changeme" }'
### 使用命令ES_HOME/bin/x-pack/users创建一个基于本地问价认证的超级管理员
[root@crmnginx x-pack]# ./users useradd admin -p elasticsearch@123 -r superuser  

## 创建索引
curl -XPUT 'localhost:9200/customer?pretty'
{
  "acknowledged" : true
}

##索引和搜索文档
curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "John Doe"
}'

##删除索引
curl -XDELETE 'localhost:9200/customer?pretty'

## 移动Index所属节点
curl -XPUT localhost:9200/_cluster/reroute  
{
    "commands" : [ {
        "move" :
       {
              "index" : "crm-0720", "shard" : 0,
              "from_node" : "data02", "to_node" : "data03"
       }
     }]
}

## 查看当前分片和副本:
 curl -XGET 'http://localhost:9200/_cluster/stats?human&pretty'  --user elastic:changeme

## 分片:
curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
"index.number_of_replicas" : "1",
"index.number_of_shards" : "5"
}'

## 如果关闭一个节点,则执行reroute前, 还必须禁用系统自动的shard分配
curl -XPUT localhost:9200/_cluster/settings -d '{  "transient" : {  "cluster.routing.allocation.enable" : "none"  }  }' #默认为all

【重新分配分片】
Elasticsearch通过reroute api重新分配分片
elasticsearch可以通过reroute api来手动进行索引分片的分配。
不过要想完全手动,必须先把cluster.routing.allocation.disable_allocation参数设置为true,禁止es进行自动索引分片分配,否则你从一节点把分片移到另外一个节点,那么另外一个节点的一个分片又会移到那个节点。数据量很少的时候,可能影响不大,但是如果数据量很大,这个参数必须要设置,因为如果不设置,即便你不手动迁移分片,在我们重启机群的时候,也会产生分片的迁移,导致大量资源被占用,重启变慢.

一共有三种操作,分别为:移动(move),取消(cancel)和分配(allocate)。下面分别介绍这三种情况:
移动(move)
把分片从一节点移动到另一个节点。可以指定索引名和分片号。
取消(cancel)
取消分配一个分片。可以指定索引名和分片号。node参数可以指定在那个节点取消正在分配的分片。allow_primary参数支持取消分配主分片。
分配(allocate)
分配一个未分配的分片到指定节点。可以指定索引名和分片号。node参数指定分配到那个节点。allow_primary参数可以强制分配主分片,不过这样可能导致数据丢失。我一般用来清空某个未分配分片的数据的时候才设置这个参数

集群索引中可能由多个分片构成,并且每个分片可以拥有多个副本,将一个单独的索引分为多个分片,可以处理不能在单一服务器上运行的
大型索引.
由于每个分片有多个副本,通过副本分配到多个服务器,可以提高查询的负载能力.
为了进行分片和副本操作,需要确定将这些分片和副本放到集群节点的哪个位置,需要确定把每个分片和副本分配到哪台服务器/节点上.

1.索引创建&指定节点参数:
$curl -XPOST 'http://localhost:9200/filebeate-ali-hk-fd-tss1'
$curl -XPUT 'http://localhost:9200/filebeat-ali-hk-fd-tss1/_settings' -d '{
"index.routing.allocation.include.zone":"ali-hk-ops-elk1"
}'
将索引指定存放在elk1的节点上
$curl -XPUT 'http://localhost:9200/filebeat-ali-hk-fd-tss1/settings' -d '{
"index.routing.allocation.include._ip":"ip_addr1,ip_addr2"
}'
根据ip地址指定索引的分配节点
2.排除索引分配的节点:
$curl -XPOST 'http://localhost:9200/filebeat-ali-hk-fd-tss2'
$curl -XPUT 'http://localhost:9200/filebeat-ali-hk-fd-tss2/_setting' -d '{
"index.routing.allocation.exclude.zone":"ali-hk-ops-elk2"
}'
$curl -XPUT 'http://localhost:9200/filebeat-ali-hk-fd-tss2/_setting' -d '{
"index.routing.allocation.exclude._ip":"ip_addr1,ip_addr2"
}'
根据ip地址排除索引分配的节点
3.每个节点上分片和副本数量的控制:
对一个索引指定每个节点上的最大分片数量:
$curl -XPUT 'http://localhost:9200/filebeat-ali-hk-fd-tss1/_settings' -d '{
"index.routing.allocation.total_shards_per_node":1
}'
如果配置不当,导致主分片无法分配的话,集群就会处于red状态.
4.手动移动分片和副本:
移动分片:
$curl -XPOST 'http://localhost:9200/_cluster/reroute' -d '{
"commands":[{
"move":{
"index":"filebeat-ali-hk-fd-tss1",
"shard":1,
"from_node":"ali-hk-ops-elk1",
"to_node":"ali-hk-ops-elk2"
}
}]
}'
取消分片:
$curl -XPOST 'http://localhost:9200/_cluster/reroute' -d '{
"commands":[{
"cancel":{
"index":"filebeat-ali-hk-fd-tss1",
"shard":1,
"node":"ali-hk-ops-elk1"
}
}]
}'
分配分片(用来分配未分配状态的分片,会导致数据丢失):
$curl -XPOST 'http://localhost:9200/_cluster/reroute' -d '{
"commands":[{
"allocate":{
"index":"filebeat-ali-hk-fd-tss1",
"shard":1,
"node":"ali-hk-ops-elk1",
allow_primary" : true   (允许该分片做主分片)
 
}
}]
}'
将某个未分配的索引手动分配到某个节点上.
$curl -XPOST 'http://localhost:9200/_cluster/reroute' -d '{
"commands":[
{
"move":{
"index":"filebeat-ali-hk-fd-tss1",
"shard":1,
"from_node":"ali-hk-ops-elk1",
"to_node":"ali-hk-ops-elk2"
}
},
{
"cancel":{
"index":"filebeat-ali-hk-fd-tss1",
"shard":1,
"node":"ali-hk-ops-elk1"
}
},
{
"allocate":{
"index":"filebeat-ali-hk-fd-tss1",
"shard":1,
"node":"ali-hk-ops-elk1"
}
}]
}'

将多个索引合并到一个索引上
POST _reindex?pretty
{
  "source": {
    "index": "logstash-nginx_syslog_192.168.6.225_2017-12-2*"  
  },
  "dest": {
    "index": "test1_2017_12"
  }
}

## 查看模板  
curl -XGET ip:9200/_template/my_template   
##更改模板方法,将PUT请求改为POST请求
##删除索引
DELETE /logstash-nginx*2017-12-1*
##5.关于unassigned shards的问题解决:
1)出现大量的unassigned shards
2)集群的状态为:red
##集群状态:red-->存在不可用的主分片
A:fix unassigned shards:
##查看所有分片的状态:
$curl -XGET 'http://localhost:9200/_cat/shards'
##查询所有unassigned的分片:
$curl -XGET 'http://localhost:9200/_cat/shards' | grep UNASSIGNED
##B:查询得到master节点的唯一标识:
$curl -XGET 'http://localhost:9200/_nodes/process?pretty=true'
##C:执行route对unassigned的索引进行手动分片:
for index in $(curl -XGET --user elastic:changeme  'http://localhost:9200/_cat/shards' | grep UNASSIGNED |awk '{print 1}'|sort |uniq);do for shards in(curl -XGET 'http://localhost:9200/_cat/shards' | grep UNASSIGNED | grep inde curl -XGET --user elastic:changeme  'http://localhost:9200/_cat/shards' | grep UNASSIGNED | grep $index | awk '{print2}'|sort|uniq | awk '{print2}'|sort|uniq);do
curl XPOST 'http://localhost:9200/_cluster/reroute'-d '{
"commands":[
{
"allocate":{
"index":$index,"$shards":shards,
"node":"ali-k-ops-elk1",
"allow_primary":"true"
}
}
]
}'
done
done

##移动分片,取消分片,分配分片
##使用commands命令可以同时进行多个操作
##如下操作分别为:
##cancle:取消node_1在my_index索引的第0个分片
##allocate:将my_index索引上未分配的第0个分片分配给node_2
##move:将my_index索引在node_2的第1块分片移动到node_1上
curl -XPOST ip:9200/_cluster/reroute -d '{  
"commands" : [  
{"cancel" : {"index" : "my_index","shard" : 0,"node" : "node_1"}},  
{"allocate_replica" : {"index" : "my_index","shard" : 0,"node" : "node_2"}},  
{"move" : {"index" : "my_index","shard" : 1,"from_node" : "node_2","to_node" : "node_1"}}' 

##删除别名:
DELETE /*/_aliases/logstash-log4j_20170-11
GET /*/_alias/logstash-log4j_20170-11_index
批量创建索引用_aliases 单索引用_alias
PUT /logstash-log4j*2017-11*/_aliases/logstash-log4j_20170-11_index



[root@es-node1 mnt]#  curl 'localhost:9200/_cat/nodes?v'  --user elastic
Enter host password for user 'elastic':
ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name

   875      114.9gb   326.6gb      1.5tb      1.8tb           17 10.100.20.117 10.100.20.117 node-2
     5                                                                                       UNASSIGNED

[root@es-node1 iscsi]# curl http://10.100.20.110:9200/_cluster/settings?pretty  --user elastic                                                                           
Enter host password for user 'elastic':
{
  "persistent" : { },
  "transient" : {
    "cluster" : {
      "routing" : {
        "allocation" : {
          "exclude" : {
            "_name" : "null"
          }
        }
      }
    }
  }
}

[root@es-node1 iscsi]# curl -XGET 'http://10.100.20.110:9200/_cat/shards' --user elastic | grep UNASSIGNED         
Enter host password for user 'elastic':
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  1 1030k    1 16299    0     0   4247      0  0:04:08  0:00:03  0:04:05  4247logstash-nginx_syslog_10.100.11.74_2018-03                      7  r UNASSIGNED                                 
logstash-nginx-slave_access_app-10.100.11.57_2018-03            5  r UNASSIGNED                                 
logstash-nginx-slave_access_chtwm-site-10.100.11.77_2018-03     7  r UNASSIGNED                                 
logstash-nginx_syslog_10.100.11.77_2018-03                      0  r UNASSIGNED                                 
logstash-nginx_syslog_10.100.11.59_2018-04                      9  r UNASSIGNED                                 
logstash-log4j-ac_chtfund_2018-04                               3  r UNASSIGNED                                 
logstash-log4j-ac_chtfund_2018-03                               3  r UNASSIGNED                                 
logstash-log4j-wap_cathayrock_2018-04                           9  r UNASSIGNED                                 
tykh_user-schedule-2018.03                                      6  r UNASSIGNED                                 
tykh_user-schedule-2018.03                                      11 r UNASSIGNED                                 
100 1030k  100 1030k    0     0   267k      0  0:00:03  0:00:03 --:--:--  267k


## 摘除node节点 
 curl -XPUT 10.100.20.110:9200/_cluster/settings -d '{"transient" :{"cluster.routing.allocation.exclude._name" : "node-9"}}' --user elastic

curl '10.100.20.110:9200/_cat/allocation?v'  --user elastic
Enter host password for user 'elastic':
shards disk.indices disk.used disk.avail disk.total disk.percent host          ip            node
  
   331       31.4gb      82gb    834.4gb    916.5gb            8 10.100.20.60  10.100.12.61  node-8

重置settings 使移除的节点从新加入集群
curl -XPUT 10.100.20.110:9200/_cluster/settings -d '{"transient" :{"cluster.routing.allocation.exclude._name" : "null"}}' --user elastic  
## 重新配置分片和副本
curl -XPUT 'http://localhost:9200/_template/template_http_request_record' -H 'Content-Type: application/json' -d '{"index_patterns": ["skywalking_*"],"settings": {"number_of_shards": 3,"number_of_replicas": 1}}'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值