Elasticsearch集群安装

Elasticsearch集群安装

1.环境准备

OS: CentOS Linux release 7.9.2009 (Core)

机器:

IP node cpu 内存 存储
10.28.19.110 node1 16 核 16 G 200 G
10.28.19.111 node2 16 核 16 G 200 G
10.28.19.112 node3 16 核 16 G 200 G

安装版本:7.15.2
Elasticsearch:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
Kibana: https://www.elastic.co/cn/downloads/past-releases#kibana

提前下载好elasticsearch-7.15.2-linux-x86_64.tar.gzkibana-7.15.2-linux-x86_64.tar.gz,上传至/opt目录下。

Java环境:

ES依赖于java环境,请确保机器上已有安装java环境,ES7.x版本对应的是JDK1.8,版本不要弄错。

未安装可自行下载java安装包,进行安装。

java国内下载镜像站:http://www.codebaoku.com/jdk/jdk-oracle-jdk1-8.html

rpm -ivh jdk-8u351-linux-x64.rpm

安装必要组件:

yum install -y wget unzip lrzsz bzip2 git lsof

上面组件必须要安装,为后面的es安装做准备。

2.系统优化

请注意,所有es机器节点都需要进行系统优化操作。

优化inux资源限制配置文件limits.conf
vim /etc/security/limits.conf
添加以下内容:

# 进程可以最大打开的文件数
* soft nofile 655350
* hard nofile 655350
# 进程可以创建的线程数
* soft nproc 102400
* hard nproc 409600
# 允许进程锁定内存
* soft memlock unlimited
* hard memlock unlimited

  • 第一列表示用户和组(@开头)。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值;
  • hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值;
  • core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了。

limits.conf详解

修改Linux系统配置文件sysctl.conf

vim /etc/sysctl.conf

添加以下内容:

vm.max_map_count = 262145
fs.file-max=655360

执行下面命令,立即生效:

sysctl -p
  • max_map_count: 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量

  • fs.file-max: 系统中可以同时打开的文件数目

开启端口

这里提前开启端口,为了方便后续的测试验证使用

5601为kibana端口, 9100为head端口, 9200为服务端口,9300为内部节点之间沟通端口
下面命令在所有ES机器上执行:

firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
firewall-cmd --reload

3.安装ES节点

3.1安装

规划ES安装目录是/opt

规划ES数据及日志存储目录为/data

elasticsearch-7.15.2-linux-x86_64.tar.gz安装包提前放置在/opt目录下

所有机器上执行如下命令,解压并重命名

cd /opt
tar -xf elasticsearch-7.15.2-linux-x86_64.tar.gz
mv elasticsearch-7.15.2 elasticsearch
mkdir -p /data/es-data
mkdir -p /data/es-logs
  • /opt/elasticsearch 安装目录
  • /data/es-data 数据存储目录
  • /data/es-logs 日志存储目录

3.2创建es用户

从5.0开始 elasticsearch 提高了安全级别,禁止采用root帐号启动, 所以需要添加一个用户用来启动 elasticsearch

创建es用户,并赋予权限:

useradd es
chown es:es -R /opt/elasticsearch
chown es:es -R /data/es-data
chown es:es -R /data/es-logs

3.3修改配置文件

分别修改3台机器配置文件:

调整内存大小

vi /opt/elasticsearch/config/jvm.options

一般Xmx不建议超过物理服务器内存的一半,以16G内存为例,改为如下:

-Xms12g
-Xmx12g

修改 elasticsearch.yaml

vim /opt/elasticsearch/config/elasticsearch.yml

配置文件是yaml语法,注意key与value之间要有空格

# 解决跨域问题
http.cors.enabled: true
# 解决跨域问题
http.cors.allow-origin: "*"
# es集群名称,默认elasticsearch,es会自动发现在同一网段下es,如果在同一网段下有多个集群,可用这个属性来区分不同的集群
cluster.name: scsales
# 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中
node.name: node1
# 是不是有资格竞选主节点
node.master: true
# 是否存储数据
node.data: true
# 最大集群节点数
node.max_local_storage_nodes: 3
# 网关地址
network.host: 0.0.0.0
# 设置对外服务的http端口,默认为9200
http.port: 9200
# 内部节点之间沟通端口
transport.tcp.port: 9300
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["10.28.19.110","10.28.19.111","10.28.19.112"]
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1", "node2","node3"]
# 数据存储路径
path.data: /data/es-data
# 日志存储路径
path.logs: /data/es-logs
# 7.13以上版本,禁用安全选项
xpack.security.enabled: false

3台es节点机器elasticsearch.yml配置文件的区别:

就只有node.name: node1 参数不一样

修改10.28.19.111上配置文件,将 node.name: node1 改为 node.name: node2

