资源规划

组件 LTSR003 LTSR005 LTSR006 LTSR007 LTSR008
OS centos7.6 centos7.6 centos7.6 centos7.6 centos7.6
ES N.A N.A Elasticsearch Elasticsearch Elasticsearch/Head
Git N.A N.A N.A N.A git
Node.js N.A N.A N.A N.A node/npm/cnpm

安装介质

版本: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

安装ES

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

解压缩

  1. # 先在节点LTSR006上安装,之后分发到LTSR007、LTSR008
  2. cd ~/software/
  3. wget https://mirrors.huaweicloud.com/elasticsearch/7.6.0/elasticsearch-7.6.0-linux-x86_64.tar.gz
  4. tar -zxvf elasticsearch-7.6.0-linux-x86_64.tar.gz -C ~/modules/

创建相关目录

mkdir -p ~/modules/elasticsearch-7.6.0/logs
mkdir -p ~/modules/elasticsearch-7.6.0/datas

修改配置

  1. 配置elasticsearch.yml。

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

    配置如下:

    # ======================== Elasticsearch Configuration =========================
    # 设置集群名字,其他节点也要一样的名字才能加入集区
    cluster.name: "bigdata-es-cluster"
    # 主节点
    node.master: true
    # 唯一节点名字
    node.name: LTSR006
    # 数据存放目录
    path.data: /home/bigdata/modules/elasticsearch-7.6.0/datas
    # 日志存放目录
    path.logs: /home/bigdata/modules/elasticsearch-7.6.0/logs
    # 绑定ip,否则不能通过远程ip:port访问
    network.host: 192.168.0.16
    http.port: 9200
    # 集群通信端口
    transport.port: 9300
    # ======================== Discovery =========================
    # 所有的集群节点,使其自动发现加入集群(该配置与discovery.zen.ping.unicast.hosts冲突,二选其一)
    # discovery.seed_hosts: ["192.168.0.16:9300", "192.168.0.17:9300", "192.168.0.18:9300"]
    # 指定启动时master节点
    cluster.initial_master_nodes: ["LTSR006"]
    # 候选主节点数,官方推荐(N/2)+1
    discovery.zen.minimum_master_nodes: 2
    # 候选主节点
    discovery.zen.ping.unicast.hosts: ["192.168.0.17:9300", "192.168.0.18:9300"]
    bootstrap.system_call_filter: false
    bootstrap.memory_lock: false
    # 是否支持跨域
    http.cors.enabled: true
    # 支持所有域名
    http.cors.allow-origin: "*"
    
  2. 配置jvm.option。

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

    配置如下:

    # 调整jvm堆内存大小,根据服务器的内存大小进行调整
    -Xms16g
    -Xmx16g
    

    分发

    scp -r ~/modules/elasticsearch-7.6.0 bigdata@LTSR007:~/modules
    scp -r ~/modules/elasticsearch-7.6.0 bigdata@LTSR008:~/modules
    
  3. 对LTSR007修改elasticsearch.yml文件。

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

    配置如下:

    # ======================== Elasticsearch Configuration =========================
    # 设置集群名字,其他节点也要一样的名字才能加入集区
    cluster.name: "bigdata-es-cluster"
    # 主节点
    node.master: true
    # 唯一节点名字
    node.name: LTSR007
    # 数据存放目录
    path.data: /home/bigdata/modules/elasticsearch-7.6.0/datas
    # 日志存放目录
    path.logs: /home/bigdata/modules/elasticsearch-7.6.0/logs
    # 绑定ip,否则不能通过远程ip:port访问
    network.host: 192.168.0.17
    http.port: 9200
    # 集群通信端口
    transport.port: 9300
    # ======================== Discovery =========================
    # 所有的集群节点,使其自动发现加入集群(该配置与discovery.zen.ping.unicast.hosts冲突,二选其一)
    # discovery.seed_hosts: ["192.168.0.16:9300", "192.168.0.17:9300", "192.168.0.18:9300"]
    # 指定启动时master节点
    cluster.initial_master_nodes: ["LTSR006"]
    # 候选主节点数,官方推荐(N/2)+1
    discovery.zen.minimum_master_nodes: 2
    # 候选主节点
    discovery.zen.ping.unicast.hosts: ["192.168.0.16:9300", "192.168.0.18:9300"]
    bootstrap.system_call_filter: false
    bootstrap.memory_lock: false
    # 是否支持跨域
    http.cors.enabled: true
    # 支持所有域名
    http.cors.allow-origin: "*"
    
  4. 对LTSR008修改elasticsearch.yml文件。

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

    配置如下:

    # ======================== Elasticsearch Configuration =========================
    # 设置集群名字,其他节点也要一样的名字才能加入集区
    cluster.name: "bigdata-es-cluster"
    # 主节点
    node.master: true
    # 唯一节点名字
    node.name: LTSR008
    # 数据存放目录
    path.data: /home/bigdata/modules/elasticsearch-7.6.0/datas
    # 日志存放目录
    path.logs: /home/bigdata/modules/elasticsearch-7.6.0/logs
    # 绑定ip,否则不能通过远程ip:port访问
    network.host: 192.168.0.18
    http.port: 9200
    # 集群通信端口
    transport.port: 9300
    # ======================== Discovery =========================
    # 所有的集群节点,使其自动发现加入集群(该配置与discovery.zen.ping.unicast.hosts冲突,二选其一)
    # discovery.seed_hosts: ["192.168.0.16:9300", "192.168.0.17:9300", "192.168.0.18:9300"]
    # 指定启动时master节点
    cluster.initial_master_nodes: ["LTSR006"]
    # 候选主节点数,官方推荐(N/2)+1
    discovery.zen.minimum_master_nodes: 2
    # 候选主节点
    discovery.zen.ping.unicast.hosts: ["192.168.0.16:9300", "192.168.0.17:9300"]
    bootstrap.system_call_filter: false
    bootstrap.memory_lock: false
    # 是否支持跨域
    http.cors.enabled: true
    # 支持所有域名
    http.cors.allow-origin: "*"
    

    修改系统配置

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

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

