资源规划

组件 bigdata-node1 bigdata-node2 bigdata-node3
OS centos7.6 centos7.6 centos7.6
elasticsearch Elasticsearch Elasticsearch Elasticsearch
Git git N.A N.A
Node.js node/npm N.A N.A
Zip zip/unzip zip/unzip zip/unzip

安装介质

版本:elasticsearch-7.6.0-linux-x86_64.tar.gz
下载:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
镜像:https://mirrors.huaweicloud.com/elasticsearch

环境准备

安装Git

参考:《CentOS7.6-安装Git

安装Node.js

参考:《CentOS7.6-安装Node.js

安装Zip

参考:《CentOS7.6-安装Zip

安装ES

注意:ES不能使用root用户来启动,必须使用普通用户来安装启动。

解压缩

  1. # 先在节点bigdata-node1上安装并修改配置文件,之后分发到bigdata-node2、bigdata-node3
  2. tar -zxvf /share/elasticsearch-7.6.0-linux-x86_64.tar.gz -C ~/modules/

创建相关目录

  1. mkdir -p ~/modules/elasticsearch-7.6.0/logs
  2. mkdir -p ~/modules/elasticsearch-7.6.0/datas

修改配置

  1. 配置elasticsearch.yml。

    1. rm -rf ~/modules/elasticsearch-7.6.0/config/elasticsearch.yml
    2. vi ~/modules/elasticsearch-7.6.0/config/elasticsearch.yml

    配置如下:

    1. # ======================== Elasticsearch Configuration =========================
    2. # 设置集群名字,其他节点也要一样的名字才能加入集区
    3. cluster.name: "bigdata-es-cluster"
    4. # 主节点
    5. node.master: true
    6. # 唯一节点名字
    7. node.name: bigdata-node1
    8. # 数据存放目录
    9. path.data: /home/vagrant/modules/elasticsearch-7.6.0/datas
    10. # 日志存放目录
    11. path.logs: /home/vagrant/modules/elasticsearch-7.6.0/logs
    12. # 绑定ip,否则不能通过远程ip:port访问
    13. network.host: 192.168.0.101
    14. http.port: 9200
    15. # 集群通信端口
    16. transport.port: 9300
    17. # ======================== Discovery =========================
    18. # 所有的集群节点,使其自动发现加入集群(该配置与discovery.zen.ping.unicast.hosts冲突,二选其一)
    19. # discovery.seed_hosts: ["192.168.0.101:9300", "192.168.0.102:9300", "192.168.0.103:9300"]
    20. # 指定启动时master节点
    21. cluster.initial_master_nodes: ["bigdata-node1"]
    22. # 候选主节点数,官方推荐(N/2)+1
    23. discovery.zen.minimum_master_nodes: 2
    24. # 候选主节点
    25. discovery.zen.ping.unicast.hosts: ["192.168.0.102:9300", "192.168.0.103:9300"]
    26. bootstrap.system_call_filter: false
    27. bootstrap.memory_lock: false
    28. # 是否支持跨域
    29. http.cors.enabled: true
    30. # 支持所有域名
    31. http.cors.allow-origin: "*"
  2. 配置jvm.option。

    1. vi ~/modules/elasticsearch-7.6.0/config/jvm.options

    配置如下:

    1. # 调整jvm堆内存大小,根据服务器的内存大小进行调整
    2. -Xms2g
    3. -Xmx2g

    分发

    1. scp -r ~/modules/elasticsearch-7.6.0 bigdata-node2:~/modules
    2. scp -r ~/modules/elasticsearch-7.6.0 bigdata-node3:~/modules
  3. 对bigdata-node2修改elasticsearch.yml文件。

    1. rm -rf ~/modules/elasticsearch-7.6.0/config/elasticsearch.yml
    2. vi ~/modules/elasticsearch-7.6.0/config/elasticsearch.yml

    配置如下:

    1. # ======================== Elasticsearch Configuration =========================
    2. # 设置集群名字,其他节点也要一样的名字才能加入集区
    3. cluster.name: "bigdata-es-cluster"
    4. # 主节点
    5. node.master: true
    6. # 唯一节点名字
    7. node.name: bigdata-node2
    8. # 数据存放目录
    9. path.data: /home/vagrant/modules/elasticsearch-7.6.0/datas
    10. # 日志存放目录
    11. path.logs: /home/vagrant/modules/elasticsearch-7.6.0/logs
    12. # 绑定ip,否则不能通过远程ip:port访问
    13. network.host: 192.168.0.102
    14. http.port: 9200
    15. # 集群通信端口
    16. transport.port: 9300
    17. # ======================== Discovery =========================
    18. # 所有的集群节点,使其自动发现加入集群(该配置与discovery.zen.ping.unicast.hosts冲突,二选其一)
    19. # discovery.seed_hosts: ["192.168.0.101:9300", "192.168.0.102:9300", "192.168.0.103:9300"]
    20. # 指定启动时master节点
    21. cluster.initial_master_nodes: ["bigdata-node1"]
    22. # 候选主节点数,官方推荐(N/2)+1
    23. discovery.zen.minimum_master_nodes: 2
    24. # 候选主节点
    25. discovery.zen.ping.unicast.hosts: ["192.168.0.101:9300", "192.168.0.103:9300"]
    26. bootstrap.system_call_filter: false
    27. bootstrap.memory_lock: false
    28. # 是否支持跨域
    29. http.cors.enabled: true
    30. # 支持所有域名
    31. http.cors.allow-origin: "*"
  4. 对bigdata-node3修改elasticsearch.yml文件。

    1. rm -rf ~/modules/elasticsearch-7.6.0/config/elasticsearch.yml
    2. vi ~/modules/elasticsearch-7.6.0/config/elasticsearch.yml

    配置如下:

    1. # ======================== Elasticsearch Configuration =========================
    2. # 设置集群名字,其他节点也要一样的名字才能加入集区
    3. cluster.name: "bigdata-es-cluster"
    4. # 主节点
    5. node.master: true
    6. # 唯一节点名字
    7. node.name: bigdata-node3
    8. # 数据存放目录
    9. path.data: /home/vagrant/modules/elasticsearch-7.6.0/datas
    10. # 日志存放目录
    11. path.logs: /home/vagrant/modules/elasticsearch-7.6.0/logs
    12. # 绑定ip,否则不能通过远程ip:port访问
    13. network.host: 192.168.0.103
    14. http.port: 9200
    15. # 集群通信端口
    16. transport.port: 9300
    17. # ======================== Discovery =========================
    18. # 所有的集群节点,使其自动发现加入集群(该配置与discovery.zen.ping.unicast.hosts冲突,二选其一)
    19. # discovery.seed_hosts: ["192.168.0.101:9300", "192.168.0.102:9300", "192.168.0.103:9300"]
    20. # 指定启动时master节点
    21. cluster.initial_master_nodes: ["bigdata-node1"]
    22. # 候选主节点数,官方推荐(N/2)+1
    23. discovery.zen.minimum_master_nodes: 2
    24. # 候选主节点
    25. discovery.zen.ping.unicast.hosts: ["192.168.0.101:9300", "192.168.0.102:9300"]
    26. bootstrap.system_call_filter: false
    27. bootstrap.memory_lock: false
    28. # 是否支持跨域
    29. http.cors.enabled: true
    30. # 支持所有域名
    31. http.cors.allow-origin: "*"

    修改系统配置

    由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等,故需要给普通用户解开资源的束缚。(注意**:所有节点都要操作**

  5. 解除linux系统打开文件最大数目的限制。

临时修改:

  1. # 临时修改某用户(非root)的最大打开文件数(-S指soft,-H指hard)
  2. sudo sh -c "ulimit -SHn 65535 && exec su $LOGNAME"

永久修改(需重启才能生效):

  1. # 查看最大文件句柄数
  2. ulimit -S -n
  3. ulimit -H -n
  4. ulimit -a
  5. sudo vi /etc/security/limits.conf
  1. 配置如下:
  1. * soft nofile 65536
  2. * hard nofile 65536
  1. 更新最大线程数限制。
    1. # 系统限制用户最多可以运行多少进程或线程
    2. ulimit -u
    3. sudo vi /etc/security/limits.d/20-nproc.conf
    配置如下: ```shell
  • soft nproc 4096
  • hard nproc 4096 ```
  1. 虚拟内存扩容。

临时修改:

  1. sudo sysctl -w vm.max_map_count=262144

永久修改:

  1. sudo vi /etc/sysctl.conf

添加配置:

  1. vm.max_map_count=262144

修改完成后执行:

  1. sudo sysctl -p

启动ES

  1. # 所有节点上执行
  2. # 后台启动
  3. # 方式1
  4. nohup /home/vagrant/modules/elasticsearch-7.6.0/bin/elasticsearch 2>&1 &
  5. # 方式2
  6. /home/vagrant/modules/elasticsearch-7.6.0/bin/elasticsearch -d -p pid
  7. pkill -F pid

ES设置service服务

  1. cd /etc/init.d
  2. sudo vi elasticsearch

脚本如下:

  1. #!/bin/bash
  2. case $1 in
  3. start)
  4. cd /home/vagrant/modules/elasticsearch-7.6.0
  5. ./bin/elasticsearch -d -p pid
  6. echo "elasticsearch startup"
  7. ;;
  8. stop)
  9. es_pid=`ps -ef|grep elasticsearch|grep -v 'grep'|awk '{print $2}'`
  10. for pid in $es_pid
  11. do
  12. kill -9 $pid
  13. done
  14. echo "elasticsearch stopped"
  15. ;;
  16. restart)
  17. es_pid=`ps -ef|grep elasticsearch |grep -v 'grep'|awk '{print $2}'`
  18. for pid in $es_pid
  19. do
  20. kill -9 $pid
  21. done
  22. echo "elasticsearch stopped"
  23. cd /home/vagrant/modules/elasticsearch-7.6.0
  24. ./bin/elasticsearch
  25. echo "elasticsearch startup"
  26. ;;
  27. *)
  28. echo "start|stop|restart"
  29. ;;
  30. esac
  31. exit $?

