现况

公司线上环境,随着数据量的增长,存储、查询请求量的增长,单节点已经无法满足使用。需要将单机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) 作为测试机器。

  1. 新建一个主节点(169),将原ES data目录拷贝到新节点中,启动验证是否正常。
  2. 新增4个数据节点(170,171,172,173),设置启动3个节点后同步数据。
  3. 启动数据节点,加入es单节点,等待自动同步数据。
  4. 动态新增2个主节点(151,168)。
  5. 整体停机,更改数据节点配置,设置为3个主节点。
  6. 确认主节点加入后,关停原始主节点(169)。
  7. 设置主节点数据为不存储。删除data数据。启动主节点。
  8. 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 重新索引下。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