文章目录
- 1.资源配置
- 2.系统参数优化
- 3.JDK17安装
- 4.下载&安装ES 8.15
- 5.生成ES的证书(用于ES节点之间进行安全数据传输)
- 6.修改ES 相关配置文件
- 7.创建es用户并启动
- 8.配置ES的账号和密码(用于ES服务端和客户端)
- 9.下载和安装Kibana
- 10.编辑Kibana配置文件
- 11.启动Kiabana
- 12.访问Kiaban
- 13.通过Kibana验证ES集群
1.资源配置
主机名称 | IP | cpu | 内存 | es角色 | es集群名称 | es节点名称 |
---|---|---|---|---|---|---|
es-1 | 192.168.25.31 | 1.5G | 1 | master、data | es-cluster | node-1 |
es-2 | 192.168.25.32 | 1.5G | 1 | master、data | es-cluster | node-2 |
es-3 | 192.168.25.33 | 1.5G | 1 | master、data | es-cluster | node-3 |
注:默认每个节点都是协调节点,故而不用特定当前节点为协调节点
ES角色说明:
- 主节点(Master Node)
活跃主节点(active master node):集群中只允许有一个活跃的主节点,负责轻量级集群范围的操作,例如创建或删除索引、跟踪集群成员以及决定分片的分配。拥有一个稳定的主节点对于集群健康很重要。(也就是如果你配置了多个主节点,实际活跃的主节点只有一个,其他为候选主节点)- 数据节点(Data Node)
数据节点主要负责数据的存储和处理,包括数据的增删改查、搜索和聚合等操作。这些操作是I/O密集型、内存密集型和CPU密集型的,因此监控这些资源并在它们过载时添加更多数据节点非常重要。- 协调节点(Coordinating Node)
协调节点主要负责协调客户端的请求,将接收到的请求分发给合适的节点,并把结果汇集到一起返回给客户端。每个节点都默认起到了协调节点的职责。(默认每个节点都是协调节点,故而不用特定当前节点为协调节点)
2.系统参数优化
注:所有ES节点都需要执行
# 修改系统参数
cat >> /etc/security/limits.conf << 'EOF'
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
EOF
#用于限制一个进程可以拥有的最大内存映射区域数量。
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
#让配置生效
sysctl -p
#
soft nofile 65536:表示软性限制下,一个进程最多能打开的文件描述符(或句柄)数量为65536。软性限制是一个警告阈值,当达到或超过这个限制时,系统会给出警告,但进程仍然可以继续运行(取决于系统配置和策略)。
hard nofile 131072:表示硬性限制下,一个进程最多能打开的文件描述符数量为131072。硬性限制是一个严格的阈值,当达到或超过这个限制时,系统会拒绝进程打开更多的文件,并可能导致进程出错。
soft nproc 2048:表示软性限制下,一个用户最多能创建的进程数量为2048。同样,这是一个警告阈值。
hard nproc 4096:表示硬性限制下,一个用户最多能创建的进程数量为4096。这是一个严格的阈值,当达到或超过这个限制时,系统会拒绝用户创建更多的进程。
3.JDK17安装
注:所有ES节点都需要执行
JDK17 下载地址:https://download.oracle.com/java/17/archive/jdk-17.0.1_linux-x64_bin.tar.gz
下载后上传至服务器。
#创建存放软件的目录
mkdir /opt/software
# 解压jdk到指定目录
tar -zxvf jdk-17.0.1_linux-x64_bin.tar.gz -C /opt/software/
#添加JDK环境变量配置
cat >> /etc/profile << 'EOF'
export JAVA_HOME=/opt/software/jdk-17.0.1
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
EOF
#让配置生效
source /etc/profile
#查看jdk17是否安装成功
java -version
4.下载&安装ES 8.15
ES8.15 下载地址:https://www.elastic.co/downloads/past-releases/elasticsearch-8-15-0
下载后将压缩包上传至服务器。
#将ES解压至特定目录
tar -zxvf elasticsearch-8.15.0-linux-x86_64.tar.gz -C /opt/software/
#切到es目录
cd /opt/software/elasticsearch-8.15.0/
5.生成ES的证书(用于ES节点之间进行安全数据传输)
注:其中一个ES节点执行,生成证书后拷贝到其他服务器的ES节点上。
ES证书工具类用法说明:
[root@es8-1 elasticsearch-8.15.0]# ./bin/elasticsearch-certutil --help
Simplifies certificate creation for use with the Elastic Stack
Commands
--------
csr - generate certificate signing requests
cert - generate X.509 certificates and keys
ca - generate a new local certificate authority
http - generate a new certificate (or certificate request) for the Elasticsearch HTTP interface
生成CA证书和节点证书
#生成CA根证书(注:执行命令后会提示你输入密码之类的,一直回车即可)
[root@es8-1 elasticsearch-8.15.0]# ./bin/elasticsearch-certutil ca
#生成节点证书并指定CA根证书(注:执行命令后会提示你输入密码之类的,一直回车即可)
[root@es8-1 elasticsearch-8.15.0]# ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
将证书移动到ES的config目录或config子目录之下!!!(不然后续ES会启动报错)
[root@es8-1 elasticsearch-8.15.0]# mkdir /opt/software/elasticsearch-8.15.0/config/cert
[root@es8-1 elasticsearch-8.15.0]# mv elastic-stack-ca.p12 ./config/cert/
[root@es8-1 elasticsearch-8.15.0]# mv elastic-certificates.p12 ./config/cert/
注1:执行生成证书命令后会提示你输入密码之类的,一直回车即可
注2:生成证书后,看到当前目录下多了两个证书文件,elastic-stack-ca.p12(CA根证书)、elastic-certificates.p12(节点证书)
注3:在其中一个es节点中生成好证书后,将证书下载并上传到其他几台ES服务器上的es的配置目录下。
“注4”:一定要把生成的SSL证书放到ES的config目录之下,不然后续启动会报错!!
6.修改ES 相关配置文件
注:所有ES节点都需要执行
修改jvm.options文件
#编辑jvm文件,修改jvm的堆大小(根据实际情况来)
[root@es8-1 elasticsearch-8.15.0]# vim config/jvm.options
-Xms512m
-Xmx512m
修改elasticsearch.yml文件
[root@es8-1 elasticsearch-8.15.0]# vim config/elasticsearch.yml
主要修改的参数如下:
#集群名称
cluster.name: es-cluster
#节点名称(集群中不同实例的节点名称要求唯一)
node.name: node-1
#节点角色注意至少有两个具有选举master资格的节点
node.roles: [master,data]
#es的数据目录
path.data: /opt/software/elasticsearch-8.15.0/data
#es的日志目录
path.logs: /opt/software/elasticsearch-8.15.0/logs
#es节点绑定的网卡。0.0.0.0即绑定所有网卡
network.host: 0.0.0.0
#http端口(es服务端和客户端的通讯端口)
http.port: 9200
#用于指定集群自动发现所需的初始主机节点列表(不要求一定是主节点)。这些主机节点用于引导新加入的节点发现和加入集群。
discovery.seed_hosts: [“192.168.25.31:9300”, “192.168.25.32:9300”, “192.168.25.33:9300”]
#用于指定集群的初始主节点列表。这些节点在集群启动时负责选举出主节点,并承担集群的管理和协调工作。
cluster.initial_master_nodes: [“node-1”, “node-2”, “node-3”]
#是否支持模糊方式(如_all 或 *)删除索引(不要开启,怕误删风险)
action.destructive_requires_name: false
#跨域配置。避免前端网站访问es出现跨域
http.cors.enabled: true
http.cors.allow-origin: “*”
#证书配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: /opt/software/elasticsearch-8.15.0/config/cert/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /opt/software/elasticsearch-8.15.0/config/cert/elastic-certificates.p12
注1:有些参数是配置文件上没有的,没有的就在配置文件上补上
注2:上面用的9300端口是ES实例内部之间进行通讯的TCP端口
注3:不同ES节点修改的内容基本一样,除了node.name,其它都一样
7.创建es用户并启动
注:所有ES节点都需要执行
由于es不支持root用户启动,故而需要添加一个普通用户来启动es
# 创建普通用户用于es
useradd -s /bin/bash elastic
#将es相关目录授权给es用户
chown -R elastic:elastic /opt/software/elasticsearch-8.15.0
注:需要把es所有相关目录都授权给elastic用户,尤其是 数据目录和日志目录放在其他路径下的,都要注意下,否则可能会因为无权限而导致启动失败。
自定义Systemctl来控制ES的启停:
#自定义sytemctl来控制ES的启停
cat > /etc/systemd/system/elasticsearch.service << 'EOF'
[Unit]
Description=Elastic Search
Documentation=https://www.elastic.co/docs
After=network.target
[Service]
Type=forking
#运行elasticsearch使用的用户
User=elastic
Group=elastic
ExecStart=/opt/software/elasticsearch-8.15.0/bin/elasticsearch -d
Restart=always
#注:启动超时时间需要设长一点。因为我1核cpu启动需要很久,如果超时时间短,会导致启动超时,然后又会触发systemctl 进行es服务重启,导致es永远都没有启动成功。
TimeoutStartSec=600s
RestartSec=650s
#设置进程的系统参数
LimitNOFILE=65536
LimitNPROC=4096
[Install]
WantedBy=multi-user.target
EOF
#让配置生效
systemctl daemon-reload
启动ES
#启动es
systemctl start elasticsearch
#开机自启动
systemctl enable elasticsearch
8.配置ES的账号和密码(用于ES服务端和客户端)
注:集群中的其中一个ES节点进行即可
可以看到在访问的时候要求我们输入账号和密码。故而我们需要配置ES的用户和密码。
ES给我们内置了很多不同业务场景使用的账号,故而可以通过命令给这些账号进行密码设置,如下所示:
[root@es8-1 elasticsearch-8.15.0]# ./bin/elasticsearch-setup-passwords interactive
warning: ignoring JAVA_HOME=/opt/software/jdk-17.0.1; using bundled JDK
******************************************************************************
Note: The 'elasticsearch-setup-passwords' tool has been deprecated. This command will be removed in a future release.
******************************************************************************
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
# 下面内置的账号中,你可以根据你的需求设置对应的密码
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
[root@es8-1 elasticsearch-8.15.0]#
密码设置完毕之后,把上一步设置好的账号(用elastic账号)和密码输入进去,然后就可以登陆成功了,登陆成功后的界面如下所示:
9.下载和安装Kibana
注:其中一个ES节点执行 或者 其他服务器上执行都可以
Kibana下载地址:https://www.elastic.co/downloads/past-releases/kibana-8-15-0
#解压并安装到指定目录
tar -zxvf kibana-8.15.0-linux-x86_64.tar.gz -C /opt/software/
cd /opt/software/kibana-8.15.0/
10.编辑Kibana配置文件
vim /opt/software/kibana-8.15.0/config/kibana.yml
#绑定所有网卡(让外部能访问到)
server.host: “0.0.0.0”
#指定es集群的地址
elasticsearch.hosts: [“http://192.168.25.31:9200”,“http://192.168.25.32:9200”,“http://192.168.25.33:9200”]
#指定kibana连接es使用的账号(kibana_system)和密码。该密码上文设置过了
elasticsearch.username: “kibana_system”
elasticsearch.password: “123456”
#设置网站文字为中文
i18n.locale: “zh-CN”
#指定kibana日志输出格式和输出路径
logging.appenders.default:
type: rolling-file
fileName: /opt/software/kibana-8.15.0/logs/kibana.log
policy:
type: size-limit
size: 256mb
strategy:
type: numeric
max: 2
layout:
type: pattern
pattern: "[%date][%level][%logger] %message"
11.启动Kiabana
kibana安装目录授权给elastic用户
chown -R elastic:elastic /opt/software/kibana-8.15.0/
自定义Systemctl来控制Kibana的启停:
#自定义sytemctl来控制Kibana的启停
cat > /etc/systemd/system/kibana.service << 'EOF'
[Unit]
Description=Kibana
Documentation=https://www.elastic.co/docs
After=network.target
[Service]
#运行Kibana使用的用户
User=elastic
Group=elastic
ExecStart=/opt/software/kibana-8.15.0/bin/kibana
[Install]
WantedBy=multi-user.target
EOF
#让配置生效
systemctl daemon-reload
启动kibana
#启动kibana
systemctl start kibana
#开机自启动
systemctl enable kibana
注:可以通过上面配置的日志路径找到对应日志文件来查看kibana是否启动成功。
12.访问Kiaban
访问地址:http://Kibana所在服务器IP:5601/。
我这里对应的地址是:http://192.168.25.31:5601/
网站进入登陆界面后,通过elastic账号进行登陆。
登陆成功后:
13.通过Kibana验证ES集群
通过“菜单”-“开发工具”-“控制台” 来执行我们的ES客户端命令。
执行集群查看命令
GET /_cluster/health
返回结果如下:
{
"cluster_name": "es-cluster", # 集群名称
"status": "green", #集群状态,绿色代表健康
"timed_out": false,
"number_of_nodes": 3, #三个集群节点
"number_of_data_nodes": 3, #三个集群数据节点
"active_primary_shards": 31,
"active_shards": 62,
"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
}
至此,ES集群的搭建大功告成~~~~