Elasticsearch7.x 集群安装及整合x-pack

1 集群规划及前提条件

需要在服务器中安装jdk或者设置jdk为es自带的jdk (自带jdk在文件jdk目录下)
三胎服务器
10.10.1.1
10.10.1.2
10.10.1.1
cpu4核内存16G

2 服务器修改配置

文件句柄
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
#我选择锁住swapping因此需要在这个配置文件下再增加两行代码
* soft memlock unlimited
* hard memlock unlimited
 
虚拟内存设置
max_map_count定义了进程能拥有的最多内存区域
vi /etc/sysctl.conf
vm.max_map_count=655360
fs.file-max=655360
 
/sbin/sysctl -p

3 下载

https://www.elastic.co/cn/downloads/elasticsearch  
image.png

选择需要下载的安装包

4 RPM安装方式

4.1 安装

rpm -ivh elasticsearch-7.15.1x86_64.rpm

4.2 启动

#开机启动
systemctl enable elasticsearch
systemctl start elasticsearch
systemctl status elasticsearch
 
如果配置的日志目录,和data目录为root权限,需要设置为es的权限
chown -R elasticsearch:elasticsearch /home/elasticsearch/log
chown -R elasticsearch:elasticsearch /home/elasticsearch/data

4.3 卸载

[root@slave elasticsearch]# rpm -qa | grep elasticsearch
elasticsearch-7.15.1-x86_64
[root@slave elasticsearch]# rpm -e --nodeps elasticsearch-7.15.1.x86_64
Stopping elasticsearch service... OK
warning: file /var/run/elasticsearch: remove failed: No such file or directory
warning: /etc/elasticsearch/elasticsearch.yml saved as /etc/elasticsearch/elasticsearch.yml.rpmsave
Deleting log directory... OK

5 tar包安装方式

5.1 安装

tar -zxvf elasticsearch-7.15.1-linux-x86_64.tar.gz 
cd elasticsearch-7.15.1/

5.2 修改配置文件

vi config/elasticsearch.yml

第一台配置

cluster.name: xlbb_es
node.name: node-10.10.1.1
node.master: true
node.data: true
path.data: /esdata/data
path.logs: /esdata/log
bootstrap.memory_lock: true
network.host: 10.10.1.1
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["10.10.1.1:9300", "10.10.1.2:9300", "10.10.1.3:9300"]
cluster.initial_master_nodes: ["10.10.1.1:9300", "10.10.1.2:9300", "10.10.1.3:9300"]
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 2
#bootstrap.mlockall: true

#xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

第二台配置

cluster.name: xlbb_es
node.name: node-10.10.1.2
node.master: true
node.data: true
path.data: /esdata/data
path.logs: /esdata/log
bootstrap.memory_lock: true
network.host: 10.10.1.2
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["10.10.1.1:9300", "10.10.1.2:9300", "10.10.1.3:9300"]
cluster.initial_master_nodes: ["10.10.1.1:9300", "10.10.1.2:9300", "10.10.1.3:9300"]
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 2
#bootstrap.mlockall: true



#xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

第三台配置

cluster.name: xlbb_es
node.name: node-10.10.1.3
node.master: true
node.data: true
path.data: /esdata/data
path.logs: /esdata/log
bootstrap.memory_lock: true
network.host: 10.10.1.3
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["10.10.1.1:9300", "10.10.1.2:9300", "10.10.1.3:9300"]
cluster.initial_master_nodes: ["10.10.1.1:9300", "10.10.1.2:9300", "10.10.1.3:9300"]
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 2
#bootstrap.mlockall: true



#xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

5.3 创建用户及用户组

groupadd es
useradd es -g es -p elasticsearch

5.4 创建数据及日志目录

mkdir -p /esdata/data
mkdir -p /esdata/log

5.5 设置权限

sudo chown -R es:es /esdata/log
sudo chown -R es:es /esdata/data
#修改es程序所在目录的权限
sudo chown -R es:es /esdata/elasticsearch-7.15.1

5.6启动es

#直接启动
/esdata/elasticsearch-7.15.1/bin/elasticsearch
#后台启动
/esdata/elasticsearch-7.15.1/bin/elasticsearch -d

5.7 tar包安装设置开机启动

 
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch
 
export JAVA_HOME=/esdata/elasticsearch-7.15.1/jdk
export JAVA_BIN=/esdata/elasticsearch-7.15.1/jdk/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
 
case "$1" in
start)
    su es<<!
    cd /esdata/elasticsearch-7.15.1
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;
stop)
    es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    ;;
restart)
    es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    su es<<!
    cd /esdata/elasticsearch-7.15.1
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;
*)
    echo "start|stop|restart"
    ;;
esac
 
exit $?

保存退出,赋予执行权限
chmod +x

sudo chmod +x /etc/init.d/elasticsearch

添加到开机启动任务

sudo chkconfig --add /etc/init.d/elasticsearch

6 集群配置 部分详解

修改/config下的elasticsearch.yml
 
集群名称,必须一致,
cluster.name:elasticsearch
 
节点名称,不可以一样,这里按照node-1、node-2、node-3进行命名
node.name:node-1
 
path.data=/home/elasticsearch/data
path.log=/home/elasticsearch/log
注意:需要进行配置,如果使用默认配置是很危险的。当es被卸载,数据和日志将完全丢失。可以根据具体环境将数据目录和日志目录保存到其他路径下以确保数据和日志完整、安全。
 
discovery.seed_hosts: ["10.10.1.1:9300", "10.10.1.2:9300","10.10.1.3:9300"]
cluster.initial_master_nodes: ["10.10.1.1:9300", "10.10.1.2:9300","10.10.1.3:9300"]
 
把 bootstrap.memory_lock: false 注释放开
是否锁住内存。因为当jvm开始swapping时es的效率会降低,配置为true时要允许elasticsearch的进程可以锁住内存,同时一定要保证机器有足够的内存分配给es。如果不熟悉机器所处环境,建议配置为false。
 
添加 bootstrap.system_call_filter: false
Centos6不支持SecComp,而es5.2.0版本默认bootstrap.system_call_filter为true
禁用:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory的后面配置该选项。
 
network.host: 10.10.1.1
是本机ip,一般我们会使用192.168.1.1这样
http.port: 9200 设置端口为9200
transport.port: 9301
 
这里需要配置多个,为了演示非同一IP段,所以IP段不同
因为我们搭建了3台服务器用于演示,所以此处为三个服务器配置的network.host地址,
discovery.zen.ping.unicast.hosts: [“10.10.1.1”, “10.10.1.2”, “10.10.1.3”]
 
master集群中最小的master数量,集群都是过半投票制,所以3台服务器设置2个master节点,如果19台服务器可以设置5个master节点,因为设置的是最小master节点数量防止宕机过多。
#在Elasticsearch7.0版本已被移除,配置无效
#为了避免脑裂,集群的最少节点数量为,集群的总节点数量除以2加一
discovery.zen.minimum_master_nodes: 2
 
http.cors.enabled: true
http.cors.allow-origin: "*"

7所有配置详解

elasticsearch7.0配置文件详解 此文件不是集群生成所用到的文件,只是给大家讲解ES7配置文件的详细说明
 
vim /usr/local/elasticsearch-7.0.0/config/elasticsearch.yml
cluster.name: ES-Cluster
#ES集群名称,同一个集群内的所有节点集群名称必须保持一致
 
node.name: ES-master-10.10.1.1
#ES集群内的节点名称,同一个集群内的节点名称要具备唯一性
 
node.master: true
#允许节点是否可以成为一个master节点,ES是默认集群中的第一台机器成为master,如果这台机器停止就会重新选举
 
node.data: false
#允许该节点存储索引数据(默认开启)
#关于Elasticsearch节点的角色功能详解,请看:https://www.dockerc.com/elasticsearch-master-or-data/
 
