es集群配置与实际演示
- 1》单服务器多节点部署
- 一、准备环境
- 二、安装jdk
- 三、ElasticSearch部署
- 四、实际演示
- 2》多台服务器集群部署
- 一、准备环境
- 二、安装jdk
- 三、ElasticSearch部署
- 四、实际演示
- 五、密码及集群认证
- 六、其他
集群分类:
ES多节点集群分为两种,一种是多台服务器集群,另一种是单台服务器多节点集群(伪集群)
1》单服务器多节点部署
服务器基础环境说明
系统: CentOS 7
内存: 16G及以上
CPU: 4核及以上
硬盘: 300G及以上(/根分区至少100G、其余给到/var)
(本服务器ip地址为192.168.9.159)
一、准备环境
/etc/security/limits.conf
# 修改系统进程数量、最大打开文件数等配置(加入到.conf文件最底部)
cat >> /etc/security/limits.conf <<"EOF"
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
EOF
/etc/sysctl.conf
# 设置最大映射数量
# 系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上
echo "vm.max_map_count = 655360" >> /etc/sysctl.conf
# 保存并退出后,再输入命令:sysctl -p立即生效
二、安装jdk
上传jdk安装文件,解压,移动到/usr/local/java路径
链接:https://pan.baidu.com/s/1p_eIxUiBWEWpT5OzhdvNvA?pwd=6zw5
tar -zxf jdk-8u271-linux-x64.tar.gz
mv jdk1.8.0_271/ /usr/local/java
编辑 /etc/profile 文件
cat >> /etc/profile <<"EOF"
###java###
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
EOF
让环境变量生效
source /etc/profile
java -version
三、ElasticSearch部署
上传ElasticSearch安装文件、解压、移动到/usr/local/elasticsearch路径
链接:https://pan.baidu.com/s/1p6jDWeKrex9GJlBP6I4_Uw?pwd=a8ge
tar -zxf elasticsearch-7.5.1-linux-x86_64.tar.gz -C /usr/local
修改目录名,拷贝
cd /usr/local/
mv elasticsearch-7.5.1 es-node1
cp -r es-node1 es-node2
cp -r es-node1 es-node3
修改文件和目录的所有者和所属组(因为elasticsearch是不允许root用户启动的,所以需要添加新用户)
mkdir -p /var/data/es-data
mkdir -p /var/data/es-log
useradd es
chown -R es:es /usr/local/es-node1
chown -R es:es /usr/local/es-node2
chown -R es:es /usr/local/es-node3
chown -R es:es /var/data/es-data
chown -R es:es /var/data/es-log
修改配置文件
cd /usr/local/elasticsearch/config/
cp elasticsearch.yml elasticsearch.yml.bak
vim elasticsearch.yml
cluster.name: ss-es # 集群名,同一个集群,集群名必须一致
node.name: node-1 # 节点名称
network.host: 0.0.0.0 # 节点ip
http.port: 9200 # 节点端口
path.data: /var/data/es-data # 数据存放路径
path.logs: /var/data/es-log # 日志存放路径
discovery.seed_hosts: ["192.168.9.159:9300", "192.168.9.159:9301", "192.168.9.159:9302"] # 集群中节点IP
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"] # 集群中节点名称
transport.tcp.port: 9300 # es内部通信端口
node.max_local_storage_nodes: 3 # 单节点可以开启ES实例数
http.cors.enabled: true
http.cors.allow-origin: "*"
# 允许建多少索引分片
cluster.max_shards_per_node: 100000
# 集群级别的断路器,默认为jvm堆的70%
indices.breaker.total.limit: 70%
# 单个request的断路器限制,默认为jvm堆的60%
indices.breaker.request.limit: 40%
# fielddata breaker限制,默认为jvm堆的60%
indices.breaker.fielddata.limit: 40%
# 控制字段数据fielddata允许内存大小,达到HEAP 20%自动清理旧cache
indices.fielddata.cache.size: 20%
indices.breaker.total.use_real_memory: false
拷贝配置文件到另外两个节点
cp elasticsearch.yml /usr/local/es-node2/config/
cp elasticsearch.yml /usr/local/es-node3/config/
修改另外两个节点配置,有差别的配置有:node.name,http.port,transport.tcp.port
将node.name修改为对应节点名,比如node2
将http.port修改为节点需要占用的端口(自定义),比如9201
将transport.tcp.port修改为节点需要占用的端口(自定义),比如9301
启动elasticsearch
su es
cd /usr/local/es-node1/bin # 依次打开es-node1、es-node2、es-node3三个文件夹,并启动es
./elasticsearch -d # 后台启动
./elasticsearch # 非后台启动,主要用于调试
验证是否成功运行
》终端访问 节点IP:9200,显示如图内容,即为ES运行成功
》页面访问 节点IP:9200/_cat/nodes?pretty,页面内容如图即为ES集群运行成功
(其中:* 表示选举为master节点, - 表示为node节点)
四、实际演示
结合之前su+elk监测网络情况的环境进行配置(之前的es是单机单节点模式)
修改logstash中的logstash.conf文件
vim /usr/local/logstash/config/logstash.conf
(只需修改output中es的hosts值即可)
修改kibana中的kibana.yml文件
vim /usr/local/kibana/config/kibana.yml
(只需修改elasticsearch.hosts节点的值即可)
注意:修改如上两个配置文件后,需要分别重启logstash和kibana服务!!!
2》多台服务器集群部署
服务器基础环境说明
服务器数量:三台及以上
系统: CentOS 7
内存: 4G及以上
CPU: 2核及以上
硬盘: 300G及以上(/根分区至少100G、其余给到/var)
主机名 | IP |
---|---|
node1 | 192.168.9.160 |
node2 | 192.168.9.161 |
node3 | 192.168.9.162 |
以下三个环境配置步骤需要三台es服务器分别完成设置
(注意:配置elasticsearch.yml
文件时需要修改对应的节点名称和ip)
一、准备环境
/etc/security/limits.conf
# 修改系统进程数量、最大打开文件数等配置(加入到.conf文件最底部)
cat >> /etc/security/limits.conf <<"EOF"
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
EOF
/etc/sysctl.conf
# 设置最大映射数量
# 系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上
echo "vm.max_map_count = 655360" >> /etc/sysctl.conf
# 保存并退出后,再输入命令:sysctl -p立即生效
二、安装jdk
上传jdk安装文件,解压,移动到/usr/local/java路径
链接:https://pan.baidu.com/s/1p_eIxUiBWEWpT5OzhdvNvA?pwd=6zw5
tar -zxf jdk-8u271-linux-x64.tar.gz
mv jdk1.8.0_271/ /usr/local/java
编辑 /etc/profile 文件
cat >> /etc/profile <<"EOF"
###java###
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
EOF
让环境变量生效
source /etc/profile
java -version
三、ElasticSearch部署
上传ElasticSearch安装文件、解压、移动到/usr/local/elasticsearch路径
链接:https://pan.baidu.com/s/1p6jDWeKrex9GJlBP6I4_Uw?pwd=a8ge
tar -zxf elasticsearch-7.5.1-linux-x86_64.tar.gz
mv elasticsearch-7.5.1 /usr/local/elasticsearch
修改文件和目录的所有者和所属组(因为elasticsearch是不允许root用户启动的,所以需要添加新用户)
mkdir -p /var/data/es-data
mkdir -p /var/data/es-log
useradd es
chown -R es:es /usr/local/elasticsearch/
chown -R es:es /var/data/es-data
chown -R es:es /var/data/es-log
修改配置文件
cd /usr/local/elasticsearch/config/
cp elasticsearch.yml elasticsearch.yml.bak
vim elasticsearch.yml
cluster.name: ss-es # 集群名,同一个集群,集群名必须一致
node.name: node-1 # 节点名称
network.host: 192.168.9.160 # 节点ip(本机ip)
http.port: 9200 # 节点端口
path.data: /var/data/es-data # 数据存放路径
path.logs: /var/data/es-log # 日志存放路径
discovery.seed_hosts: ["192.168.9.160", "192.168.9.161", "192.168.9.162"] # 集群中节点IP
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"] # 集群中节点名称
http.cors.enabled: true
http.cors.allow-origin: "*"
# 允许建多少索引分片
cluster.max_shards_per_node: 100000
# 集群级别的断路器,默认为jvm堆的70%
indices.breaker.total.limit: 70%
# 单个request的断路器限制,默认为jvm堆的60%
indices.breaker.request.limit: 40%
# fielddata breaker限制,默认为jvm堆的60%
indices.breaker.fielddata.limit: 40%
# 控制字段数据fielddata允许内存大小,达到HEAP 20%自动清理旧cache
indices.fielddata.cache.size: 20%
indices.breaker.total.use_real_memory: false
启动elasticsearch
su es
cd /usr/local/elasticsearch/bin
./elasticsearch -d # 后台启动
./elasticsearch # 非后台启动,主要用于调试
验证是否成功运行
》终端访问 节点IP:9200,显示如图内容,即为ES运行成功
》页面访问 节点IP:9200/_cat/nodes?pretty,页面内容如图即为ES集群运行成功
(其中:* 表示选举为master节点, - 表示为node节点)
四、实际演示
结合之前su+elk监测网络情况的环境进行配置(之前的es是单机单节点模式)
修改logstash中的logstash.conf文件
vim /usr/local/logstash/config/logstash.conf
(只需修改output中es的hosts值即可)
修改kibana中的kibana.yml文件
vim /usr/local/kibana/config/kibana.yml
(只需修改elasticsearch.hosts节点的值即可)
注意:修改如上两个配置文件后,需要分别重启logstash和kibana服务!!!
测试是否能够正常运行,查看es集群信息(健康状态、分片、索引等)
参考自: ES查看集群信息(健康状态、分片、索引等)-CSDN博客
1、_cat/shards 查看分片信息
# 查看所有索引的分片信息
curl http://192.168.9.160:9200/_cat/shards?v
# 查看指定索引的分片信息
curl http://192.168.1.101:9200/_cat/shards/索引名称?v
2、_cat/nodes 查看集群的节点信息
curl http://192.168.9.160:9200/_cat/nodes?v
3、_cat/indices 查看索引信息
# 查看所有索引的分片信息
curl http://192.168.9.160:9200/_cat/indices?v
五、密码及集群认证
cd /usr/local/elasticsearch/config/
vim elasticsearch.yml
# 开启x-pack权限认证(三台服务器都添加如下内容并重启)
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
重新启动es
在其中一台es服务器上,配置集群认证证书(执行命令时提示输入路径或密码,可直接回车跳过)
cd /usr/local/elasticsearch
./bin/elasticsearch-certutil ca # 生成证书
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 # 为结点签发证书
以上命令执行完,将生成证书文件:elastic-certificates.p12(默认保存在/usr/local/elasticsearch/路径下)
mv elastic-certificates.p12 config/elastic-certificates.p12
(将证书文件拷贝到config目录下)
将生成的证书文件拷贝到其他节点服务器上(注意!需要修改elastic-certificates.p12文件的权限为es才行)
scp config/elastic-certificates.p12 root@192.168.9.161:/usr/local/elasticsearch/config/
scp config/elastic-certificates.p12 root@192.168.9.162:/usr/local/elasticsearch/config/
继续修改elasticsearch.yml配置文件(三台服务器都新增如下内容):
vim elasticsearch.yml
xpack.security.transport.ssl.verification_mode: none
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
重新启动es
在其中一台es服务器上,配置初始化密码(第一次输入y确认,再依次输入密码即可)
./bin/elasticsearch-setup-passwords interactive
测试输入用户名、密码是否正常登录查询
curl 192.168.9.160:9200 -u elastic:密码 # elastic是默认用户名
参考自:es用户认证与鉴权入门配置-CSDN博客
六、其他
es配置优化
- refresh_interval
索引刷新间隔,默认为1s,对数据实时性要求不需要那么大的情况下可以设置大一点。
可以将写入的ES配置大一点,可以设置为5m;读的ES可以保持不变。
需用命令修改:
curl -H "Content-Type: application/json" -XPUT 'http://192.168.200.1:9200/_settings' -d '{"refresh_interval": "5m"}'
- index buffer(在elasticsearch.yml中添加)
- indices.memory.index_buffer_size
(静态)接受百分比或字节大小值。它默认为10%,这意味着10%分配给节点的总堆中的将用作所有分片共享的索引缓冲区大小。 - indices.memory.min_index_buffer_size
(静态)如果index_buffer_size指定为百分比,则此设置可用于指定绝对最小值。默认为48mb。
如:indices.memory.index_buffer_size: 512mb
- indices.memory.max_index_buffer_size
(静态) 如果index_buffer_size指定为百分比,则此设置可用于指定绝对最大值。默认为无界。 - 均可直接写在elasticsearch.yml中。
- indices.memory.index_buffer_size
- jvm.options
Xms和Xmx,根据服务器实际内存修改。直接修改jvm.options - 系统层面修改swap分区
关闭swap分区,从内存交换到硬盘,再到内存,磁盘io较大,影响性能。
关闭命令:swapoff -a
永久关闭命令:sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab