集群分类:
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配置优化

  1. refresh_interval
    索引刷新间隔,默认为1s,对数据实时性要求不需要那么大的情况下可以设置大一点。
    可以将写入的ES配置大一点,可以设置为5m;读的ES可以保持不变。
    需用命令修改:
    curl -H "Content-Type: application/json" -XPUT 'http://192.168.200.1:9200/_settings' -d '{"refresh_interval": "5m"}'
  2. 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中。
  3. jvm.options
    Xms和Xmx,根据服务器实际内存修改。直接修改jvm.options
  4. 系统层面修改swap分区
    关闭swap分区,从内存交换到硬盘,再到内存,磁盘io较大,影响性能。
    关闭命令:swapoff -a
    永久关闭命令:sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