path.data: /data/ES-Cluster/master/ES-master-10.10.1.1/data1,/data/ES-Cluster/master/ES-master-10.150.55.94/data2
#ES是搜索引擎,会创建文档,建立索引,此路径是索引的存放目录,如果我们的日志数据较为庞大,那么索引所占用的磁盘空间也是不可小觑的
#这个路径建议是专门的存储系统,如果不是存储系统,最好也要有冗余能力的磁盘,此目录还要对elasticsearch的运行用户有写入权限
#path可以指定多个存储位置,分散存储,有助于性能提升,以至于怎么分散存储请看详解https://www.dockerc.com/elk-theory-elasticsearch/
 
path.logs: /data/ES-Cluster/master/ES-master-10.10.1.1/logs
#elasticsearch专门的日志存储位置,生产环境中建议elasticsearch配置文件与elasticsearch日志分开存储
 
bootstrap.memory_lock: true
#在ES运行起来后锁定ES所能使用的堆内存大小,锁定内存大小一般为可用内存的一半左右;锁定内存后就不会使用交换分区
#如果不打开此项,当系统物理内存空间不足,ES将使用交换分区,ES如果使用交换分区,那么ES的性能将会变得很差
 
network.host: 10.10.1.1
#es绑定地址,支持IPv4及IPv6,默认绑定127.0.0.1;es的HTTP端口和集群通信端口就会监听在此地址上
 
network.tcp.no_delay: true
#是否启用tcp无延迟,true为启用tcp不延迟,默认为false启用tcp延迟
 
network.tcp.keep_alive: true
#是否启用TCP保持活动状态,默认为true
 
network.tcp.reuse_address: true
#是否应该重复使用地址。默认true,在Windows机器上默认为false
 
network.tcp.send_buffer_size: 128mb
#tcp发送缓冲区大小,默认不设置
 
network.tcp.receive_buffer_size: 128mb
#tcp接收缓冲区大小,默认不设置
 
transport.tcp.port: 9301
#设置集群节点通信的TCP端口,默认就是9300
 
transport.tcp.compress: true
#设置是否压缩TCP传输时的数据,默认为false
 
http.max_content_length: 200mb
#设置http请求内容的最大容量,默认是100mb
 
http.cors.enabled: true
#是否开启跨域访问
 
http.cors.allow-origin: "*"
#开启跨域访问后的地址限制,*表示无限制
 
http.port: 9201
#定义ES对外调用的http端口,默认是9200
 
discovery.zen.ping.unicast.hosts: ["10.10.1.1:9300", "10.10.1.2:9300","10.10.1.3:9300"]    #在Elasticsearch7.0版本已被移除,配置错误
#写入候选主节点的设备地址,来开启服务时就可以被选为主节点
#默认主机列表只有127.0.0.1和IPV6的本机回环地址
#上面是书写格式,discover意思为发现,zen是判定集群成员的协议,unicast是单播的意思,ES5.0版本之后只支持单播的方式来进行集群间的通信,hosts为主机
#总结下来就是:使用zen协议通过单播方式去发现集群成员主机,在此建议将所有成员的节点名称都写进来,这样就不用仅靠集群名称cluster.name来判别集群关系了
 
discovery.zen.minimum_master_nodes: 2           #在Elasticsearch7.0版本已被移除,配置无效
#为了避免脑裂,集群的最少节点数量为,集群的总节点数量除以2加一
 
discovery.zen.fd.ping_timeout: 120s             #在Elasticsearch7.0版本已被移除,配置无效
#探测超时时间,默认是3秒,我们这里填120秒是为了防止网络不好的时候ES集群发生脑裂现象
 
discovery.zen.fd.ping_retries: 6                #在Elasticsearch7.0版本已被移除,配置无效
#探测次数,如果每次探测90秒,连续探测超过六次,则认为节点该节点已脱离集群,默认为3次
 
