内容概览模块核心内容01 HTTPHTTP协议基础回顾02 TLS认证单向认证、双向认证原理03 课程大纲ELFK技术栈架构04 环境准备机器规划、内核参数、交换分区配置05 ES单点部署证书生成、配置文件、systemd管理、密码设置06 ES集群部署集群配置、节点角色、集群验证二、HTTPHTTPHyperText Transfer Protocol超文本传输协议 特点 - 基于TCP/IP协议 - 默认端口80 - 无状态协议 - 请求-响应模型 HTTPSHTTP SSL/TLS - 默认端口443 - 增加加密传输 - 需要CA证书三、TLS单向与双向认证3.1 单向认证含义只对用户的数据进行加密认证客户端 ─────────────────────────────────► 服务器端 │ │ │1. Client Hello支持的加密套件 │ │2. Server Hello 服务器证书 │ │3. 验证服务器证书 │ │4. 协商对称加密密钥 │ │5. 加密通信开始 │ │ │ └──────────────────────────────────────────┘ 特点只验证服务器身份不验证客户端身份 应用场景普通网站HTTPS3.2 双向认证客户端 ─────────────────────────────────► 服务器端 │ │ │1. Client Hello │ │2. Server Hello 服务器证书 │ │3. 验证服务器证书 │ │4. 客户端发送自己的证书 │ │5. 服务器验证客户端证书 │ │6. 协商对称加密密钥 │ │7. 加密通信开始 │ │ │ └──────────────────────────────────────────┘ 特点验证服务器身份 验证客户端身份 应用场景金融、企业内部系统单向认证 vs 双向认证对比对比项单向认证双向认证服务器身份验证✅✅客户端身份验证❌✅配置复杂度低高安全性一般高典型场景普通网站金融/企业内网四、ELFK架构ELFK技术栈架构图 ┌─────────────────────────────────────────────────────────────┐ │ 数据采集层 │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │Filebeat │ │Logstash │ │Metricbeat│ │ 其他 │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ │ └────────────┴────────────┴────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 消息队列层 │ │ │ │ Kafka / Redis │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据处理层 │ │ │ │ Logstash过滤、解析 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据存储层 │ │ │ │ Elasticsearch分布式搜索引擎 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据展示层 │ │ │ │ Kibana可视化工具 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘五、环境准备5.1 机器准备名称IP地址角色es01-9110.0.0.91Elasticsearch节点1es02-9210.0.0.92Elasticsearch节点2es03-9310.0.0.93Elasticsearch节点35.2 机器配置内核参数设置# 单个服务的内存映射设置Elasticsearch需要echovm.max_map_count262144/etc/sysctl.conf# 文件最大描述符设置系统级别echofs.file-max6554560/etc/sysctl.conf# 查看验证[rootes01: ~]# sysctl -pvm.max_map_count262144fs.file-max6554560参数值说明vm.max_map_count262144进程内存映射区域的最大数量fs.file-max6554560系统级别最大文件打开数不使用交换分区swap[rootes03: ~]# vim /etc/security/limits.conf* soft nofile65535* hard nofile65535* soft memlock unlimited# 不使用交换分区* hard memlock unlimited# 不使用交换分区[rootes03: ~]# ulimit -n 65535参数说明soft/hard nofile文件描述符限制soft/hard memlock内存锁定限制避免使用swap5.3 下载软件包官网地址https://www.elastic.co/# 下载Elasticsearch 7.17.29版本# 选择Linux x86_64 tar.gz格式六、部署ES集群6.1 单点部署上传解压压缩包# 上传软件包[rootes01: ~]# ls -l-rw-r--r--1root root325443139Jun242025elasticsearch-7.17.29-linux-x86_64.tar.gz# 创建安装目录[rootes01: ~]# mkdir /elfk# 解压到指定目录[rootes01: ~]# tar xf elasticsearch-7.17.29-linux-x86_64.tar.gz -C /elfk/# 重命名简化[rootes01: ~]# mv /elfk/elasticsearch-7.17.29 /elfk/es7# 查看目录结构[rootes01: ~]# ls -l /elfk/es7/drwxr-xr-x2root root4096Jun192025bin drwxr-xr-x3root root4096May2615:03 config drwxr-xr-x8root root4096Jun192025jdk drwxr-xr-x3root root4096Jun192025lib -rw-r--r--1root root3860Jun192025LICENSE.txt drwxr-xr-x2root root4096Jun192025logs drwxr-xr-x61root root4096Jun192025modules -rw-r--r--1root root640930Jun192025NOTICE.txt drwxr-xr-x2root root4096Jun192025plugins -rw-r--r--1root root2710Jun192025README.asciidoc生成证书1. 创建证书目录注意必须在config目录下创建证书目录[rootes01: ~]# mkdir /elfk/es7/config/certs[rootes01: ~]# cd /elfk/es7/config/certs2. 生成CA根证书# 创建CA私钥4096位生成CA证书有效期10年[rootes01:certs]# openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \-subj/CCN/STBeijing/LBeijing/Ooldboy/CNElasticsearch Root CA\-keyoutca.key-outca.crt[rootes01: certs]# ls -l-rw-r--r--1root root2017May2615:14 ca.crt -rw-------1root root3272May2615:14 ca.key3. 服务端证书# 生成集群节点通讯证书的私钥与请求文件[rootes01:certs]# openssl req -newkey rsa:4096 -nodes -sha256 \-subj/CCN/STBeijing/LBeijing/Ooldboy/CNes-cluster\-addextsubjectAltNameDNS:es01-91,DNS:es02-92,DNS:es03-93,IP:10.0.0.91,IP:10.0.0.92,IP:10.0.0.93,IP:127.0.0.1\-keyoutes.key-outes.csr# 生成集群节点通讯证书[rootes01:certs]# oopenssl x509 -req -in es.csr -CA ca.crt -CAkey ca.key -CAcreateserial \-days365-outes.crt\-extfile(printfsubjectAltNameDNS:es01-91,DNS:es02-92,DNS:es03-93,IP:10.0.0.91,IP:10.0.0.92,IP:10.0.0.93,IP:127.0.0.1)# 查看证书文件[rootes01: certs]# ls -l-rw-r--r--1root root2017May2615:14 ca.crt -rw-------1root root3272May2615:14 ca.key -rw-r--r--1root root2053May2615:19 es.crt -rw-r--r--1root root1769May2615:19 es.csr -rw-------1root root3272May2615:19 es.key4. 客户端证书# 生成客户端证书用于Kibana、Logstash等组件连接[rootes01:certs]# openssl req -newkey rsa:4096 -nodes -sha256 \-subj/CCN/STBeijing/LBeijing/Oxinjizhiwa/CNEs Client\-addextextendedKeyUsageclientAuth\-keyoutclient.key-outclient.csr[rootes01:certs]# openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key \-days365-outclient.crt\-extfile(printfextendedKeyUsageclientAuth)# 查看验证[rootes01: certs]# ls -l-rw-r--r--1root root2017May2615:14 ca.crt -rw-------1root root3272May2615:14 ca.key -rw-r--r--1root root2013May2615:23 client.crt -rw-r--r--1root root1732May2615:23 client.csr -rw-------1root root3272May2615:23 client.key -rw-r--r--1root root2053May2615:19 es.crt -rw-r--r--1root root1769May2615:19 es.csr -rw-------1root root3272May2615:19 es.key编辑配置文件[rootes01: certs]# vim /elfk/es7/config/elasticsearch.yml###########[集群配置]################## 自定义集群名称cluster.name: oldboy-cluster# 本机节点名称node.name: es01-91# 集群主机ip列表【单点模式需要注释掉】#discovery.seed_hosts: [10.0.0.91, 10.0.0.92, 10.0.0.93]# 初始化集群参与选举的主机【单点模式需要注释掉】#cluster.initial_master_nodes: [es01-91, es02-92, es03-93]# 集群模式[默认是集群模式注释掉单点模式需要启用]discovery.type: single-node###########[网络配置]################## 服务监听ip地址(用户从那张网卡进来)network.host:0.0.0.0# 服务监听端口http.port:9200# 集群通讯端口transport.tcp.port:9300###########[存储配置]################## 数据存储路径\日志存储路径配置path.data: /elfk/es7/data/ path.logs: /elfk/es7/log/###########[性能配置]################## 锁定物理内存不允许使用交换分区swapbootstrap.memory_lock:true###########[安全配置]################## 开启安全组件功能xpack.security.enabled:true# 节点间通信Transport层xpack.security.transport.ssl.enabled:true# 验证证书是否过期但是不验证CNxpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.transport.ssl.key: /elfk/es7/config/certs/es.key xpack.security.transport.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt# HTTP APIREST层xpack.security.http.ssl.enabled:true# 是否要求客户端提供证书进行双向加密# [双向认证required] [单向认证none]xpack.security.http.ssl.client_authentication: none xpack.security.http.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.http.ssl.key: /elfk/es7/config/certs/es.key xpack.security.http.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt创建数据目录mkdir/elfk/es7/{data,log}创建运行虚拟用户并授权# 创建es用户无登录权限[rootes01: certs]# useradd es -s /sbin/nologin -M# 授权目录所有者为es用户[rootes01: certs]# chown -R es.es /elfk/配置systemd管理服务[rootes01: certs]# vim /lib/systemd/system/es7.service[Unit]DescriptionElasticsearch ServiceAfternetwork.target[Service]TypesimpleUseresGroupes# 环境变量EnvironmentES_HOME/elfk/es7/EnvironmentES_PATH_CONF/elfk/es7/configEnvironmentES_JAVA_HOME/elfk/es7/jdk# 权限设置PermissionsStartOnlytrue# 启动命令ExecStart/elfk/es7/bin/elasticsearch-p/elfk/es7/log/elasticsearch.pid# 停止时清理PID文件ExecStop/bin/rm-f/elfk/es7/log/elasticsearch.pid# 资源限制LimitNOFILE65536# 锁定物理内存LimitMEMLOCKinfinity# 重启策略Restarton-failureRestartSec60s[Install]WantedBymulti-user.target启动服务[rootes01: certs]# systemctl daemon-reload[rootes01: certs]# systemctl start es7.service# 查看端口监听[rootes01: certs]# netstat -tnulp......tcp600:::9300 :::* LISTEN1782/java tcp600:::9200 :::* LISTEN1782/java默认用户设置密码统一设置为123456# 进入bin目录[rootes01: ~]# cd /elfk/es7/bin/# 执行密码设置命令[rootes01: bin]# ./elasticsearch-setup-passwords interactive..... Please confirm that you would like tocontinue[y/N]y..... Enter passwordfor[elastic]:123456Reenter passwordfor[elastic]:123456Enter passwordfor[apm_system]:123456Reenter passwordfor[apm_system]:123456Enter passwordfor[kibana_system]:123456Reenter passwordfor[kibana_system]:123456Enter passwordfor[logstash_system]:123456Reenter passwordfor[logstash_system]:123456Enter passwordfor[beats_system]:123456Reenter passwordfor[beats_system]:123456Enter passwordfor[remote_monitoring_user]:123456Reenter passwordfor[remote_monitoring_user]:123456..... Changed passwordforuser[apm_system]Changed passwordforuser[kibana_system]Changed passwordforuser[kibana]Changed passwordforuser[logstash_system]Changed passwordforuser[beats_system]Changed passwordforuser[remote_monitoring_user]Changed passwordforuser[elastic]内置用户说明用户用途elastic超级管理员用户kibana_systemKibana连接ES使用logstash_systemLogstash连接ES使用beats_systemBeats连接ES使用apm_systemAPM服务使用remote_monitoring_user远程监控使用访问测试1. 浏览器访问访问地址https://10.0.0.91:9200 用户名elastic 密码1234562. curl命令访问[rootes01: bin]# curl -u elastic:123456 -k -X GET https://10.0.0.91:9200{name:es01-91,cluster_name:oldboy-cluster,cluster_uuid:NJ-mXMByQaepQ10r8g9Ztg,version:{number:7.17.29,build_flavor:default,build_type:tar,build_hash:580aff1a0064ce4c93293aaab6fcc55e22c10d1c,build_date:2025-06-19T01:37:57.847711500Z,build_snapshot:false,lucene_version:8.11.3,minimum_wire_compatibility_version:6.8.0,minimum_index_compatibility_version:6.0.0-beta1},tagline:You Know, for Search}6.2 报错时查看日志# 日志文件位置[rootes01: bin]# ll /elfk/es7/log/....-rw-r--r--1es es22483May2616:14 oldboy-cluster.log -rw-r--r--1es es46730May2616:14 oldboy-cluster_server.json....6.3 集群部署停止单点服务1. 关闭服务[rootes01: ~]# systemctl stop es7.service2. 清空历史数据[rootes01: ~]# rm -rf /elfk/es7/log/*[rootes01: ~]# rm -rf /elfk/es7/data/*修改配置文件# 修改配置文件[rootes01-91: ~]# vim /elfk/es7/config/elasticsearch.yml###########[集群配置]################## 自定义集群名称cluster.name: oldboy-cluster# 本机节点名称node.name: es01-91# 集群主机ip列表【单点模式需要注释掉】discovery.seed_hosts:[10.0.0.91,10.0.0.92,10.0.0.93]# 初始化集群参与选举的主机【单点模式需要注释掉】cluster.initial_master_nodes:[es01-91,es02-92,es03-93]# 集群模式[默认是集群模式注释掉单点模式需要启用]#discovery.type: single-node# 该主机的角色配置可以成为什么角色# 【master主节点】表示可以成为主节点管理整个集群# 【data写数据节点】表示可以成为数据节点文档数据的增删改查# 【ingest】可以可以成为接收、预处理节点# 【node.roles: []】设置为空表示只作为协调节点使用node.roles:[master,data,ingest]# 选举前提必须有2个节点启动才能进行选举防止脑裂# 值的设置【(集群节点数/2)1】# 注意【es8.x】版本不需要设置会自动处理discovery.zen.minimum_master_nodes:2###########[网络配置]################## 服务监听ip地址(用户从那张网卡进来)network.host:0.0.0.0# 服务监听端口http.port:9200# 集群通讯端口transport.tcp.port:9300###########[存储配置]################## 数据存储路径\日志存储路径配置path.data: /elfk/es7/data/ path.logs: /elfk/es7/log/###########[性能配置]################## 锁定物理内存不允许使用交换分区swapbootstrap.memory_lock:true###########[安全配置]################## 开启安全组件功能xpack.security.enabled:true# 节点间通信 (Transport层) ,xpack.security.transport.ssl.enabled:true# 验证证书是否过期但是不验证CNxpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.transport.ssl.key: /elfk/es7/config/certs/es.key xpack.security.transport.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt# HTTP API (REST层) xpack.security.http.ssl.enabled:true# 是否要求客户端提供证书进行双向加密[双向认证required][单向认证none]xpack.security.http.ssl.client_authentication: none xpack.security.http.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.http.ssl.key: /elfk/es7/config/certs/es.key xpack.security.http.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt节点角色说明角色说明master管理集群负责创建/删除索引、分配分片等data存储数据执行增删改查操作ingest数据预处理管道处理空数组[]仅作为协调节点转发请求传输到其他节点# 传输Elasticsearch目录[rootes01: ~]# scp -r /elfk 10.0.0.92:/[rootes01: ~]# scp -r /elfk 10.0.0.93:/# 传输systemd服务文件[rootes01: ~]# scp /lib/systemd/system/es7.service 10.0.0.102:/lib/systemd/system/[rootes01: ~]# scp /lib/systemd/system/es7.service 10.0.0.103:/lib/systemd/system/其他节点授权# 每个节点都需要创建es用户并授权useraddes-s/sbin/nologin-Mchown-Res.es /elfk/不同节点修改配置文件主机名# es02节点[rootes02: ~]# vim /elfk/es7/config/elasticsearch.yml......node.name: es02-92# es03节点[rootes03: ~]# vim /elfk/es7/config/elasticsearch.yml......node.name: es03-93全部启动# 每个节点执行systemctl daemon-reload systemctlenablees7.service systemctl start es7.service6.4 验证查看集群节点列表[rootes01-101 ~]# curl -k -u elastic:123456 -X GET https://10.0.0.91:9200/_cat/nodes10.0.0.92609700.000.000.00dim * es02-9210.0.0.91449500.010.010.00dim - es01-9110.0.0.93439300.000.000.00dim - es03-93查看集群健康状况[rootes01-101 ~]# curl -k -u elastic:123456 -X GET https://10.0.0.91:9200/_cluster/health?pretty{cluster_name:oldboy-cluster,status:green,timed_out:false,number_of_nodes:3,number_of_data_nodes:3,active_primary_shards:4,active_shards:8,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}集群状态说明status状态含义green所有主分片和副本分片都正常yellow所有主分片正常部分副本分片未分配red部分主分片未分配数据不完整
Elasticsearch 核心入门(一)集群部署 + HTTPS 安全配置
内容概览模块核心内容01 HTTPHTTP协议基础回顾02 TLS认证单向认证、双向认证原理03 课程大纲ELFK技术栈架构04 环境准备机器规划、内核参数、交换分区配置05 ES单点部署证书生成、配置文件、systemd管理、密码设置06 ES集群部署集群配置、节点角色、集群验证二、HTTPHTTPHyperText Transfer Protocol超文本传输协议 特点 - 基于TCP/IP协议 - 默认端口80 - 无状态协议 - 请求-响应模型 HTTPSHTTP SSL/TLS - 默认端口443 - 增加加密传输 - 需要CA证书三、TLS单向与双向认证3.1 单向认证含义只对用户的数据进行加密认证客户端 ─────────────────────────────────► 服务器端 │ │ │1. Client Hello支持的加密套件 │ │2. Server Hello 服务器证书 │ │3. 验证服务器证书 │ │4. 协商对称加密密钥 │ │5. 加密通信开始 │ │ │ └──────────────────────────────────────────┘ 特点只验证服务器身份不验证客户端身份 应用场景普通网站HTTPS3.2 双向认证客户端 ─────────────────────────────────► 服务器端 │ │ │1. Client Hello │ │2. Server Hello 服务器证书 │ │3. 验证服务器证书 │ │4. 客户端发送自己的证书 │ │5. 服务器验证客户端证书 │ │6. 协商对称加密密钥 │ │7. 加密通信开始 │ │ │ └──────────────────────────────────────────┘ 特点验证服务器身份 验证客户端身份 应用场景金融、企业内部系统单向认证 vs 双向认证对比对比项单向认证双向认证服务器身份验证✅✅客户端身份验证❌✅配置复杂度低高安全性一般高典型场景普通网站金融/企业内网四、ELFK架构ELFK技术栈架构图 ┌─────────────────────────────────────────────────────────────┐ │ 数据采集层 │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │Filebeat │ │Logstash │ │Metricbeat│ │ 其他 │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ │ └────────────┴────────────┴────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 消息队列层 │ │ │ │ Kafka / Redis │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据处理层 │ │ │ │ Logstash过滤、解析 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据存储层 │ │ │ │ Elasticsearch分布式搜索引擎 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据展示层 │ │ │ │ Kibana可视化工具 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘五、环境准备5.1 机器准备名称IP地址角色es01-9110.0.0.91Elasticsearch节点1es02-9210.0.0.92Elasticsearch节点2es03-9310.0.0.93Elasticsearch节点35.2 机器配置内核参数设置# 单个服务的内存映射设置Elasticsearch需要echovm.max_map_count262144/etc/sysctl.conf# 文件最大描述符设置系统级别echofs.file-max6554560/etc/sysctl.conf# 查看验证[rootes01: ~]# sysctl -pvm.max_map_count262144fs.file-max6554560参数值说明vm.max_map_count262144进程内存映射区域的最大数量fs.file-max6554560系统级别最大文件打开数不使用交换分区swap[rootes03: ~]# vim /etc/security/limits.conf* soft nofile65535* hard nofile65535* soft memlock unlimited# 不使用交换分区* hard memlock unlimited# 不使用交换分区[rootes03: ~]# ulimit -n 65535参数说明soft/hard nofile文件描述符限制soft/hard memlock内存锁定限制避免使用swap5.3 下载软件包官网地址https://www.elastic.co/# 下载Elasticsearch 7.17.29版本# 选择Linux x86_64 tar.gz格式六、部署ES集群6.1 单点部署上传解压压缩包# 上传软件包[rootes01: ~]# ls -l-rw-r--r--1root root325443139Jun242025elasticsearch-7.17.29-linux-x86_64.tar.gz# 创建安装目录[rootes01: ~]# mkdir /elfk# 解压到指定目录[rootes01: ~]# tar xf elasticsearch-7.17.29-linux-x86_64.tar.gz -C /elfk/# 重命名简化[rootes01: ~]# mv /elfk/elasticsearch-7.17.29 /elfk/es7# 查看目录结构[rootes01: ~]# ls -l /elfk/es7/drwxr-xr-x2root root4096Jun192025bin drwxr-xr-x3root root4096May2615:03 config drwxr-xr-x8root root4096Jun192025jdk drwxr-xr-x3root root4096Jun192025lib -rw-r--r--1root root3860Jun192025LICENSE.txt drwxr-xr-x2root root4096Jun192025logs drwxr-xr-x61root root4096Jun192025modules -rw-r--r--1root root640930Jun192025NOTICE.txt drwxr-xr-x2root root4096Jun192025plugins -rw-r--r--1root root2710Jun192025README.asciidoc生成证书1. 创建证书目录注意必须在config目录下创建证书目录[rootes01: ~]# mkdir /elfk/es7/config/certs[rootes01: ~]# cd /elfk/es7/config/certs2. 生成CA根证书# 创建CA私钥4096位生成CA证书有效期10年[rootes01:certs]# openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \-subj/CCN/STBeijing/LBeijing/Ooldboy/CNElasticsearch Root CA\-keyoutca.key-outca.crt[rootes01: certs]# ls -l-rw-r--r--1root root2017May2615:14 ca.crt -rw-------1root root3272May2615:14 ca.key3. 服务端证书# 生成集群节点通讯证书的私钥与请求文件[rootes01:certs]# openssl req -newkey rsa:4096 -nodes -sha256 \-subj/CCN/STBeijing/LBeijing/Ooldboy/CNes-cluster\-addextsubjectAltNameDNS:es01-91,DNS:es02-92,DNS:es03-93,IP:10.0.0.91,IP:10.0.0.92,IP:10.0.0.93,IP:127.0.0.1\-keyoutes.key-outes.csr# 生成集群节点通讯证书[rootes01:certs]# oopenssl x509 -req -in es.csr -CA ca.crt -CAkey ca.key -CAcreateserial \-days365-outes.crt\-extfile(printfsubjectAltNameDNS:es01-91,DNS:es02-92,DNS:es03-93,IP:10.0.0.91,IP:10.0.0.92,IP:10.0.0.93,IP:127.0.0.1)# 查看证书文件[rootes01: certs]# ls -l-rw-r--r--1root root2017May2615:14 ca.crt -rw-------1root root3272May2615:14 ca.key -rw-r--r--1root root2053May2615:19 es.crt -rw-r--r--1root root1769May2615:19 es.csr -rw-------1root root3272May2615:19 es.key4. 客户端证书# 生成客户端证书用于Kibana、Logstash等组件连接[rootes01:certs]# openssl req -newkey rsa:4096 -nodes -sha256 \-subj/CCN/STBeijing/LBeijing/Oxinjizhiwa/CNEs Client\-addextextendedKeyUsageclientAuth\-keyoutclient.key-outclient.csr[rootes01:certs]# openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key \-days365-outclient.crt\-extfile(printfextendedKeyUsageclientAuth)# 查看验证[rootes01: certs]# ls -l-rw-r--r--1root root2017May2615:14 ca.crt -rw-------1root root3272May2615:14 ca.key -rw-r--r--1root root2013May2615:23 client.crt -rw-r--r--1root root1732May2615:23 client.csr -rw-------1root root3272May2615:23 client.key -rw-r--r--1root root2053May2615:19 es.crt -rw-r--r--1root root1769May2615:19 es.csr -rw-------1root root3272May2615:19 es.key编辑配置文件[rootes01: certs]# vim /elfk/es7/config/elasticsearch.yml###########[集群配置]################## 自定义集群名称cluster.name: oldboy-cluster# 本机节点名称node.name: es01-91# 集群主机ip列表【单点模式需要注释掉】#discovery.seed_hosts: [10.0.0.91, 10.0.0.92, 10.0.0.93]# 初始化集群参与选举的主机【单点模式需要注释掉】#cluster.initial_master_nodes: [es01-91, es02-92, es03-93]# 集群模式[默认是集群模式注释掉单点模式需要启用]discovery.type: single-node###########[网络配置]################## 服务监听ip地址(用户从那张网卡进来)network.host:0.0.0.0# 服务监听端口http.port:9200# 集群通讯端口transport.tcp.port:9300###########[存储配置]################## 数据存储路径\日志存储路径配置path.data: /elfk/es7/data/ path.logs: /elfk/es7/log/###########[性能配置]################## 锁定物理内存不允许使用交换分区swapbootstrap.memory_lock:true###########[安全配置]################## 开启安全组件功能xpack.security.enabled:true# 节点间通信Transport层xpack.security.transport.ssl.enabled:true# 验证证书是否过期但是不验证CNxpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.transport.ssl.key: /elfk/es7/config/certs/es.key xpack.security.transport.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt# HTTP APIREST层xpack.security.http.ssl.enabled:true# 是否要求客户端提供证书进行双向加密# [双向认证required] [单向认证none]xpack.security.http.ssl.client_authentication: none xpack.security.http.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.http.ssl.key: /elfk/es7/config/certs/es.key xpack.security.http.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt创建数据目录mkdir/elfk/es7/{data,log}创建运行虚拟用户并授权# 创建es用户无登录权限[rootes01: certs]# useradd es -s /sbin/nologin -M# 授权目录所有者为es用户[rootes01: certs]# chown -R es.es /elfk/配置systemd管理服务[rootes01: certs]# vim /lib/systemd/system/es7.service[Unit]DescriptionElasticsearch ServiceAfternetwork.target[Service]TypesimpleUseresGroupes# 环境变量EnvironmentES_HOME/elfk/es7/EnvironmentES_PATH_CONF/elfk/es7/configEnvironmentES_JAVA_HOME/elfk/es7/jdk# 权限设置PermissionsStartOnlytrue# 启动命令ExecStart/elfk/es7/bin/elasticsearch-p/elfk/es7/log/elasticsearch.pid# 停止时清理PID文件ExecStop/bin/rm-f/elfk/es7/log/elasticsearch.pid# 资源限制LimitNOFILE65536# 锁定物理内存LimitMEMLOCKinfinity# 重启策略Restarton-failureRestartSec60s[Install]WantedBymulti-user.target启动服务[rootes01: certs]# systemctl daemon-reload[rootes01: certs]# systemctl start es7.service# 查看端口监听[rootes01: certs]# netstat -tnulp......tcp600:::9300 :::* LISTEN1782/java tcp600:::9200 :::* LISTEN1782/java默认用户设置密码统一设置为123456# 进入bin目录[rootes01: ~]# cd /elfk/es7/bin/# 执行密码设置命令[rootes01: bin]# ./elasticsearch-setup-passwords interactive..... Please confirm that you would like tocontinue[y/N]y..... Enter passwordfor[elastic]:123456Reenter passwordfor[elastic]:123456Enter passwordfor[apm_system]:123456Reenter passwordfor[apm_system]:123456Enter passwordfor[kibana_system]:123456Reenter passwordfor[kibana_system]:123456Enter passwordfor[logstash_system]:123456Reenter passwordfor[logstash_system]:123456Enter passwordfor[beats_system]:123456Reenter passwordfor[beats_system]:123456Enter passwordfor[remote_monitoring_user]:123456Reenter passwordfor[remote_monitoring_user]:123456..... Changed passwordforuser[apm_system]Changed passwordforuser[kibana_system]Changed passwordforuser[kibana]Changed passwordforuser[logstash_system]Changed passwordforuser[beats_system]Changed passwordforuser[remote_monitoring_user]Changed passwordforuser[elastic]内置用户说明用户用途elastic超级管理员用户kibana_systemKibana连接ES使用logstash_systemLogstash连接ES使用beats_systemBeats连接ES使用apm_systemAPM服务使用remote_monitoring_user远程监控使用访问测试1. 浏览器访问访问地址https://10.0.0.91:9200 用户名elastic 密码1234562. curl命令访问[rootes01: bin]# curl -u elastic:123456 -k -X GET https://10.0.0.91:9200{name:es01-91,cluster_name:oldboy-cluster,cluster_uuid:NJ-mXMByQaepQ10r8g9Ztg,version:{number:7.17.29,build_flavor:default,build_type:tar,build_hash:580aff1a0064ce4c93293aaab6fcc55e22c10d1c,build_date:2025-06-19T01:37:57.847711500Z,build_snapshot:false,lucene_version:8.11.3,minimum_wire_compatibility_version:6.8.0,minimum_index_compatibility_version:6.0.0-beta1},tagline:You Know, for Search}6.2 报错时查看日志# 日志文件位置[rootes01: bin]# ll /elfk/es7/log/....-rw-r--r--1es es22483May2616:14 oldboy-cluster.log -rw-r--r--1es es46730May2616:14 oldboy-cluster_server.json....6.3 集群部署停止单点服务1. 关闭服务[rootes01: ~]# systemctl stop es7.service2. 清空历史数据[rootes01: ~]# rm -rf /elfk/es7/log/*[rootes01: ~]# rm -rf /elfk/es7/data/*修改配置文件# 修改配置文件[rootes01-91: ~]# vim /elfk/es7/config/elasticsearch.yml###########[集群配置]################## 自定义集群名称cluster.name: oldboy-cluster# 本机节点名称node.name: es01-91# 集群主机ip列表【单点模式需要注释掉】discovery.seed_hosts:[10.0.0.91,10.0.0.92,10.0.0.93]# 初始化集群参与选举的主机【单点模式需要注释掉】cluster.initial_master_nodes:[es01-91,es02-92,es03-93]# 集群模式[默认是集群模式注释掉单点模式需要启用]#discovery.type: single-node# 该主机的角色配置可以成为什么角色# 【master主节点】表示可以成为主节点管理整个集群# 【data写数据节点】表示可以成为数据节点文档数据的增删改查# 【ingest】可以可以成为接收、预处理节点# 【node.roles: []】设置为空表示只作为协调节点使用node.roles:[master,data,ingest]# 选举前提必须有2个节点启动才能进行选举防止脑裂# 值的设置【(集群节点数/2)1】# 注意【es8.x】版本不需要设置会自动处理discovery.zen.minimum_master_nodes:2###########[网络配置]################## 服务监听ip地址(用户从那张网卡进来)network.host:0.0.0.0# 服务监听端口http.port:9200# 集群通讯端口transport.tcp.port:9300###########[存储配置]################## 数据存储路径\日志存储路径配置path.data: /elfk/es7/data/ path.logs: /elfk/es7/log/###########[性能配置]################## 锁定物理内存不允许使用交换分区swapbootstrap.memory_lock:true###########[安全配置]################## 开启安全组件功能xpack.security.enabled:true# 节点间通信 (Transport层) ,xpack.security.transport.ssl.enabled:true# 验证证书是否过期但是不验证CNxpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.transport.ssl.key: /elfk/es7/config/certs/es.key xpack.security.transport.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt# HTTP API (REST层) xpack.security.http.ssl.enabled:true# 是否要求客户端提供证书进行双向加密[双向认证required][单向认证none]xpack.security.http.ssl.client_authentication: none xpack.security.http.ssl.certificate: /elfk/es7/config/certs/es.crt xpack.security.http.ssl.key: /elfk/es7/config/certs/es.key xpack.security.http.ssl.certificate_authorities: /elfk/es7/config/certs/ca.crt节点角色说明角色说明master管理集群负责创建/删除索引、分配分片等data存储数据执行增删改查操作ingest数据预处理管道处理空数组[]仅作为协调节点转发请求传输到其他节点# 传输Elasticsearch目录[rootes01: ~]# scp -r /elfk 10.0.0.92:/[rootes01: ~]# scp -r /elfk 10.0.0.93:/# 传输systemd服务文件[rootes01: ~]# scp /lib/systemd/system/es7.service 10.0.0.102:/lib/systemd/system/[rootes01: ~]# scp /lib/systemd/system/es7.service 10.0.0.103:/lib/systemd/system/其他节点授权# 每个节点都需要创建es用户并授权useraddes-s/sbin/nologin-Mchown-Res.es /elfk/不同节点修改配置文件主机名# es02节点[rootes02: ~]# vim /elfk/es7/config/elasticsearch.yml......node.name: es02-92# es03节点[rootes03: ~]# vim /elfk/es7/config/elasticsearch.yml......node.name: es03-93全部启动# 每个节点执行systemctl daemon-reload systemctlenablees7.service systemctl start es7.service6.4 验证查看集群节点列表[rootes01-101 ~]# curl -k -u elastic:123456 -X GET https://10.0.0.91:9200/_cat/nodes10.0.0.92609700.000.000.00dim * es02-9210.0.0.91449500.010.010.00dim - es01-9110.0.0.93439300.000.000.00dim - es03-93查看集群健康状况[rootes01-101 ~]# curl -k -u elastic:123456 -X GET https://10.0.0.91:9200/_cluster/health?pretty{cluster_name:oldboy-cluster,status:green,timed_out:false,number_of_nodes:3,number_of_data_nodes:3,active_primary_shards:4,active_shards:8,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}集群状态说明status状态含义green所有主分片和副本分片都正常yellow所有主分片正常部分副本分片未分配red部分主分片未分配数据不完整