启停服务:

  1. # shell脚本M-BM-字符问题
  2. sudo sed -i 's/\xc2\xa0/ /g' elasticsearch
  3. sudo chmod 755 elasticsearch
  4. # 此处请使用非root用户执行
  5. service elasticsearch start
  6. service elasticsearch stop
  7. service elasticsearch restart

验证

  1. ps -ef | grep elastic
  2. curl -GET http://bigdata-node1:9200/?pretty

ES Web UI:http://bigdata-node1:9200/?pretty

插件安装

Head插件

  1. mkdir -p ~/modules/elasticsearch-7.6.0/myplugins
  2. cd ~/modules/elasticsearch-7.6.0/myplugins
  3. git clone git://github.com/mobz/elasticsearch-head.git
  4. cd elasticsearch-head
  5. cnpm install
  6. cnpm install -g grunt-cli
  7. cnpm install grunt --save
  8. grunt --version

配置Gruntfile.js:

  1. vi ~/modules/elasticsearch-7.6.0/myplugins/elasticsearch-head/Gruntfile.js

内容如下:

  1. connect: {
  2. server: {
  3. options: {
  4. hostname: '0.0.0.0',
  5. port: 9100,
  6. base: '.',
  7. keepalive: true
  8. }
  9. }
  10. }

更新连接信息:

  1. # 注意转义字符(/、.,冒号:不需要转义)
  2. sed -i 's/http:\/\/localhost:9200/http:\/\/192\.168\.0\.101:9200/g' ~/modules/elasticsearch-7.6.0/myplugins/elasticsearch-head/_site/app.js

