ElasticSearch CentOS安装
一、安装jre环境
由于ES是基于Java开发的,所以本机需要安装好JDK或者jre,配置好对应的环境变量,ES7.x的版本需要JDK11以上的版本。6.x需要JDK8以上的版本。
二、创建用户
ES不支持root用户启动,所以需要创建一个对应的用户
groupadd ela 创建ela组
useradd -g ela ela 创建ela用户,并且加入ela组
passwd ela 为ela用户设定登录密码
#方法2 给root用户增加权限
vim /etc/sudoers
# 添加
root ALL=(ALL) ALL
ela ALL=(ALL) ALL #ela是我要赋予权限的用户名
三、授权
上一步创建的ela用户是没有es的执行权限的,所以在root用户权限解压后,需要给ela用户授权。
chown -R ela.ela /opt/develop/elasticsearch-6.8.3/
四、配置ES文件
vi /opt/elasticsearch-6.8.3/config/elasticsearch.yml
配置文件中需要用到几个文件夹,如果不存在需要先创建好(切换到root用户创建并授权)
案例:
/opt/develop/elasticsearch-6.8.3
su root
mkdir -p /data/es-data
mkdir -p /var/log/elasticsearch
chown -R ela.ela /data/
chown -R ela.ela /var/log/elasticsearch
//打开设定es群集名称
cluster.name: my-application
//es当前节点名称,用于区分不同节点
node.name: node-1
//修改数据目录,此目录为自定义,需要在root用户下创建,且属主属组更改为ela
path.data: /opt/develop/elasticsearch-6.8.3/data
//日志目录位置,需自己创建,方式同上
path.logs: /opt/develop/elasticsearch-6.8.3/logs
//elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true 但亲试没用 得设为false
bootstrap.memory_lock: false
//监听访问地址为任意网段
network.host: 0.0.0.0
//服务监听端口
http.port: 9200
五、分配内存(root用户下)
vim /etc/security/limits.conf
添加如下命令:
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
ela hard memlock unlimited
ela soft memlock unlimited
vim /etc/sysctl.conf追加如下配置:
vm.max_map_count=262144
sysctl-p 更新文件
六、切换到ela用户,启动ES
su ela
cd /opt/develop/elasticsearch-6.8.3/bin/
./elasticsearch #前台启动
OR
./elasticsearch -d #后台启动
七、关闭防火墙或者释放端口
systemctl stop firewalld
八、访问
在物理机中,使用host:9200访问即可
九、集群的搭建
1、vi elasticsearch.yml 修改配置文件
2、cluster.name: myes ###保证三台服务器节点集群名称相同
3、node.name: node-1 #### 每个节点名称不一样 其他两台为node-1 ,node-2
4、network.host: 192.168.212.180 #### 实际服务器ip地址
5、discovery.zen.ping.unicast.hosts: ["192.168.212.184", "192.168.212.185","192.168.212.186"] ##多个服务集群ip
6、discovery.zen.minimum_master_nodes: 1
访问http://192.168.188.128:9200/_cat/nodes?pretty即可查看当前集群内容,*号表示为master节点
注意:
注意克隆data文件会导致数据不同步
报该错误解决办法 :
failed to send join request to master
因为克隆导致data文件也克隆呢,直接清除每台服务器data文件。
集群参考:https://www.cnblogs.com/soft2018/p/10213266.html
https://www.cnblogs.com/guyouyin123/p/13308733.html
十、跨域问题
vim ./elasticsearch-6.2.4/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
十一、图形化工具的使用
解决了跨域问题后我们可以使用ES的图形化工具elasticsearch-head,它需要node.js环境,直接从github下载后
npm install
npm run start即可,如果连不上请参考第十步
十二、集群选举策略
无论是广播发现还是到单播发现,一旦集群中的节点发生变化,它们就会协商谁将成为主节点,elasticsearch认为所有节点都有资格成为主节点。如果集群中只有一个节点,那么该节点首先会等一段时间,如果还是没有发现其他节点,就会任命自己为主节点。
对于节点数较少的集群,我们可以设置主节点的最小数量,虽然这么设置看上去集群可以拥有多个主节点。实际上这么设置是告诉集群有多少个节点有资格成为主节点。怎么设置呢?修改配置文件中的:
discovery.zen.minimum_master_nodes: 3
一般的规则是集群节点数除以2(向下取整)再加一。比如3个节点集群要设置为2。这么着是为了防止脑裂(split brain)问题。
十三、什么是脑裂
脑裂这个词描述的是这样的一个场景:(通常是在重负荷或网络存在问题时)elasticsearch集群中一个或者多个节点失去和主节点的通信,然后各节点就开始选举新的主节点,继续处理请求。这个时候,可能有两个不同的集群在相互运行着,这就是脑裂一词的由来,因为单一集群被分成了两部分。为了防止这种情况的发生,我们就需要设置集群节点的总数,规则就是节点总数除以2再加一(半数以上)。这样,当一个或者多个节点失去通信,小老弟们就无法选举出新的主节点来形成新的集群。因为这些小老弟们无法满足设置的规则数量。
我们通过下图来说明如何防止脑裂。比如现在,有这样一个5个节点的集群,并且都有资格成为主节点:
为了防止脑裂,我们对该集群设置参数:
discovery.zen.minimum_master_nodes: 3 # 3=5/2+1
之前原集群的主节点是node1
,由于网络和负荷等原因,原集群被分为了两个switch
:node1 、2
和node3、4、5
。因为minimum_master_nodes
参数是3,所以node3、4、5
可以组成集群,并且选举出了主节点node3
。而node1、2
节点因为不满足minimum_master_nodes
条件而无法选举,只能一直寻求加入集群(还记得单播列表吗?),要么网络和负荷恢复正常后加入node3、4、5
组成的集群中,要么就是一直处于寻找集群状态,这样就防止了集群的脑裂问题。
除了设置minimum_master_nodes
参数,有时候还需要设置node_master
参数,比如有两个节点的集群,如果出现脑裂问题,那么它们自己都无法选举,因为都不符合半数以上。这时我们可以指定node_master
,让其中一个节点有资格成为主节点,另外一个节点只能做存储用。当然这是特殊情况。
那么,主节点是如何知道某个节点还活着呢?这就要说到错误识别了。
十四、错误识别
其实错误识别,就是当主节点被确定后,建立起内部的ping机制来确保每个节点在集群中保持活跃和健康,这就是错误识别。
主节点ping集群中的其他节点,而且每个节点也会ping主节点来确认主节点还活着,如果没有响应,则宣布该节点失联。想象一下,老大要时不常的看看(循环)小弟们是否还活着,而小老弟们也要时不常的看看老大还在不在,不在了就赶紧再选举一个出来!