首先准备三台Linux服务器,系统版本Centos7,具备Java环境,最好是JDK11以上。由于ES比较吃内存,所以每台服务器的配置要求为:
- CPU:2核
- 内存:2G
我的三个节点分别是HadoopNode01、HadoopNode02、HadoopNode03,以下操作全部基于HadoopNode01进行操作,后面可以通过拷贝实现集群快速安装
ES相关软件网盘链接,提取码j8j9,也可以自己去官网下载
省略解压步骤,我的解压目录是/opt/module/elasticsearch
需要注意的是,ES不支持root用户启动,所以需要新建一个用户
# 新建用户es
useradd es
# 修改elasticsearch目录权限(es:es表示用户名:用户组)
chown -R es:es /opt/module/elasticsearch
解压后目录结构
配置环境变量
vim /etc/profile.d/es.sh
#添加以下内容
export ES_HOME=/opt/module/elasticsearch
export PATH=$PATH:$ES_HOME/bin
# 让配置生效
source /etc/profile
修改JVM参数
vim /opt/module/elasticsearch/config/jvm.options
默认内存为1g,我们可以适当的调整一下,我这里给的是521m
修改启动配置
# 进入config目录
cd /opt/module/elasticsearch/config/
# 备份初始配置
cp elasticsearch.yml elasticsearch.yml.bak
# HadoopNode01
# 编辑elasticsearch.yml,添加以下内容
#集群名称
cluster.name: es-cluster
#节点名称
node.name: node-1
#数据存储路径
path.data: /opt/module/elasticsearch/data
#日志存储路径
path.logs: /opt/module/elasticsearch/logs
#这样配置本机可以访问,因为我的服务器有多个网卡,如果单网卡可以写0.0.0.0
network.host: 192.168.191.13
#http端口
http.port: 9200
#集群内部通信端口
transport.tcp.port: 9300
#是否可以为主节点
node.master: true
#是否为数据节点
node.data: true
#初始主节点
cluster.initial_master_nodes: ["node-1"]
#可以跨域
http.cors.enabled: true
#所有域名都可以访问
http.cors.allow-origin: "*"
#集群节点列表,此处已经提前做好host映射,可替换为真实ip
discovery.seed_hosts: ["HadoopNode01","HadoopNode02","HadoopNode03"]
#可不加
discovery.zen.minimum_master_nodes: 2
操作系统优化配置
这个配置是在所有节点都需要做的,好像不配置es启动就失败。
# 内存优化
vim /etc/sysctl.conf
# 添加以下内容
#系统最大打开文件描述符数
fs.file-max=655360
#限制一个进程拥有虚拟内存区域的大小
vm.max_map_count=655360
# 让配置生效
sysctl -p
# 修改/etc/security/limits.conf
vim /etc/security/limits.conf
#添加以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft memlock unlimited
* hard memlock unlimited
# 修改/etc/security/limits.d/90-nproc.conf
* soft nproc 65536
root soft nproc unlimited
如此,HadoopNode01节点上的ES我们就安装好了,接下来我们可以通过
SCP
命令来把/opt/module/elasticsearch
这个目录分别复制到HadoopNode02和HadoopNode03两个节点。在此之前,我们应该提前做好三个节点之间的免密登陆
,方便我们快速拷贝和后面的一键启动脚本
执行。此处默认已经做好了免密登陆,执行以下命令即可复制
scp -r /opt/module/elasticsearch/ root@HadoopNode02:/opt/module/elasticsearch scp -r /opt/module/elasticsearch/ root@HadoopNode02:/opt/module/elasticsearch
复制到两个节点之后,需要做的事情有给文件夹es用户权限、配置环境变量和修改
elasticsearch.yml
配置文件三件事情,其他的不用动,并且在elasticsearch.yml
配置文件中我们要改的只有node.name
这个属性,避免节点名称重复。
另外两个节点的配置如下
#HadoopNode02
#集群名称
cluster.name: es-cluster
#节点名称
node.name: node-2
#数据存储路径
path.data: /opt/module/elasticsearch/data
#日志存储路径
path.logs: /opt/module/elasticsearch/logs
#这样配置本机可以访问
network.host: 192.168.191.236
#http端口
http.port: 9200
#集群内部通信端口
transport.tcp.port: 9300
#是否可以为主节点
node.master: true
#是否为数据节点
node.data: true
#初始主节点
cluster.initial_master_nodes: ["node-1"]
#可以跨域
http.cors.enabled: true
#所有域名都可以访问
http.cors.allow-origin: "*"
#集群节点列表
discovery.seed_hosts: ["HadoopNode01","HadoopNode02","HadoopNode03"]
#可不加
discovery.zen.minimum_master_nodes: 2
#HadoopNode03
#集群名称
cluster.name: es-cluster
#节点名称
node.name: node-3
#数据存储路径
path.data: /opt/module/elasticsearch/data
#日志存储路径
path.logs: /opt/module/elasticsearch/logs
#这样配置本机可以访问
network.host: 192.168.191.21
#http端口
http.port: 9200
#集群内部通信端口
transport.tcp.port: 9300
#是否可以为主节点
node.master: true
#是否为数据节点
node.data: true
#初始主节点
cluster.initial_master_nodes: ["node-1"]
#可以跨域
http.cors.enabled: true
#所有域名都可以访问
http.cors.allow-origin: "*"
#集群节点列表
discovery.seed_hosts: ["HadoopNode01","HadoopNode02","HadoopNode03"]
#可不加
discovery.zen.minimum_master_nodes: 2
集群配置完毕,并且配置了环境变量之后,我们可以分别在每台服务器上执行
elasticsearch -d(后台启动)
或elasticsearch
来启动es,但是这样做是很麻烦的。所以这里写了一个脚本。在/usr/local/bin目录下创建文件es.sh
,内容如下
#!/bin/bash
#配置ES的安装目录 修改的地方1 脚本可以自己创建
esServers='HadoopNode01 HadoopNode02 HadoopNode03'
USER=es
ROOT=/opt/module
NAME=elasticsearch
DIR=${ROOT}/${NAME}
#启动所有的zk
start(){
for es in $esServers
do
ssh -T $es <<EOF
source ~/.bashrc
su - ${USER} -c "${DIR}/bin/elasticsearch -d"
EOF
echo 从节点 $es 启动elasticsearch...[ done ]
sleep 2
done
}
stop(){
for es in $esServers
do
ssh -T $es <<EOF
source ~/.bashrc
ps aux |grep elasticsearch |grep -v grep |awk '{print \$2}' |xargs kill -9
EOF
echo 从节点 $es 停止elasticsearch...[ done ]
sleep 2
done
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 5
start
;;
*)
echo "Usage: /etc/init.d/${NAME} {start|stop|restart}"
exit 1
esac
给文件可执行权限
chmod 777 es.sh
需要注意的是,这个文件能在集群环境下执行成功的前提是这几个节点之间做了免密登陆!!!!
启动集群
./es.sh start
关闭集群
./es.sh stop
查看日志
默认的日志文件是/opt/module/elasticsearch/logs/es-cluster.log
验证某节点ES是否可用
curl http://ip:9200
查看集群信息
http://某一节点ip:9200/_cluster/health?pretty
至此,有三个节点的并且三个节点都是data节点的es集群部署完毕。
像上面那样去获取ES集群信息总是显得很麻烦,于是一个好用的插件就可以派上用场了,它就是
Head
。它可以帮助我们以图形界面的方式查看集群的信息,甚至是操作集群。
它需要依赖node.js环境
# 下载node
wget https://npmmirror.com/mirrors/node/v16.14.2/node-v16.14.2-linux-x64.tar.xz
# 解压缩
tar -xvf node-v16.14.2-linux-x64.tar.xz -C usr/local
# 配置环境变量
vim /etc/profile.d/node.sh
# 添加以下内容
export NODE_HOME=/opt/module/nodejs
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules
# 保存退出
# 让配置生效
source /etc/profile
# 检查是否配置成功
node -version # 如果显示了node的版本号说明配置成功
# 修改npm镜像源为淘宝镜像源
npm config set registry https://registry.npm.taobao.org
# 下载
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
# 解压
unzip -d /opt/module master.zip
# 进入head解压后的目录
cd /opt/module/elasticsearch-head-master
# 执行安装命令
npm install
# 安装grunt
npm install -g grunt-cli
# 查看版本信息,验证是否安装成功
grunt --version
# 修改Gruntfile.js文件
vim /opt/module/elasticsearch-head-master/Gruntfile.js +99
在
keepalive
下添加一个属性hostname
vim /opt/module/elasticsearch-head-master/_site/app.js +4388
这里是配置的ES的地址,如果与ES在相同的服务器也可以不改变
启动
#当前目录
/opt/module/elasticsearch-head-master
# 启动
nohup grunt server &
效果