临时修改:

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

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

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

临时修改:

sudo sysctl -w vm.max_map_count=262144

永久修改:

sudo vi /etc/sysctl.conf

添加配置:

vm.max_map_count=262144

修改完成后执行:

sudo sysctl -p

启动ES

# ES集群所有节点上执行
# 后台启动
# 方式1
nohup /home/bigdata/modules/elasticsearch-7.6.0/bin/elasticsearch 2>&1 &
# 方式2
/home/bigdata/modules/elasticsearch-7.6.0/bin/elasticsearch -d -p pid
pkill -F pid

ES设置service服务

# ES集群所有节点上执行
cd /etc/init.d
sudo vi elasticsearch

脚本如下:

#!/bin/bash
case $1 in
start)
    cd /home/bigdata/modules/elasticsearch-7.6.0
    ./bin/elasticsearch -d -p pid
    echo "elasticsearch startup"
;;
stop)
    es_pid=`ps -ef|grep elasticsearch|grep -v 'grep'|awk '{print $2}'`
    for pid in $es_pid
    do
        kill -9 $pid
    done
    echo "elasticsearch stopped"
;;
restart)
    es_pid=`ps -ef|grep elasticsearch |grep -v 'grep'|awk '{print $2}'`
    for pid in $es_pid
    do
        kill -9 $pid
    done
    echo "elasticsearch stopped"
    cd /home/bigdata/modules/elasticsearch-7.6.0
    ./bin/elasticsearch
    echo "elasticsearch startup"
;;
*)
    echo "start|stop|restart"
;;
esac
exit $?

启停服务:

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

验证

ps -ef | grep elastic
curl -GET http://ltsr006:9200/?pretty

ES Web UI:http://LTSR006:9200/?prettyhttp://LTSR007:9200/?prettyhttp://LTSR008:9200/?pretty

插件安装

Head插件

mkdir -p ~/modules/elasticsearch-7.6.0/myplugins
cd ~/modules/elasticsearch-7.6.0/myplugins
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
cnpm install
cnpm install -g grunt-cli
cnpm install grunt --save
grunt --version

配置Gruntfile.js:

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

内容如下:

connect: {
        server: {
                options: {
                        hostname: '0.0.0.0',
                        port: 9100,
                        base: '.',
                        keepalive: true
                }
        }
}

更新连接信息:

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

启动插件:

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

验证:

# 查看端口
netstat -tunlp |grep 9100
ps -ef | grep grunt
kill -9 <pid>

ES-Head Web UI:http://LTSR008:9100