现况
公司线上环境,随着数据量的增长,存储、查询请求量的增长,单节点已经无法满足使用。需要将单机ES扩展成集群。
数据量:6亿+,800G+
环境依赖
机器配置:24C,64G虚拟机 centos6.8。
项目版本:es版本7.4.0, jdk版本 1.8。
测试环境改造前
目标
将单节点ES扩展成3个主节点4个数据节点的集群。同时需要保障存量数据可以完整进入新集群中。本文章以测试环境为基础先验证。
思路
现有 151(es-m-01),168(es-m-02),169(es-m-03),170(es-s-01),171(es-s-02),172(es-s-03),173(es-s-04) 作为测试机器。
- 新建一个主节点(169),将原ES data目录拷贝到新节点中,启动验证是否正常。
- 新增4个数据节点(170,171,172,173),设置启动3个节点后同步数据。
- 启动数据节点,加入es单节点,等待自动同步数据。
- 动态新增2个主节点(151,168)。
- 整体停机,更改数据节点配置,设置为3个主节点。
- 确认主节点加入后,关停原始主节点(169)。
- 设置主节点数据为不存储。删除data数据。启动主节点。
- reindex数据,让数据更均匀分布。
环境准备
操作列表
- 下载设置jdk1.8以上
- 将es7.4.0解压放在目录/opt/bssoft/es 下
- 将ik插件(elasticsearch-analysis-ik-7.4.0)放入plugins/
- 更改/etc/security/limits.conf ,追加如下配置
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
es soft memlock unlimited
es hard memlock unlimited
-
修改/etc/sysctl.conf
vm.max_map_count=262144
执行 sysctl -p
-
更改/etc/hosts 文件
192.168.1.151 es-m-01
192.168.1.168 es-m-02
192.168.1.169 es-m-03
192.168.1.170 es-s-01
192.168.1.171 es-s-02
192.168.1.172 es-s-03
192.168.1.173 es-s-04
192.168.1.175 es-s-05
-
添加es用户组用户,更改用户
groupadd es
useradd es -g es -p es
#更改es文件目录权限
chown -R es:es es
- 关闭防火墙,或开放9200和9300端口
效果验证
[es@hosta171 es]$ pwd
/opt/bssoft/es
[es@hosta171 es]$ ll
总用量 556
drwxr-xr-x. 2 es es 4096 9月 27 2019 bin
drwxr-xr-x. 2 es es 178 3月 5 16:37 config
drwxr-xr-x. 3 es es 19 3月 5 14:30 data
drwxr-xr-x. 10 es es 119 9月 27 2019 jdk
drwxr-xr-x. 3 es es 4096 9月 27 2019 lib
-rw-r--r--. 1 es es 13675 9月 27 2019 LICENSE.txt
drwxr-xr-x. 2 es es 4096 3月 5 15:03 logs
drwxr-xr-x. 37 es es 4096 9月 27 2019 modules
-rw-r--r--. 1 es es 523209 9月 27 2019 NOTICE.txt
drwxr-xr-x. 3 es es 25 3月 4 17:21 plugins
-rw-r--r--. 1 es es 8500 9月 27 2019 README.textile README.textile
[es@hosta171 es]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31792
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[es@hosta171 es]$ firewall-cmd --state
not running
操作过程
步骤1 新建一个主节点(169),将原ES data目录拷贝到新节点中,启动验证是否正常。
169 config/elasticsearch.yml
cluster.name: bssoft
node.name: es-m-03
path.data: /opt/bssoft/es/data
path.logs: /opt/bssoft/es/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
#discovery.seed_hosts: ["192.168.1.151","192.168.1.168","192.168.1.169"]
#cluster.initial_master_nodes: ["es-m-01","es-m-02","es-m-03"]
discovery.seed_hosts: ["192.168.1.169"]
cluster.initial_master_nodes: ["es-m-03"]
#gateway.recover_after_nodes: 3
#bootstrap.system_call_filter: false
path.repo: ["/usr/local/backups/es_backup"]
http.cors.enabled: true
http.cors.allow-origin: "*"
node.data: true
node.master: true
拷贝数据,更改目录权限
[root@ev01 data]# scp -rp nodes/ root@192.168.1.169:/opt/bssoft/es/data/
[root@host169 es]#cd /opt/bssoft/es
[root@host169 es]#chown -R es:es data/
切换 es用户,启动elasticsearch
步骤2 新增4个数据节点(170,171,172,173),设置启动3个节点后同步数据。
关闭169 es,更改elasticsearch.yml 开启节点备份
gateway.recover_after_nodes: 3
更改170,171,172,173配置 elasticsearch.yml配置
cluster.name: bssoft
node.name: es-s-01
# node.attr.rack: r1
path.data: /opt/bssoft/es/data
path.logs: /opt/bssoft/es/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
#discovery.seed_hosts: ["192.168.1.151","192.168.1.168","192.168.1.169"]
#cluster.initial_master_nodes: ["es-m-01","es-m-02","es-m-03"]
discovery.seed_hosts: ["192.168.1.169"]
cluster.initial_master_nodes: ["es-s-03"]
gateway.recover_after_nodes: 3
#action.destructive_requires_name: true
bootstrap.system_call_filter: false
path.repo: ["/usr/local/backups/es_backup"]
http.cors.enabled: true
http.cors.allow-origin: "*"
node.data: true
node.master: false
验证集群以及数据同步
http://192.168.1.169:9200/_cat/nodes
192.168.1.171 35 71 2 0.05 0.20 0.40 dil - es-s-02
192.168.1.172 32 57 0 0.00 0.03 0.05 dilm - es-s-03
192.168.1.170 29 57 0 0.00 0.01 0.05 dil - es-s-01
192.168.1.151 15 98 1 0.18 0.14 0.11 dilm * es-m-03
192.168.1.173 23 56 0 0.04 0.05 0.05 dil - es-s-04
步骤3 启动数据节点,加入es单节点,等待自动同步数据。
通过elasticsearch-head看到数据已同步完毕
(博主数据同步的elasticsearch-head截图没有保留)
步骤4 动态新增2个主节点(151,168)。
151,168 更改配置文件
差异配置 discovery.zen.minimum_master_nodes: 2
cluster.name: bssoft
node.name: es-m-01
# node.attr.rack: r1
path.data: /opt/bssoft/es/data
path.logs: /opt/bssoft/es/logs
# Lock the memory on startup:
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.1.151","192.168.1.168","192.168.1.169"]
cluster.initial_master_nodes: ["es-m-01","es-m-02","es-m-03"]
#action.destructive_requires_name: true
#bootstrap.system_call_filter: false
path.repo: ["/usr/local/backups/es_backup"]
http.cors.enabled: true
http.cors.allow-origin: "*"
node.data: false
node.master: true
discovery.zen.minimum_master_nodes: 2
验证集群以及数据同步
http://192.168.1.169:9200/_cat/nodes
192.168.1.168 16 46 1 0.02 0.04 0.05 ilm - es-m-02
192.168.1.169 15 89 1 0.01 0.07 0.05 dilm * es-m-03
192.168.1.171 35 71 2 0.05 0.20 0.40 dil - es-s-02
192.168.1.172 32 57 0 0.00 0.03 0.05 dilm - es-s-03
192.168.1.170 29 57 0 0.00 0.01 0.05 dil - es-s-01
192.168.1.151 15 98 1 0.18 0.14 0.11 ilm - es-m-01
192.168.1.173 23 56 0 0.04 0.05 0.05 dil - es-s-04
效果 图
步骤5 整体停机,更改数据节点配置,设置为3个主节点。
更改169 elasticsearch.yml
discovery.seed_hosts: ["192.168.1.151","192.168.1.168","192.168.1.169"]
cluster.initial_master_nodes: ["es-m-01","es-m-02","es-m-03"]
discovery.zen.minimum_master_nodes: 2
更改170,171,172,173 elasticsearch.yml
discovery.seed_hosts: ["192.168.1.151","192.168.1.168","192.168.1.169"]
cluster.initial_master_nodes: ["es-m-01","es-m-02","es-m-03"]
步骤6 确认主节点加入后,关停原始主节点(169)。
http://192.168.1.169:9200/_cat/nodes
结果应与步骤4一致
步骤7 设置主节点数据为不存储。删除data数据。启动主节点。
将169(es-m-03) kill掉
http://192.168.1.169:9200/_cat/nodes
192.168.1.168 16 46 1 0.02 0.04 0.05 ilm - es-m-02
192.168.1.171 35 71 2 0.05 0.20 0.40 dil - es-s-02
192.168.1.172 32 57 0 0.00 0.03 0.05 dilm - es-s-03
192.168.1.170 29 57 0 0.00 0.01 0.05 dil - es-s-01
192.168.1.151 15 98 1 0.18 0.14 0.11 ilm * es-m-01
192.168.1.173 23 56 0 0.04 0.05 0.05 dil - es-s-04
等待数据同步结束
更改169 elasticsearch.yml
node.data: false
删除169 data下的数据后再次启动
结果验证
http://192.168.1.169:9200/_cat/nodes
192.168.1.168 16 46 1 0.02 0.04 0.05 ilm - es-m-02
192.168.1.169 15 89 1 0.01 0.07 0.05 ilm - es-m-03
192.168.1.171 35 71 2 0.05 0.20 0.40 dil - es-s-02
192.168.1.172 32 57 0 0.00 0.03 0.05 dilm - es-s-03
192.168.1.170 29 57 0 0.00 0.01 0.05 dil - es-s-01
192.168.1.151 15 98 1 0.18 0.14 0.11 ilm * es-m-01
192.168.1.173 23 56 0 0.04 0.05 0.05 dil - es-s-04
elasticsearch-head验证
步骤8 reindex数据,让数据更均匀分布。
发现es-s-02上有全量数据,为了保证数据均匀,建议通过 _reidnex 重新索引下。