启动插件:

  1. cd ~/modules/elasticsearch-7.6.0/myplugins/elasticsearch-head
  2. # 前台运行
  3. cnpm run start
  4. # 后台运行
  5. # 方式1
  6. nohup cnpm run start > /dev/null 2>&1 &
  7. # 方式2
  8. nohup grunt server &

验证:

  1. # 查看端口
  2. netstat -tunlp |grep 9100
  3. ps -ef | grep grunt
  4. kill -9 <pid>

ES-Head Web UI:http://bigdata-node1:9100

分词插件

  1. # 在线安装
  2. cd ~/modules/elasticsearch-7.6.0
  3. ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.0/elasticsearch-analysis-ik-7.6.0.zip
  4. # 离线安装
  5. mkdir -p ~/modules/elasticsearch-7.6.0/plugins/ik
  6. cp /share/elasticsearch-analysis-ik-7.6.0.zip ~/modules/elasticsearch-7.6.0/plugins/ik/
  7. cd ~/modules/elasticsearch-7.6.0/plugins/ik
  8. unzip elasticsearch-analysis-ik-7.6.0.zip
  9. rm -rf elasticsearch-analysis-ik-7.6.0.zip

验证:

  1. curl -XGET http://bigdata-node1:9200/_analyze?pretty -H 'Content-Type:application/json' -d'
  2. {
  3. "analyzer": "ik_smart",
  4. "text": "北极星测试分词工具是否好用"
  5. }'

参考

博客园:配置Elasticsearch集群
https://www.cnblogs.com/sparkdev/p/11044662.html
简书:(十四)Elasticsearch集群配置
https://www.jianshu.com/p/15d6241e7844