sed -i 's#node.name: node1#node.name: node2#g' /opt/elasticsearch/config/elasticsearch.yml

修改10.28.19.112上配置文件,将 node.name: node1 改为 node.name: node3

sed -i 's#node.name: node1#node.name: node3#g' /opt/elasticsearch/config/elasticsearch.yml

3.4安装插件

这里安装下ik中文分词器插件、拼英分词器插件

ik中文分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases

拼英分词器:https://github.com/medcl/elasticsearch-analysis-pinyin/releases

注意,下载插件时,请与安装的ES版本保持一至 ,当前ES安装版本为7.15.2,那么下载的插件版本也要为7.15.2。

cd /opt
wget https://ghproxy.com/https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.2/elasticsearch-analysis-ik-7.15.2.zip
wget https://ghproxy.com/https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.15.2/elasticsearch-analysis-pinyin-7.15.2.zip

因为无法访问github,插件下载是借道github加速网站。

解压放入ES插件目录下:

unzip -d /opt/elasticsearch/plugins/ik elasticsearch-analysis-ik-7.15.2.zip
unzip -d /opt/elasticsearch/plugins/pinyin elasticsearch-analysis-pinyin-7.15.2.zip

再次授权安装目录:

chown -R es:es /opt/elasticsearch

3.5创建ES服务脚本

ES服务脚本放置在/etc/init.d

在所有ES机器节点上创建服务脚本文件:

cat << \EOF > /etc/init.d/elasticsearch
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch
#processname: elasticsearch-7.15.2

# 这个目录是你Es所在文件夹的目录
export ES_HOME=/opt/elasticsearch
case $1 in
start)
    # 切换至es用户
    su es<<!
    # 进入es根目录
    cd $ES_HOME
    # 启动,并将进程号写入至pid文件中
    ./bin/elasticsearch -d -p $ES_HOME/pid
    # 退出es用户
    exit
!
    echo "elasticsearch startup"
    ;;  
stop)
    # 获取es进程号
    es_pid=`cat $ES_HOME/pid`
    # 杀掉es进程
    kill -9 $es_pid
    echo "elasticsearch stopup"
    ;;  
restart)
    # 获取es进程号
    es_pid=`cat $ES_HOME/pid`
    # 杀掉es进程
    kill -9 $es_pid
    echo "elasticsearch stopup"
    # 切换至es用户
    su es<<!
    # 进入es根目录
    cd $ES_HOME
    # 启动,并将进程号写入至pid文件中
    ./bin/elasticsearch -d -p $ES_HOME/pid
    exit
!
    echo "elasticsearch startup"
    ;;  
*)
    echo "start|stop|restart"
    ;;  
esac
EOF

注意,当中的su es<es为用户

授权为可执行

chmod +x /etc/init.d/elasticsearch

每台机器依次启动服务:

service elasticsearch start

停止、重启命令如下:

service elasticsearch stop
service elasticsearch restart

测试访问ES:

http://10.28.19.110:9200

http://10.28.19.111:9200

http://10.28.19.112:9200

每台机器ES服务设置为开机启动:

chkconfig --add elasticsearch

4.安装Kibana

4.1安装Kibana

Kibana安装单节点即可,这里规划安装在10.28.19.110机器上

kibana-7.15.2-linux-x86_64.tar.gz安装包提前放置在/opt目录下

cd /opt
tar -xf kibana-7.15.2-linux-x86_64.tar.gz
mv kibana-7.15.2 elasticsearch-kibana

修改kibana配置文件

vim /opt/elasticsearch-kibana/config/kibana.yml

最下面添加以下内容,配置文件是yaml语法,注意key与value之间要有空格

# 对外访问服务端口
server.port: 5601
# 默认值:“localhost”此设置指定后端服务器的主机
server.host: "0.0.0.0"
# 服务名称,默认值:“your-hostname”用于标识此Kibana实例的可读显示名称
server.name: "kibana"
# kibana中文界面显示
i18n.locale: "zh-CN"
# Elasticsearch实例
elasticsearch.hosts:
- http://10.28.19.110:9200
- http://10.28.19.111:9200
- http://10.28.19.112:9200
# 指定Kibana进程ID文件的路径
pid.file: /opt/elasticsearch-kibana/pid

同样,这里kibana也授权给es来启动

授权给es用户组

chown es:es -R /opt/elasticsearch-kibana

4.2创建Kibana服务脚本

创建Kibana服务脚本

cat << \EOF > /etc/init.d/kibana
#!/bin/sh
#chkconfig: 2345 80 05
#description: kibana
#processname: kibana-7.15.2

