Elasticsearch:1.集群搭建

2019-05-12  本文已影响0人  小六的昵称已被使用

简介

基本概念

代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。

代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

健康状态

针对一个索引,Elasticsearch 中其实有专门的衡量索引健康状况的标志,分为三个等级:

如果你只有一台主机的话,其实索引的健康状况就是 yellow,因为一台主机,集群没有其他的主机可以防止副本,所以说,这就是一个不健康的状态,因此集群也是十分有必要的。

节点的4种类型

环境

[root@centos181002 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core) 

elasticsearch-6.6.0.rpm

节点1:centos181001 10.0.1.61
节点2:centos181002 10.0.1.62
节点3:centos181003 10.0.1.63

第一步:系统优化设置

1.告诉操作系统可以无限制分配内存给一个进程

echo '* soft memlock unlimited' >>/etc/security/limits.conf
echo '* hard memlock unlimited' >>/etc/security/limits.conf
cat /etc/security/limits.conf

2.禁用SWAP

## 完全禁用SWAP
## swapoff -a
## 尽量避免使用SWAP
echo 'vm.swappiness = 1' >> /etc/sysctl.conf

3. 修改最大打开文件描述符

echo '* soft nofile 65535' >> /etc/security/limits.conf
echo '* hard nofile 65535' >> /etc/security/limits.conf
cat /etc/security/limits.conf
ulimit -n 65535

4.重启生效

init 6

第二步:安装和配置Elasticsearch

1.下载并安装

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm
rpm -ivh elasticsearch-6.6.0.rpm

2.修改配置文件以支持集群

1.注意修改network.host为各节点IP地址
2.注意修改discovery.zen.ping.unicast.hosts列表
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
cat <<EOF >>/etc/elasticsearch/elasticsearch.yml
## 集群名称
cluster.name: my-cs-cluster

## 节点名称(每个节点名称不能相同)
node.name: `hostname`

## 允许 JVM 锁住内存,禁止操作系统交换出去
# bootstrap.memory_lock: true

## 是否有资格成为主节点
## 通过 node.master 可以配置该节点是否有资格成为主节点,如果配置为 true,则主机有资格成为主节点
## 注意这里是有资格成为主节点,不是一定会成为主节点
node.master: true

## 是否是数据节点
## 当 node.master 和 node.data 均为 false,则该主机会作为负载均衡节点
node.data: true

## 设置访问的地址和端口
network.host: 192.168.30.41
http.port: 9200

## 集群地址设置
## 配置之后集群的主机之间可以自动发现
discovery.zen.ping.unicast.hosts: ["192.168.30.41", "192.168.30.42", "192.168.30.43"]

## 配置大多数节点(通常为主节点的节点总数/ 2 + 1)来防止“裂脑”:
discovery.zen.minimum_master_nodes: 2

## 在完全集群重启后阻止初始恢复,直到启动N个节点
gateway.recover_after_nodes: 2
EOF
vim /etc/elasticsearch/elasticsearch.yml

3.为elasticsearch设置jdk路径,否则启动时候会报错

请根据自己实际路径进行修改
cp /etc/sysconfig/elasticsearch /etc/sysconfig/elasticsearch.bak
cat <<EOF >>/etc/sysconfig/elasticsearch
JAVA_HOME=/home/jdk1.8.0_202
EOF

4.设置堆内存(根据物理内存情况设置)

http://openskill.cn/article/304
https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_limiting_memory_usage.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

## 编辑以下值
## 内存设置为物理内存的50%,并且不要超过32G
## 确保这两个值相等,防止程序在运行时改变堆内存大小, 这是一个很耗系统资源的过程
cp /etc/elasticsearch/jvm.options /etc/elasticsearch/jvm.options.bak
vim /etc/elasticsearch/jvm.options

-Xms2g
-Xmx2g

5.启动服务

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl stop elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service

6.验证

curl -X GET "192.168.30.41:9200/"
curl -X GET "192.168.30.42:9200/"
curl -X GET "192.168.30.43:9200/"

curl -XGET 'http://192.168.30.41:9200/_cat/nodes?pretty'
curl -XGET 'http://192.168.30.42:9200/_cat/nodes?pretty'
curl -XGET 'http://192.168.30.43:9200/_cat/nodes?pretty'

curl -XGET 'http://192.168.30.41:9200/_cat?pretty'
curl -XGET 'http://192.168.30.42:9200/_cat?pretty'
curl -XGET 'http://192.168.30.43:9200/_cat?pretty'

    _cat代表查看信息
    nodes为查看节点信息,默认会显示为一行,所以就用刀了?preety让信息更有好的显示
    ?preety让输出信息更友好的显示

第三步:安装中文分词器 elasticsearch-analysis-ik

https://github.com/medcl/elasticsearch-analysis-ik

1.创建目录

mkdir /usr/share/elasticsearch/plugins/ik

2.下载并解压

cd /usr/share/elasticsearch/plugins/ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
unzip elasticsearch-analysis-ik-6.6.0.zip

3.重启 Elasticsearch

systemctl stop elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service

4.验证

## 1.登录 Kibana 
## 2.Dev Tools - Console

    GET _analyze?pretty
    {
      "analyzer": "ik_smart",
      "text":"安徽省长江流域"
    }

    GET _analyze?pretty
    {
      "analyzer": "ik_max_word",
      "text":"安徽省长江流域"
    }

附录:

JAVA_HOME=`/usr/libexec/java_home -v 1.8` java -Xmx32766m -XX:+PrintFlagsFinal 2> /dev/null | grep UseCompressedOops
bool UseCompressedOops   := true
JAVA_HOME=`/usr/libexec/java_home -v 1.8` java -Xmx32767m -XX:+PrintFlagsFinal 2> /dev/null | grep UseCompressedOops
bool UseCompressedOops   = false
上一篇 下一篇

猜你喜欢

热点阅读