首先准备三台Linux服务器,系统版本Centos7,具备Java环境,最好是JDK11以上。由于ES比较吃内存,所以每台服务器的配置要求为:
我的三个节点分别是HadoopNode01、HadoopNode02、HadoopNode03,以下操作全部基于HadoopNode01进行操作,后面可以通过拷贝实现集群快速安装
1. 下载ES(7.6.2)
ES相关软件网盘链接,提取码j8j9,也可以自己去官网下载
2. 安装
省略解压步骤,我的解压目录是/opt/module/elasticsearch
需要注意的是,ES不支持root用户启动,所以需要新建一个用户
useradd 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
3. 修改配置
修改JVM参数
vim /opt/module/elasticsearch/config/jvm.options
默认内存为1g,我们可以适当的调整一下,我这里给的是521m
修改启动配置
cd /opt/module/elasticsearch/config/
cp elasticsearch.yml elasticsearch.yml.bak
cluster.name: es-cluster
node.name: node-1
path.data: /opt/module/elasticsearch/data
path.logs: /opt/module/elasticsearch/logs
network.host: 192.168.191.13
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
操作系统优化配置
这个配置是在所有节点都需要做的,好像不配置es启动就失败。
vim /etc/sysctl.conf
fs.file-max=655360
vm.max_map_count=655360
sysctl -p
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft memlock unlimited
* hard memlock unlimited
* 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 这个属性,避免节点名称重复。
另外两个节点的配置如下
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.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
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.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
4. 一件启停脚本
集群配置完毕,并且配置了环境变量之后,我们可以分别在每台服务器上执行elasticsearch -d(后台启动) 或elasticsearch 来启动es,但是这样做是很麻烦的。所以这里写了一个脚本。在/usr/local/bin目录下创建文件es.sh ,内容如下
#!/bin/bash
esServers='HadoopNode01 HadoopNode02 HadoopNode03'
USER=es
ROOT=/opt/module
NAME=elasticsearch
DIR=${ROOT}/${NAME}
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集群部署完毕。
5. 安装Head插件
像上面那样去获取ES集群信息总是显得很麻烦,于是一个好用的插件就可以派上用场了,它就是Head 。它可以帮助我们以图形界面的方式查看集群的信息,甚至是操作集群。
安装node
它需要依赖node.js环境
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
npm config set registry https://registry.npm.taobao.org
head插件下载解压
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip -d /opt/module master.zip
安装grunt
cd /opt/module/elasticsearch-head-master
npm install
npm install -g grunt-cli
grunt --version
配置文件修改
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 &
效果
|