官方网址:Download Elasticsearch | Elastic
基础部署
-
下载最新版本,使用SFTP传输协议上传至目标服务器目标文件夹当中。
-
解压软件包
tar -xvf xx.tar.gz
-
进入文件夹关掉xpack:
vim config/elasticsearch.yml 更改xpack.security.enabled: false
-
创建用户组:
groupadd es
-
创建用户:
useradd es -g es
-
将解压出来的软件包所有人由root更换为es:
chown es:es '解压文件夹'
-
登陆es用户:
su es
-
进入文件夹中使用启动命令:
bin/elasticsearch -d (后台启动)
-
返回root用户后使用curl localhost:9200 显示以为信息为成功:
进阶部署
自定义部署及外界访问
-
创建数据存放目录:
mkdir data
-
创建日志文件存放目录:
mkdir log
-
更改配置文件:
vim config/elasticsearch.yml
-
自定义使用名:
cluster.name: test_one
-
自定义节点名:
node.name: test_node-1
-
更改数据存放目录:
path.data: /usr/local/software/elastic/data
-
更改日志存放目录:
path.logs: /usr/local/software/elastic/log
-
更改访问地址为本机的静态IP:
network.host: 192.168.47.47
-
更改软件占用端口:
http.port: 9200
-
保存退出::wq
-
查询现存的es进程:
ps -ef | grep elastic
-
使用命令杀死相关进程号:
kill -9 xxxx
-
指定防火墙开放配置的端口供外界访问:
firewall-cmd --add-port=9200/tcp --permanent
-
刷新防火墙:
firewall-cmd --reload
-
启动es稍作等待后在外界浏览器输入:192.168.47.47:9200,下图为成功:
伪集群搭建(单个服务器多个ES)
1.为每个node(节点)分别创建其数据目录和日志目录,不能共用并赋予给用户es所有权:
cd /usr/local/software/elastic/data
mkdir node_1 node_2
cd ../log
mkdir node_1 node_2
cd ..
chown -R es:es data log
2.将原es文件夹规范重命名并新建一个节点文件夹:
mv elasticsearch-8.1.2 elasticsearch-8.1.2-node1
mkdir elasticsearch-8.1.2-node2
3.进入node1并修改配置文件:
cd elasticsearch-8.1.2-nodel
vim config/elasticsearch.yml
cluster.name: test
node.name: test_node-1
path.data: /usr/local/software/elastic/data/node_1
path.logs: /usr/local/software/elastic/log/node_1
network.host: 192.168.47.47
http.port: 9200
transport.port: 9205 (新增、自定义)
discovery.seed_hosts: ["192.168.47.47:9205", "192.168.47.47:9206"]
cluster.initial_master_nodes: ["test_node-1", "test_node-2"]
http.cors.enabled: true (新增)
http.cors.allow-origin: "*" (新增)
//注意冒号后需要跟一个空格
4.保存退出返回安装根目录,将node1中的所有文件复制到node2文件夹中:
cp -r elasticsearch-8.1.2-node1/* elasticsearch-8.1.2-node2
5.进入node2根据node1的配置文件修改相关配置:
cluster.name: test (一定要保持一致)
node.name: test_node-2
http.port: 9201
transport.port: 9206
6.分别进入各节点安装目录,启动es节点:
bin/elasticsearch -d
7.查看集群健康度:
curl 192.168.47.47:9200/_cat/health
1649748533 07:28:53 test green 2 2 2 1 0 0 0 0 - 100.0%
//green表示所有节点及节点下的各分片均为正常
curl -X GET 'http://192.168.47.47:9200/_cat/nodes?v'
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.47.47 49 96 1 0.00 0.02 0.05 cdfhilmrstw - test_node-2
192.168.47.47 32 96 1 0.00 0.02 0.05 cdfhilmrstw * test_node-1
//*表示master,如果master宕机了es会自主选择其他正常运行节点作为主节点
curl -X GET 'http://192.168.47.47:9200/_cluster/health?pretty'
{
"cluster_name" : "test", //集群名称
"status" : "green", //集群状态
"timed_out" : false, //是否超时
"number_of_nodes" : 2, //集群节点数
"number_of_data_nodes" : 2,
"active_primary_shards" : 1,
"active_shards" : 2,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0 //集群分片可用百分比
}
8.为集群配置系统服务并设置开机自启:
//进入系统服务目录并创建shell脚本
cd /etc/init.d
vim elasticsearch
#!/bin/bash
#chkconfig: 345 63 37
#description: elasticsearch
#processname: elasticsearch-8.1.2
export ES_HOME_1=/usr/local/software/elastic/elasticsearch-8.1.2-node1
export ES_HOME_2=/usr/local/software/elastic/elasticsearch-8.1.2-node2
case $1 in
start)
su es<<! #以es用户的身份进行以下操作
cd $ES_HOME_1
./bin/elasticsearch -d
cd $ES_HOME_2
./bin/elasticsearch -d
exit
!
echo "elasticsearch is started"
;;
stop)
pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'` #获取elasticsearch相关的进程号并杀死他们
kill -9 $pid
echo "elasticsearch is stopped"
;;
restart)
pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
kill -9 $pid
echo "elasticsearch is stopped"
sleep 2
su es<<!
cd $ES_HOME_1
./bin/elasticsearch -d
cd $ES_HOME_2
./bin/elasticsearch -d
exit
!
echo "elasticsearch is started"
;;
*)
echo "start|stop|restart"
;;
esac
exit 0
//保存退出后赋予脚本文件最高权限
chmod 777 elasticsearch
//添加至系统服务
chkconfig --add elasticsearch
//设置服务开机自启
chkconfig elasticsearch on
//*配置完成今后可以使用系统命令启动/停止/重启es服务
service elasticsearch start
service elasticsearch stop
service elasticsearch restart
集群搭建(多个服务器各一个ES)
1.分别在各服务器上基础部署并运行一次(相当于初始化会生成一些额外的东西)
2.备份原配置文件
mv elasticsearch.yml elasticsearch.yml.bk
3.将之前伪集群的某一配置文件通过sftp协议传输至目标文件夹中
sftp root@192.168.47.48
yes
你的密码
put /usr/local/software/elastic/elasticsearch-8.1.2-node1/config/elasticsearch.yml xx/config
4.分别修改所有的配置文件(以下为其中之一)
cluster.name: test //保持一致
node.name: test_node-3
path.data: /usr/local/software/elastic/data //存放数据的目录,记得赋权给es用户
path.logs: /usr/local/software/elastic/log //存放日志的目录,记得赋权给es用户
network.host: 0.0.0.0 //由原固定IP更换为0.0.0.0
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.47.47:9205","192.168.47.47:9206","192.168.47.48:9300","192.168.47.49:9300"]
discovery.seed_hosts: ["192.168.47.47:9205","192.168.47.47:9206","192.168.47.48:9300","192.168.47.49:9300"]
5.开放各服务器的端口访问
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent
firewall-cmd --reload
6.分别启动各服务器上的es节点,可使用命令行或脚本
7.查看集群状态
curl -X GET 'http://192.168.47.47:9200/_cat/nodes?v'
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.47.47 25 96 0 0.04 0.06 0.05 cdfhilmrstw - test_node-1
192.168.47.47 35 96 0 0.04 0.06 0.05 cdfhilmrstw - test_node-2
192.168.47.49 56 96 0 0.02 0.04 0.05 cdfhilmrstw * test_node-4
192.168.47.48 46 87 0 0.03 0.04 0.05 cdfhilmrstw - test_node-3
此时由四个节点组成的es集群便搭建成功了(其中前两个为之前搭建的伪集群)
**es在启动后会自动选取节点作为主节点master,当主节点宕机后会自动选取其他节点作为主节点,但前提是节点数大于或等于三个,若只有两个节点,主节点宕机后从节点将一直请求主节点而不会成为主节点,由此会导致服务出现一定程度的问题。
**在多次错误尝试后,确保配置没有问题后仍无法搭建集群可能是数据存在缓存的缘故,可以手动删除数据和日志目录里的文件再次尝试。
Kibana可视化界面部署
官方网址:Download Kibana Free | Get Started Now | Elastic(下载与之匹配的版本)
1.下载软件包并上传至安装目录
2.解压软件包并进入
3.修改配置文件
vim config/kibana.yml
server.port: 5601 //端口
server.host: "192.168.47.47" //安装的服务器的静态IP
elasticsearch.hosts: ["http://192.168.47.47:9200","http://192.168.47.47:9201","http://192.168.47.48:9200","http://192.168.47.49:9200"] //集群的地址
i18n.locale: "zh-CN" //中文界面
4.保存退出,启动es后才能成功启动kibana
bin/kibana --allow-root & //后台启动
5.防火墙开放其端口
6.浏览器输出IP:5601进入kibana页面
常见错误
- 未使用普通用户登陆
- 未给es文件更换所有人(即文件夹仍为root权限普通用户无权操作)
- 未调整VMA的数量:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
1.修改系统文件:
vim /etc/sysctl.conf
2.添加
vm.max_map_count=262144
3.保存退出后刷新:
sysctl -p
4.修改系统文件:
vim /etc/security/limits.conf
5.末尾添加:
root soft nofile 165535
root hard nofilr 165535
*soft nofile 165536
hard nofile 165536
es - nofile 131072
6.保存退出后查看是否更新成功:
ulimit -Hn
7.若不生效,则需要逐一排查:
1、检查/etc/ssh/sshd_config 中UsePAM yes选项是否开启
2、检查/etc/pam.d/system-auth 中是否存在session required pam_limits.so这一项
3、检查/etc/pam.d/login 中是否将pam_limits.so文件被加入到启动文件中存在session required /lib64/security/pam_limits.so这一项
解释(1、2):UsePAM yes选项开启后,表示启用pam模块,在/etc/pam.d/sshd中默认已存在一项session include password-auth配置,include表示需要password-auth模块需要通过认证,在/etc/pam.d/system-auth里还应该存在session required pam_limits.so这一项,表示使用/etc/security/limits.conf这个配置
解释(3):要让limits.conf文件配置能够生效,必须将pam_limits.so模块文件加入到启动文件中,故应在/etc/pam.d/login配置文件中添加session required /lib64/security/pam_limits.so这一项
排查后重新登录一下用户就可以生效了,如果还未生效就要逐个排查/etc/pam.d下相关连的文件是否将session required pam_limits.so这一下项注释或删除了
具体错误事宜可以进入之前配置的日志目录下:cat test_one(cluster.name).log,查看并解决