OpenSearch是一个开源的搜索和分析平台,基于 Elasticsearch和 Kibana的开源版本(7.10.2 之前)开发。它由 Amazon Web Services (AWS) 主导,旨在为用户提供高性能、可扩展和安全的搜索与分析解决方案。OpenSearch被广泛应用于日志分析、实时数据可视化、全文本搜索和应用程序监控等场景。
这里我们使用TarBall的方式进行安装部署。
# 进入安装目录对压缩包进行解压
cd /data
tar -zxvf opensearch-2.14.0-linux-x64.tar.gz
useradd opensearch
groupadd opensearch
usermod -a -G opensearch opensearch
# opensearch的配置文件均在config目录下
cd /data/opensearch-2.14.0/config
# 编辑jvm.options
vi jvm.options
# 根据机器内存资源调整JVM堆内存额度,修改以下内容
-Xms32g
-Xmx32g
# 保存退出
:wq
# 根据实际需要设置
export OPENSEARCH_INITIAL_ADMIN_PASSWORD=password
生成Root证书作为其他证书的根证书。
openssl genrsa -out root-ca-key.pem 2048
openssl req -x509 -new -nodes -key root-ca-key.pem -sha256 -days 3650 -out root-ca.pem \
-subj "/C=CA/ST=State/L=City/O=MyOrg/OU=MyUnit/CN=RootCA"
在Opensearch中admin账户为超级管理员账户。
admin证书主要用于获取在集群中执行安全插件相关的高级权限。
openssl genrsa -out admin-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
openssl req -new -key admin-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=A" -out admin.csr
openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730
在当前环境中,共有3个节点,所以我们需要为每一个节点进行证书的生成。
注:由于Opensearch的证书内部校验极为复杂,为了避免在集群启动时由于subjectAltName校验不一致而导致的各类证书启动问题的出现,例如证书未知,证书不识别,证书读取失败,节点无法连接等问题。;建议在一台机器上基于root-ca.pem为所有的节点进行证书的生成。
在Node证书生成后,将相应节点的node.pem与node-key.pem复制到相应节点即可。同时将证书权限设置为opensearch账户。避免由于权限问题导致证书无法读取。
subj与subjectAltName在设置时需要注意,建议设置为主机名,避免证书在识别时hostname与IP address无法匹配导致启动服务失败。
# Node cert 1
openssl genrsa -out Node1-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in Node1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out Node1-key.pem
openssl req -new -key Node1-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=DATA-01" -out Node1.csr
echo 'subjectAltName=DNS:Node1' > Node1.ext
openssl x509 -req -in Node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out Node1.pem -days 730 -extfile Node1.ext
# Node cert 2
openssl genrsa -out Node2-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in Node2-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out Node2-key.pem
openssl req -new -key Node2-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=Node2" -out Node2.csr
echo 'subjectAltName=DNS:Node2' > DATA-02.ext
openssl x509 -req -in Node2.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out Node2.pem -days 730 -extfile Node2.ext
# Node cert 3
openssl genrsa -out Node3-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in Node3-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out Node3-key.pem
openssl req -new -key Node3-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=Node3" -out Node3.csr
echo 'subjectAltName=DNS:Node3' > Node3.ext
openssl x509 -req -in Node3.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out Node3.pem -days 730 -extfile Node3.ext
openssl genrsa -out client-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in client-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out client-key.pem
openssl req -new -key client-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=client" -out client.csr
echo 'subjectAltName=DNS:client' > client.ext
openssl x509 -req -in client.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out client.pem -days 730 -extfile client.ext
# 进入config目录
cd /data/opensearch-2.14.0/config
# 编辑opensearch.yml
vi opensearch.yml
# 修改以下部分
cluster.name: test-opensearch
node.name: Node1
path.data: /data/opensearchdata
path.logs: /var/log/opensearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["NodeIP1", "NodeIP2", "NodeIP3"]
cluster.initial_cluster_manager_nodes: ["Node1", "Node2"]
node.roles: [cluster_manager, data, ingest]
plugins.security.disabled: false
plugins.security.ssl.transport.pemtrustedcas_filepath: /data/opensearch-2.14.0/config/root-ca.pem
plugins.security.ssl.transport.pemcert_filepath: /data/opensearch-2.14.0/config/Node1.pem
plugins.security.ssl.transport.pemkey_filepath: /data/opensearch-2.14.0/config/Node1-key.pem
plugins.security.ssl.http.pemcert_filepath: /data/opensearch-2.14.0/config/Node1.pem
plugins.security.ssl.http.pemkey_filepath: /data/opensearch-2.14.0/config/Node1-key.pem
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemtrustedcas_filepath: /data/opensearch-2.14.0/config/root-ca.pem
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.authcz.admin_dn:
- "CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA"
plugins.security.nodes_dn:
- "CN=Node1,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA"
- "CN=Node2,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA"
- "CN=Node3,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA"
transport.port: 9300
cluster.initial_master_nodes: ["Node1", "Node2"]
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.transport.resolve_hostname: false
由于Opensearch不允许以Root账户启动,所以我们需要使用Opensearch账户进行启动,为了避免因权限问题导致的启动失败,我们还需要对Opensearch目录及文件进行相应的账户授权操作。
chown -R opensearch:opensearch /path/to/opensearch
这里我们直接将Opensearch服务注册为系统服务,使用systemctl进行管理。
# 创建opensearch.service文件
vi /etc/systemd/system/opensearch.service
# 添加以下内容
[Unit]
Description=OpenSearch
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
RuntimeDirectory=data
WorkingDirectory=/data/opensearch-2.14.0
ExecStart=/data/opensearch-2.14.0/bin/opensearch -d
User=opensearch
Group=opensearch
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=75
[Install]
WantedBy=multi-user.target
# 重新加载systemctl服务
systemctl daemon-reload
# 开启opensearch.service服务
systemctl enable opensearch.service
# 启动Opensearch
systemctl start opensearch
# 查看Opensearch状态
systemctl status opensearch
启动后,如图所示:
Opensearch集群启动后,在使用之前还需要初始化security相关插件与功能之后才可以正常使用。
初始化脚本存放于/path/to/opensearch/plugins/opensearch-security/tools/目录。
# 修改相关脚本权限
chmod 755 /path/to/opensearch-2.14.0/plugins/opensearch-security/tools/*.sh
# 进入Opensearch目录
cd /path/to/opensearch
# 进行 ecurity权限初始化
./plugins/opensearch-security/tools/securityadmin.sh \
-arc \
-h NodeIP \
-cd /data/opensearch-2.14.0/config/opensearch-security/ \
-icl \
-key /data/opensearch-2.14.0/config/admin-key.pem \
-cert /data/opensearch-2.14.0/config/admin.pem \
-cacert /data/opensearch-2.14.0/config/root-ca.pem \
-nhnv
# 调用脚本时声明一个环境变量以避免出现问题
OPENSEARCH_JAVA_HOME=/path/to/opensearch-2.14.0/jdk ./hash.sh
# 在提示符下输入所需的密码并记下输出哈希值。
# 打开internal_users.yml
vi /path/to/opensearch-2.14.0/config/opensearch-security/internal_users.yml
# 在admin账户部分,并将哈希替换为上一步中提供的输出hash.sh。
admin:
hash: "$2y$1EXAMPLEQqwS8TUcoEXAMPLEeZ3lEHvkEXAMPLERqjyh1icEXAMPLE."
reserved: true
backend_roles:
- "admin"
description: "Admin user"
# 修改后重启Opensearch服务
systemctl restart opensearch.service
curl https://IP:9200 -u admin:password -k
返回结果如下:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。