# 这个目录是你Kibana所在文件夹的目录
export KIBANA_HOME=/opt/elasticsearch-kibana
case $1 in
start)
    # 切换至es用户
    su es<<!
    # 启动,并将进程号写入至pid文件中
    nohup $KIBANA_HOME/bin/kibana >>/dev/null 2>&1 &
    # 退出es用户
    exit
!
    echo "kibana startup"
    ;;  
stop)
    # 获取es进程号
    es_pid=`cat $KIBANA_HOME/pid`
    # 杀掉es进程
    kill -9 $es_pid
    echo "kibana stopup"
    ;;  
restart)
    # 获取es进程号
    es_pid=`cat $KIBANA_HOME/pid`
    # 杀掉es进程
    kill -9 $es_pid
    echo "kibana stopup"
    # 切换至es用户
    su es<<!
    # 启动,并将进程号写入至pid文件中
    nohup $KIBANA_HOME/bin/kibana >>/dev/null 2>&1 &
    exit
!
    echo "kibana startup"
    ;;  
*)
    echo "start|stop|restart"
    ;;  
esac
EOF

授权为可执行:

chmod +x /etc/init.d/kibana

注意,kibana配置文件中一定要有指定pid存放位置,且需要与这里服务脚本中的pid位置一致

启动、停止、重启:

service kibana start
service kibana stop
service kibana restart

测试访问Kibana:http://10.28.19.110:5601

添加为开机启动

chkconfig --add kibana

5.安装head图形化管理工具

elasticsearch-head是一款专门针对于elasticsearch的客户端工具,可实现es web图形化管理。
head只需要安装单节点即可,规划安装在10.28.19.110机器上。

5.1安装head

head是一个基于node.js的前端工程,需借助nodejs编译

指定node安装版本:

curl --silent --location https://rpm.nodesource.com/setup_16.x | bash -v

安装node:

yum install -y nodejs

下载head源码:

(github访问正常情况下,访问官网:git clone git://github.com/mobz/elasticsearch-head.git,这里无法访问github,所以从github加速站下载)

cd /opt
git clone https://ghproxy.com/https://github.com/mobz/elasticsearch-head

elasticsearch-head/_site/app.js文件,修改ES地址,大概在4388行

sed -i 's#http://localhost:9200#http://10.28.19.110:9200#g' /opt/elasticsearch-head/_site/app.js

http://localhost:9200 改为 http://10.28.19.110:9200

编译head,这里采用的是国内镜像源:

cd /opt/elasticsearch-head
npm install -g cnpm --registry=https://registry.npmmirror.com
npm install grunt --save-dev

授权给es

chown es:es -R /opt/elasticsearch-head

5.2创建head服务脚本

创建服务脚本

cat << \EOF > /etc/init.d/elasticsearch-head
#!/bin/bash
#chkconfig: 345 63 37
#description elasticsearch-head

# nodejs 安装路径
export HEAD_HOME=/opt/elasticsearch-head
case $1 in
start)
    # 切换至es用户
    su es<<!
    cd $HEAD_HOME
    # 启动
    nohup npm run start >$HEAD_HOME/nohup.out 2>&1 &
    # 退出es用户
    exit
!
    echo "elasticsearch-head is started"
    ;;
stop)
    echo `lsof -t -i:9100` > $HEAD_HOME/pid
    pid=`cat $HEAD_HOME/pid`
    kill -9 $pid
    echo "elasticsearch-head is stopped"
    ;;
restart)
    echo `lsof -t -i:9100` > $HEAD_HOME/pid
    pid=`cat $HEAD_HOME/pid`
    kill -9 $pid
    echo "elasticsearch-head is stopped"
    sleep 1
    # 切换至es用户
    su es<<!
    cd $HEAD_HOME
    nohup npm run start >$HEAD_HOME/nohup.out 2>&1 &
    # 退出es用户
    exit
!
    echo "elasticsearch-head is started"
    ;;
*)
    echo "start|stop|restart"
;;
esac
exit 0
EOF

注意,当中的su es<es为用户

授权为可执行

chmod +x /etc/init.d/elasticsearch-head

每台机器依次启动服务:

service elasticsearch-head start

停止、重启命令如下:

service elasticsearch-head stop
service elasticsearch-head restart

测试访问head:

http://10.28.19.110:9100

将head设置为开机启动:

chkconfig --add elasticsearch-head

6.引用 Reference

Kubernetes 1.25.4版本安装
kubeasz安装kubernetes1.25.5
CentOS8搭建nfs服务
k8s一键安装redis单机版
k8s一键安装mysql8单机版
Docker制作springboot运行应用镜像
k8s部署springboot应用
zookeeper集群安装
Nginx日志切割
Elasticsearch单机版本安装
Elasticsearch集群安装
springboot集成prometheus+grafana
安装Docker及学习
RabbitMQ集群安装

你可能感兴趣的:(Elasticsearch,ES,elasticsearch)