discovery.zen.fd.ping_interval: 15s             #在Elasticsearch7.0版本已被移除,配置无效
#节点每隔15秒向master发送一次心跳,证明自己和master还存活,默认为1秒太频繁,
 
discovery.seed_hosts: ["10.10.1.1:9300", "10.10.1.2:9300","10.10.1.3:9300"]
#Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点,由discovery.zen.ping.unicast.hosts:参数改变而来
 
cluster.initial_master_nodes: ["10.10.1.1:9300", "10.10.1.2:9300","10.10.1.3:9300"]
#Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点
 
cluster.fault_detection.leader_check.interval: 15s 
#Elasticsearch7新增参数,设置每个节点在选中的主节点的检查之间等待的时间。默认为1秒
 
discovery.cluster_formation_warning_timeout: 30s 
#Elasticsearch7新增参数,启动后30秒内,如果集群未形成,那么将会记录一条警告信息,警告信息未master not fount开始,默认为10秒
 
cluster.join.timeout: 30s
#Elasticsearch7新增参数,节点发送请求加入集群后,在认为请求失败后,再次发送请求的等待时间,默认为60秒
 
cluster.publish.timeout: 90s 
#Elasticsearch7新增参数,设置主节点等待每个集群状态完全更新后发布到所有节点的时间,默认为30秒
 
cluster.routing.allocation.cluster_concurrent_rebalance: 32
#集群内同时启动的数据任务个数,默认是2个
 
cluster.routing.allocation.node_concurrent_recoveries: 32
#添加或删除节点及负载均衡时并发恢复的线程个数,默认4个
 
cluster.routing.allocation.node_initial_primaries_recoveries: 32
#初始化数据恢复时,并发恢复线程的个数,默认4个

8测试

8.1查看集群主从分配

http://10.10.1.1:9200/_cat/nodes?v

ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.10.1.1 35 97 0 0.04 0.23 0.22 di - node-3
10.10.1.2 15 97 0 0.04 0.23 0.22 dim * node-1
10.10.1.3 31 97 0 0.04 0.23 0.22 di - node-2

9 x-pack整合

9.1为集群创建认证机构

在其中一台机子上执行

#文件根目录下执行 
bin/elasticsearch-certutil ca

依次输入回车(文件使用默认名),密码
TLS需要X.509证书(X.509 证书是一个数字证书,它使用 X.509 公有密钥基础设施标准将公有密钥与证书中包含的身份相关联。X.509 证书由一家名为证书颁发机构 (CA) 的可信实体颁发。CA 持有一个或多个名为 CA 证书的特殊证书,它使用这种证书来颁发 X.509 证书。只有证书颁发机构才有权访问 CA 证书)才能对与之通信的应用程序执行加密和身份验证。 为了使节点之间的通信真正安全,必须对证书进行验证。

在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。

这样,只需要使用由同一CA签名的证书,即可自动允许该节点加入集群。

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12   #依次输入上一个步骤的密码。回车(文件使用默认名),密码(建议与上一步密码相同)
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password    #并输入第一步输入的密码 
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password  #并输入第一步输入的密码 

9.2 多节点配置

将生成的elastic-certificates.p12、elastic-stack-ca.p12文件mv到config目录下,并连同elasticsearch.keystore 文件 scp到其他节点的config目录中

scp elastic-certificates.p12 elasticsearch.keystore elastic-stack-ca.p12 root@10.10.1.1:/home/wes/elasticsearch-7.15.1/config/ 

9.3修改配置

在elasticsearch-7.15.1/config/elasticsearch.yml中放开注释的最后的配置,启用x-pack安全组件,启用ssl加密通信,并且配置认证证书:


xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

9.3 配置修改完成后,重启es服务,重启成功后

http://10.10.1.1:9200/ 访问Es服务要输入用户名和密码

9.4 密码设置

通过设置访问密码,这是elastic用户和其他一些系统内置用户的密码

bin/elasticsearch-setup-passwords interactive
image.png

完成安装

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容