搭建Elasticsearch集群
1. 进入Elasticsearch官网下载页面,下载Elasticsearch
在如下页面选择Elasticsearch版本,点击download按钮,进入下载页面
右键选择自己操作系统对应的版本,复制下载链接
然后通过wget命令下载Elasticsearch安装包,并通过tar解压
#进入根目录
cd /
#下载压缩包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.25-linux-aarch64.tar.gz
#解压
tar -xf /elasticsearch-7.17.25-linux-aarch64.tar.gz
#更改文件夹名称
mv elasticsearch-7.17.25 elasticsearch
进入解压后的/elasticsearch目录下,通过 ll 命令可以看到如下内容:
2. 修改配置文件
修改配置文件为如下内容(我是用的是虚拟机环境,只需要配置一份,并复制虚拟机,在逐一修改配置即可,如果不是虚拟机环境,则需要一一配置)。
# 集群名称
cluster.name: my-es-cluster
# 节点名称(每个节点需唯一)
node.name: node-1 # 其他节点分别命名为 node-2、node-3
# 数据和日志路径
path.data: /elasticsearch/data
path.logs: /elasticsearch/logs
# 网络设置
network.host: 192.168.166.40 #配置为当前elasticsearch节点主机的ip
# 端口
http.port: 9200
# 集群节点发现(9300为默认的集群通信端口)
discovery.seed_hosts: ["192.168.166.40:9300", "192.168.166.41:9300", "192.168.166.42:9300"]
# 初始主节点(第一次启动指定)
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
注意:
节点名称为集群节点的唯一标识,不能重复,可以不配置,elasticsearch也可以自动生成;
初始化主节点配置的节点,则是可以参与选举并任选主节点的节点,和Kafka的controller类似;
数据目录和日志路径默认是在elasticsearch的安装目录下;
3. 修改虚拟内存
虚拟内存是提高内存使用空间,让一个固定的内存,保存远大于他的容量的内容,其实现方式有多种,其中常见的包括交换区(具体可以看我的另一片帖子操作系统的内存管理策略)以及磁盘映射,其中es所使用的就是后者磁盘映射。
扩展内存的本质实际上就是划分一块磁盘区域给操作系统管理。如交换区就是划分一块磁盘区域作为交换区,对于不常用的内存页(操作系统对于内存的管理是基于分页存储,也就是说在操作系统的眼里,内存是一个一个的内存页),操作系统会将其存入磁盘,待使用时,在进行读取。而磁盘映射则是划分一块硬盘区域交给操作系统管理,并将普通磁盘区域中的文件或设备映射到操作系统管理的特殊区域,这样操作系统就能知道整个文件或设备全部的地址,不需要读取到内存中在进行使用,而是直接根据地址寻找到自己需要的内容。
elasticsearch要求能够进行映射数量最小需要达到262144(页),所以我们需要执行如下命令:
#将vm.max_map_count=262144,通过tee -a命令,追加到/etc/sysctl.conf文件结尾,持久化配置
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
#修改内核参数,修改当前启动状态,不执行重启也可以
sudo sysctl -w vm.max_map_count=262144
4. 修改jvm内存
根据情况而定,我的虚拟机环境,调整为2g。修改/elasticsearch/config/jvm.options配置文件中追加如下内容:
-Xms2g
-Xmx2g
5. 修改文件描述符数量
文件描述符是已打开文件的唯一表示,当进程对文件进行操作时,操作系统会分配给这个文件唯一的文件描述符。
由于Elasticsearch不允许root用户启动,而新建用户默认可以分配的文件描述符只有4096(也就是只能同时读取4096个资源),这对于Elasticsearch是完全不够用的,所以我们需要给新建的用户修改文件描述符数量(Elasticsearch要求最小的文件描述符数量为65535)。
#创建目录,用于存储用户数据
mkdir /elasticsearch/run-user
#创建运行用户elasticsearch,用于运行elasticsearch,elasticsearch不允许root用户运行
sudo useradd -r -d /elasticsearch/run-user/ -s /sbin/nologin elasticsearch
#赋予用户目录权限
sudo chown -R elasticsearch:elasticsearch /elasticsearch
#通过命令向/etc/security/limits.conf文件中追加文件描述符的软硬限制
echo "elasticsearch soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "elasticsearch hard nofile 65535" | sudo tee -a /etc/security/limits.conf
如果是systemd启动Elasticsearch,还需要修改systemd的配置文件,这里就不细说了。
6. 启动Elasticsearch集群
完成了以上的准备工作,就可以通过如下命令启动所有节点,开启集群了
#zhi定用户启动elasticsearch
sudo -u elasticsearch /elasticsearch/bin/elasticsearch
#后台启动命令,第一次学习的话推荐前台启动,可以更直观的看见日志信息
nohup sudo -u elasticsearch /elasticsearch/bin/elasticsearch &
通过浏览器访问 任意node_ip:9200/_cluster/health?pretty,可以看到如下集群信息,证明集群启动成功:
Kibana(Elasticsearch可视化界面)部署
1. 进入Kinbana官网下载页面,下载Kinbana
选择和部署的Elasticsearch一样的版本,然后点击DownLoad
右键对应版本,复制下载链接
进入服务器,执行如下命令
cd /
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.25-linux-aarch64.tar.gz
tar -xf /kibana-7.17.25-linux-aarch64.tar.gz
mv ./kibana-7.17.25-linux-aarch64 kibana
2. 修改配置文件
修改kibana.yml文件内容
vim /kibana/config/kibana.yml
#在文件末尾添加如下内容
#设置Kibana监听的主机名/IP地址
server.host: "0.0.0.0" # 0.0.0.0 表示允许所有IP地址访问,生产环境可指定特定IP
#Kibana服务端口(默认5601)
server.port: 5601
#elasticsearch集群地址
elasticsearch.hosts: ["http://192.168.166.40:9200","http://192.168.166.41:9200","http://192.168.166.42:9200"]
3. 启动Kibana
Kinbana同样不允许以root用户启动,所以我们要将Kibana的相关文件所属用户和用户组,交给elasticsearch,并由这个用户来启动Kibana,在确保elasticsearch集群启动的前提下,执行如下命令
#更改所属用户用户组
sudo chown -R elasticsearch:elasticsearch /kibana
#启动Kinbana
sudo -u elasticsearch /kibana/bin/kibana
#后台启动命令,第一次学习的话推荐前台启动,可以更直观的看见日志信息
nohup sudo -u elasticsearch /kibana/bin/kibana &
访问ip:5601,看到如下页面证明Kibana启动成功
我可以在Kibana提供的DevTool中执行相关指令
执行 GET /_cluster/health
可以看到如图所示,集群连接成功