滚动升级实验室
你可以按照以下步骤
本实验中使用的步骤在任意选择的 Amazon Elastic Compute Cloud (Amazon EC2) t2.large
实例上进行了验证,该实例使用 Amazon Linux 2 内核版本 Linux 5.10.162-141.675.amzn2.x86_64
和 Docker 版本 20.10.17, build 100c701
。该实例配置了一个附加的 20 GiB gp2 Amazon EBS 根卷。这些规格仅供参考,不代表 OpenSearch 或 OpenSearch Dashboards 的硬件要求。
此过程中对主机上的 $HOME
路径的引用由波浪号字符 (“~”) 表示,以使说明更具可移植性。如果你想指定绝对路径,请修改 upgrade-demo-cluster.sh
中定义并在本文档相关命令中使用的卷路径,以反映你的环境。
设置环境
在按照本文档中的步骤操作时,你将使用我们提供的脚本定义多个 Docker 资源,包括容器、卷和专用 Docker 网络。如果你想重新开始该过程,可以使用以下命令清理环境
docker container stop $(docker container ls -aqf name=os-); \
docker container rm $(docker container ls -aqf name=os-); \
docker volume rm -f $(docker volume ls -q | egrep 'data-0|repo-0'); \
docker network rm opensearch-dev-net
该命令会删除匹配正则表达式 os-*
的容器名称,匹配 data-0*
和 repo-0*
的数据卷,以及名为 opensearch-dev-net
的 Docker 网络。如果你的主机上运行着其他 Docker 资源,你应该查看并修改该命令,以避免无意中删除其他资源。此命令不会恢复主机配置更改,例如内存交换行为。
选择主机后,即可开始实验
- 为你的 Linux 发行版和系统架构安装相应版本的 Docker Engine。
- 配置主机上的重要系统设置
- 禁用主机的内存分页和交换以提高性能
sudo swapoff -a
- 增加 OpenSearch 可用的内存映射数量。打开
sysctl
配置文件进行编辑。此示例命令使用 vim 文本编辑器,但你可以使用任何可用的文本编辑器sudo vim /etc/sysctl.conf
- 将以下行添加到
/etc/sysctl.conf
vm.max_map_count=262144
- 保存并退出。如果你使用
vi
或vim
文本编辑器,可以通过切换到命令模式并输入:wq!
或ZZ
来保存并退出。 - 应用配置更改
sudo sysctl -p
- 禁用主机的内存分页和交换以提高性能
- 在你的主目录中创建一个名为
deploy
的新目录,然后导航到它。你将使用~/deploy
用于部署脚本、配置文件和 TLS 证书中的路径mkdir ~/deploy && cd ~/deploy
- 从 OpenSearch 项目 documentation-website 仓库下载
upgrade-demo-cluster.sh
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/upgrade-demo-cluster.sh
- 在不进行任何修改的情况下运行该脚本,以部署四个运行 OpenSearch 的容器和一个运行 OpenSearch Dashboards 的容器,它们使用自定义的自签名 TLS 证书和一组预定义的内部用户
sh upgrade-demo-cluster.sh
- 确认容器已成功启动
docker container ls
示例响应
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e5218c8397d opensearchproject/opensearch-dashboards:1.3.7 "./opensearch-dashbo…" 24 seconds ago Up 22 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp os-dashboards-01 cb5188308b21 opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 25 seconds ago Up 24 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9204->9200/tcp, :::9204->9200/tcp, 0.0.0.0:9604->9600/tcp, :::9604->9600/tcp os-node-04 71b682aa6671 opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 26 seconds ago Up 25 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9203->9200/tcp, :::9203->9200/tcp, 0.0.0.0:9603->9600/tcp, :::9603->9600/tcp os-node-03 f894054a9378 opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 27 seconds ago Up 26 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9202->9200/tcp, :::9202->9200/tcp, 0.0.0.0:9602->9600/tcp, :::9602->9600/tcp os-node-02 2e9c91c959cd opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 28 seconds ago Up 27 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9201->9200/tcp, :::9201->9200/tcp, 0.0.0.0:9601->9600/tcp, :::9601->9600/tcp os-node-01
- OpenSearch 初始化集群所需的时间因底层主机的性能能力而异。你可以通过容器日志查看 OpenSearch 在引导过程中正在做什么
- 输入以下命令以在终端窗口中显示容器
os-node-01
的日志docker logs -f os-node-01
- 当节点准备就绪时,你将看到类似于以下示例的日志条目
示例
[INFO ][o.o.s.c.ConfigurationRepository] [os-node-01] Node 'os-node-01' initialized
- 按
Ctrl+C
停止跟踪容器日志并返回命令提示符。
- 输入以下命令以在终端窗口中显示容器
- 使用 cURL 查询 OpenSearch REST API。在以下命令中,通过将请求发送到主机端口
9201
(映射到容器上的端口9200
)来查询os-node-01
curl -s "https://:9201" -ku admin:<custom-admin-password>
示例响应
{ "name" : "os-node-01", "cluster_name" : "opensearch-dev-cluster", "cluster_uuid" : "g1MMknuDRuuD9IaaNt56KA", "version" : { "distribution" : "opensearch", "number" : "1.3.7", "build_type" : "tar", "build_hash" : "db18a0d5a08b669fb900c00d81462e221f4438ee", "build_date" : "2022-12-07T22:59:20.186520Z", "build_snapshot" : false, "lucene_version" : "8.10.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "The OpenSearch Project: https://opensearch.org.cn/" }
提示:将 -s
选项与 curl
一起使用可隐藏进度计和错误消息。
添加数据和配置 OpenSearch Security
OpenSearch 集群运行起来后,是时候添加数据并配置一些 OpenSearch Security 设置了。添加的数据和配置的设置将在版本升级完成后再次验证。
本节可分为两部分
使用 REST API 索引数据
- 下载示例字段映射文件
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce-field_mappings.json
- 接下来,下载将摄取到此索引中的批量数据
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce.ndjson
- 使用创建索引 API 使用
ecommerce-field_mappings.json
中定义的映射创建索引curl -H "Content-Type: application/json" \ -X PUT "https://:9201/ecommerce?pretty" \ --data-binary "@ecommerce-field_mappings.json" \ -ku admin:<custom-admin-password>
示例响应
{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "ecommerce" }
- 使用批量 API 将
ecommerce.ndjson
中的数据添加到新的电商索引中curl -H "Content-Type: application/x-ndjson" \ -X PUT "https://:9201/ecommerce/_bulk?pretty" \ --data-binary "@ecommerce.ndjson" \ -ku admin:<custom-admin-password>
示例响应(已截断)
{ "took" : 3323, "errors" : false, "items" : [ ... "index" : { "_index" : "ecommerce", "_type" : "_doc", "_id" : "4674", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 4674, "_primary_term" : 1, "status" : 201 } ] }
-
搜索查询也可以确认数据已成功索引。以下查询返回关键字 `customer_first_name` 等于 `Sonya` 的文档数量
curl -H 'Content-Type: application/json' \ -X GET "https://:9201/ecommerce/_search?pretty=true&filter_path=hits.total" \ -d'{"query":{"match":{"customer_first_name":"Sonya"}}}' \ -ku admin:<custom-admin-password>
示例响应
{ "hits" : { "total" : { "value" : 106, "relation" : "eq" } } }
使用 OpenSearch Dashboards 添加数据
- 打开网页浏览器并导航到你的 Docker 主机上的端口
5601
(例如,https://HOST_ADDRESS:5601
)。如果 OpenSearch Dashboards 正在运行并且你的浏览器客户端可以访问该主机网络,你将被重定向到登录页面。- 如果由于 TLS 证书是自签名而导致网络浏览器报错,你可能需要在浏览器中绕过证书检查。有关绕过证书检查的信息,请参阅浏览器的文档。每个证书的通用名称 (CN) 是根据集群内通信的容器和节点名称生成的,因此从浏览器连接到主机仍会导致“无效 CN”警告。
- 输入默认用户名(
admin
)和密码(admin
)。 - 在 OpenSearch Dashboards 的 Home 页面上,选择 Add sample data(添加示例数据)。
- 在 Sample web logs(示例 Web 日志)下,选择 Add data(添加数据)。
- 可选:选择 View data(查看数据)以查看 [Logs] Web Traffic([日志] Web 流量)仪表板。
- 选择菜单按钮以打开导航窗格,然后转到安全 > 内部用户。
- 选择创建内部用户。
- 提供用户名和密码。
- 在 Backend role(后端角色)字段中,输入
admin
。 - 选择创建。
备份重要文件
在更改集群之前务必创建备份,尤其是在集群在生产环境中运行时。
在本节中,你将
注册快照仓库
- 使用
upgrade-demo-cluster.sh
映射的卷注册仓库curl -H 'Content-Type: application/json' \ -X PUT "https://:9201/_snapshot/snapshot-repo?pretty" \ -d '{"type":"fs","settings":{"location":"/usr/share/opensearch/snapshots"}}' \ -ku admin:<custom-admin-password>
示例响应
{ "acknowledged" : true }
- 可选:执行额外检查以验证仓库是否成功创建
curl -H 'Content-Type: application/json' \ -X POST "https://:9201/_snapshot/snapshot-repo/_verify?timeout=0s&master_timeout=50s&pretty" \ -ku admin:<custom-admin-password>
示例响应
{ "nodes" : { "UODBXfAlRnueJ67grDxqgw" : { "name" : "os-node-03" }, "14I_OyBQQXio8nmk0xsVcQ" : { "name" : "os-node-04" }, "tQp3knPRRUqHvFNKpuD2vQ" : { "name" : "os-node-02" }, "rPe8D6ssRgO5twIP00wbCQ" : { "name" : "os-node-01" } } }
创建快照
快照是集群索引和状态的备份。有关更多信息,请参阅快照。
- 创建一个包含所有索引和集群状态的快照
curl -H 'Content-Type: application/json' \ -X PUT "https://:9201/_snapshot/snapshot-repo/cluster-snapshot-v137?wait_for_completion=true&pretty" \ -ku admin:<custom-admin-password>
示例响应
{ "snapshot" : { "snapshot" : "cluster-snapshot-v137", "uuid" : "-IYB8QNPShGOTnTtMjBjNg", "version_id" : 135248527, "version" : "1.3.7", "indices" : [ "opensearch_dashboards_sample_data_logs", ".opendistro_security", "security-auditlog-2023.02.27", ".kibana_1", ".kibana_92668751_admin_1", "ecommerce", "security-auditlog-2023.03.06", "security-auditlog-2023.02.28", "security-auditlog-2023.03.07" ], "data_streams" : [ ], "include_global_state" : true, "state" : "SUCCESS", "start_time" : "2023-03-07T18:33:00.656Z", "start_time_in_millis" : 1678213980656, "end_time" : "2023-03-07T18:33:01.471Z", "end_time_in_millis" : 1678213981471, "duration_in_millis" : 815, "failures" : [ ], "shards" : { "total" : 9, "failed" : 0, "successful" : 9 } } }
备份安全设置
集群管理员可以使用以下任一方法修改 OpenSearch Security 设置
- 修改 YAML 文件并运行
securityadmin.sh
- 使用管理员证书发出 REST API 请求
- 使用 OpenSearch Dashboards 进行更改
无论你选择哪种方法,OpenSearch Security 都会将你的配置写入一个名为 .opendistro_security
的特殊系统索引。此系统索引在升级过程中会保留,并且也保存在你创建的快照中。但是,恢复系统索引需要 admin
证书授予的提升权限。要了解更多信息,请参阅系统索引和配置 TLS 证书。
你还可以通过在任何 OpenSearch 节点上使用 -backup
选项运行 securityadmin.sh
将 OpenSearch Security 设置导出为 YAML 文件。这些 YAML 文件可用于使用现有配置重新初始化 .opendistro_security
索引。以下步骤将指导你生成这些备份文件并将其复制到主机进行存储
- 打开与
os-node-01
的交互式伪 TTY 会话docker exec -it os-node-01 bash
- 创建一个名为
backups
的目录并导航到它mkdir /usr/share/opensearch/backups && cd /usr/share/opensearch/backups
- 使用
securityadmin.sh
在/usr/share/opensearch/backups/
中创建 OpenSearch Security 设置的备份/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \ -backup /usr/share/opensearch/backups \ -icl \ -nhnv \ -cacert /usr/share/opensearch/config/root-ca.pem \ -cert /usr/share/opensearch/config/admin.pem \ -key /usr/share/opensearch/config/admin-key.pem
示例响应
Security Admin v7 Will connect to localhost:9300 ... done Connected as CN=A,OU=DOCS,O=OPENSEARCH,L=PORTLAND,ST=OREGON,C=US OpenSearch Version: 1.3.7 OpenSearch Security Version: 1.3.7.0 Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ... Clustername: opensearch-dev-cluster Clusterstate: GREEN Number of nodes: 4 Number of data nodes: 4 .opendistro_security index already exists, so we do not need to create one. Will retrieve '/config' into /usr/share/opensearch/backups/config.yml SUCC: Configuration for 'config' stored in /usr/share/opensearch/backups/config.yml Will retrieve '/roles' into /usr/share/opensearch/backups/roles.yml SUCC: Configuration for 'roles' stored in /usr/share/opensearch/backups/roles.yml Will retrieve '/rolesmapping' into /usr/share/opensearch/backups/roles_mapping.yml SUCC: Configuration for 'rolesmapping' stored in /usr/share/opensearch/backups/roles_mapping.yml Will retrieve '/internalusers' into /usr/share/opensearch/backups/internal_users.yml SUCC: Configuration for 'internalusers' stored in /usr/share/opensearch/backups/internal_users.yml Will retrieve '/actiongroups' into /usr/share/opensearch/backups/action_groups.yml SUCC: Configuration for 'actiongroups' stored in /usr/share/opensearch/backups/action_groups.yml Will retrieve '/tenants' into /usr/share/opensearch/backups/tenants.yml SUCC: Configuration for 'tenants' stored in /usr/share/opensearch/backups/tenants.yml Will retrieve '/nodesdn' into /usr/share/opensearch/backups/nodes_dn.yml SUCC: Configuration for 'nodesdn' stored in /usr/share/opensearch/backups/nodes_dn.yml Will retrieve '/whitelist' into /usr/share/opensearch/backups/whitelist.yml SUCC: Configuration for 'whitelist' stored in /usr/share/opensearch/backups/whitelist.yml Will retrieve '/audit' into /usr/share/opensearch/backups/audit.yml SUCC: Configuration for 'audit' stored in /usr/share/opensearch/backups/audit.yml
- 可选:为 TLS 证书创建备份目录并存储证书副本。如果你使用唯一的 TLS 证书,请对每个节点重复此操作
mkdir /usr/share/opensearch/backups/certs && cp /usr/share/opensearch/config/*pem /usr/share/opensearch/backups/certs/
- 终止伪 TTY 会话
exit
- 将文件复制到你的主机
docker cp os-node-01:/usr/share/opensearch/backups ~/deploy/
执行升级
现在集群已配置完成,并且你已经备份了重要文件和设置,是时候开始版本升级了。
本节中包含的一些步骤,例如禁用分片复制和刷新事务日志,不会影响集群的性能。这些步骤作为最佳实践包含在内,并且可以在客户端在整个升级过程中持续与 OpenSearch 集群交互(例如通过查询现有数据或索引文档)的情况下显著提高集群性能。
- 禁用分片复制以停止 Lucene 索引段在集群内的移动
curl -H 'Content-type: application/json' \ -X PUT "https://:9201/_cluster/settings?pretty" \ -d'{"persistent":{"cluster.routing.allocation.enable":"primaries"}}' \ -ku admin:<custom-admin-password>
示例响应
{ "acknowledged" : true, "persistent" : { "cluster" : { "routing" : { "allocation" : { "enable" : "primaries" } } } }, "transient" : { } }
- 对集群执行刷新操作,将事务日志条目提交到 Lucene 索引
curl -X POST "https://:9201/_flush?pretty" -ku admin:<custom-admin-password>
示例响应
{ "_shards" : { "total" : 20, "successful" : 20, "failed" : 0 } }
- 选择要升级的节点。你可以按任何顺序升级节点,因为此演示集群中的所有节点都是合格的集群管理器。以下命令将停止并删除容器
os-node-01
,但不删除已挂载的数据卷docker stop os-node-01 && docker container rm os-node-01
- 启动一个名为
os-node-01
的新容器,使用opensearchproject/opensearch:2.5.0
镜像,并使用与原始容器相同的映射卷docker run -d \ -p 9201:9200 -p 9601:9600 \ -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \ --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \ -v data-01:/usr/share/opensearch/data \ -v repo-01:/usr/share/opensearch/snapshots \ -v ~/deploy/opensearch-01.yml:/usr/share/opensearch/config/opensearch.yml \ -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \ -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \ -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \ -v ~/deploy/os-node-01.pem:/usr/share/opensearch/config/os-node-01.pem \ -v ~/deploy/os-node-01-key.pem:/usr/share/opensearch/config/os-node-01-key.pem \ --network opensearch-dev-net \ --ip 172.20.0.11 \ --name os-node-01 \ opensearchproject/opensearch:2.5.0
示例响应
d26d0cb2e1e93e9c01bb00f19307525ef89c3c3e306d75913860e6542f729ea4
- 可选:查询集群以确定哪个节点正在充当集群管理器。你可以在此过程中的任何时候运行此命令,以查看何时选举新的集群管理器
curl -s "https://:9201/_cat/nodes?v&h=name,version,node.role,master" \ -ku admin:<custom-admin-password> | column -t
示例响应
name version node.role master os-node-01 2.5.0 dimr - os-node-04 1.3.7 dimr * os-node-02 1.3.7 dimr - os-node-03 1.3.7 dimr -
- 可选:查询集群以查看随着节点被移除和替换,分片分配如何变化。你可以在此过程中的任何时候运行此命令,以查看分片状态如何变化
curl -s "https://:9201/_cat/shards" \ -ku admin:<custom-admin-password>
示例响应
security-auditlog-2023.03.06 0 p STARTED 53 214.5kb 172.20.0.13 os-node-03 security-auditlog-2023.03.06 0 r UNASSIGNED .kibana_1 0 p STARTED 3 14.5kb 172.20.0.12 os-node-02 .kibana_1 0 r STARTED 3 14.5kb 172.20.0.13 os-node-03 ecommerce 0 p STARTED 4675 3.9mb 172.20.0.12 os-node-02 ecommerce 0 r STARTED 4675 3.9mb 172.20.0.14 os-node-04 security-auditlog-2023.03.07 0 p STARTED 37 175.7kb 172.20.0.14 os-node-04 security-auditlog-2023.03.07 0 r UNASSIGNED .opendistro_security 0 p STARTED 10 67.9kb 172.20.0.12 os-node-02 .opendistro_security 0 r STARTED 10 67.9kb 172.20.0.13 os-node-03 .opendistro_security 0 r STARTED 10 64.5kb 172.20.0.14 os-node-04 .opendistro_security 0 r UNASSIGNED security-auditlog-2023.02.27 0 p STARTED 4 80.5kb 172.20.0.12 os-node-02 security-auditlog-2023.02.27 0 r UNASSIGNED security-auditlog-2023.02.28 0 p STARTED 6 104.1kb 172.20.0.14 os-node-04 security-auditlog-2023.02.28 0 r UNASSIGNED opensearch_dashboards_sample_data_logs 0 p STARTED 14074 9.1mb 172.20.0.12 os-node-02 opensearch_dashboards_sample_data_logs 0 r STARTED 14074 8.9mb 172.20.0.13 os-node-03 .kibana_92668751_admin_1 0 r STARTED 33 37.3kb 172.20.0.13 os-node-03 .kibana_92668751_admin_1 0 p STARTED 33 37.3kb 172.20.0.14 os-node-04
- 停止
os-node-02
docker stop os-node-02 && docker container rm os-node-02
- 启动一个名为
os-node-02
的新容器,使用opensearchproject/opensearch:2.5.0
镜像,并使用与原始容器相同的映射卷docker run -d \ -p 9202:9200 -p 9602:9600 \ -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \ --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \ -v data-02:/usr/share/opensearch/data \ -v repo-01:/usr/share/opensearch/snapshots \ -v ~/deploy/opensearch-02.yml:/usr/share/opensearch/config/opensearch.yml \ -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \ -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \ -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \ -v ~/deploy/os-node-02.pem:/usr/share/opensearch/config/os-node-02.pem \ -v ~/deploy/os-node-02-key.pem:/usr/share/opensearch/config/os-node-02-key.pem \ --network opensearch-dev-net \ --ip 172.20.0.12 \ --name os-node-02 \ opensearchproject/opensearch:2.5.0
示例响应
7b802865bd6eb420a106406a54fc388ed8e5e04f6cbd908c2a214ea5ce72ac00
- 停止
os-node-03
docker stop os-node-03 && docker container rm os-node-03
- 启动一个名为
os-node-03
的新容器,使用opensearchproject/opensearch:2.5.0
镜像,并使用与原始容器相同的映射卷docker run -d \ -p 9203:9200 -p 9603:9600 \ -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \ --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \ -v data-03:/usr/share/opensearch/data \ -v repo-01:/usr/share/opensearch/snapshots \ -v ~/deploy/opensearch-03.yml:/usr/share/opensearch/config/opensearch.yml \ -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \ -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \ -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \ -v ~/deploy/os-node-03.pem:/usr/share/opensearch/config/os-node-03.pem \ -v ~/deploy/os-node-03-key.pem:/usr/share/opensearch/config/os-node-03-key.pem \ --network opensearch-dev-net \ --ip 172.20.0.13 \ --name os-node-03 \ opensearchproject/opensearch:2.5.0
示例响应
d7f11726841a89eb88ff57a8cbecab392399f661a5205f0c81b60a995fc6c99d
- 停止
os-node-04
docker stop os-node-04 && docker container rm os-node-04
- 启动一个名为
os-node-04
的新容器,使用opensearchproject/opensearch:2.5.0
镜像,并使用与原始容器相同的映射卷docker run -d \ -p 9204:9200 -p 9604:9600 \ -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \ --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \ -v data-04:/usr/share/opensearch/data \ -v repo-01:/usr/share/opensearch/snapshots \ -v ~/deploy/opensearch-04.yml:/usr/share/opensearch/config/opensearch.yml \ -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \ -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \ -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \ -v ~/deploy/os-node-04.pem:/usr/share/opensearch/config/os-node-04.pem \ -v ~/deploy/os-node-04-key.pem:/usr/share/opensearch/config/os-node-04-key.pem \ --network opensearch-dev-net \ --ip 172.20.0.14 \ --name os-node-04 \ opensearchproject/opensearch:2.5.0
示例响应
26f8286ab11e6f8dcdf6a83c95f265172f9557578a1b292af84c6f5ef8738e1d
- 确认您的集群正在运行新版本
curl -s "https://:9201/_cat/nodes?v&h=name,version,node.role,master" \ -ku admin:<custom-admin-password> | column -t
示例响应
name version node.role master os-node-01 2.5.0 dimr * os-node-02 2.5.0 dimr - os-node-04 2.5.0 dimr - os-node-03 2.5.0 dimr -
- 您应升级的最后一个组件是 OpenSearch Dashboards 节点。首先,停止并移除旧容器
docker stop os-dashboards-01 && docker rm os-dashboards-01
- 创建一个运行目标 OpenSearch Dashboards 版本的新容器
docker run -d \ -p 5601:5601 --expose 5601 \ -v ~/deploy/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml \ -v ~/deploy/root-ca.pem:/usr/share/opensearch-dashboards/config/root-ca.pem \ -v ~/deploy/os-dashboards-01.pem:/usr/share/opensearch-dashboards/config/os-dashboards-01.pem \ -v ~/deploy/os-dashboards-01-key.pem:/usr/share/opensearch-dashboards/config/os-dashboards-01-key.pem \ --network opensearch-dev-net \ --ip 172.20.0.10 \ --name os-dashboards-01 \ opensearchproject/opensearch-dashboards:2.5.0
示例响应
310de7a24cf599ca0b39b241db07fa8865592ebe15b6f5fda26ad19d8e1c1e09
- 确保 OpenSearch Dashboards 容器已正确启动。可以使用以下命令确认对
https://HOST_ADDRESS:5601
的请求被重定向(HTTP 状态码 302)到/app/login?
curl https://:5601 -kI
示例响应
HTTP/1.1 302 Found location: /app/login? osd-name: opensearch-dashboards-dev cache-control: private, no-cache, no-store, must-revalidate set-cookie: security_authentication=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly; Path=/ content-length: 0 Date: Wed, 08 Mar 2023 15:36:53 GMT Connection: keep-alive Keep-Alive: timeout=120
- 重新启用副本分片分配
curl -H 'Content-type: application/json' \ -X PUT "https://:9201/_cluster/settings?pretty" \ -d'{"persistent":{"cluster.routing.allocation.enable":"all"}}' \ -ku admin:<custom-admin-password>
示例响应
{ "acknowledged" : true, "persistent" : { "cluster" : { "routing" : { "allocation" : { "enable" : "all" } } } }, "transient" : { } }
验证升级
您已成功部署了一个安全的 OpenSearch 集群,索引了数据,创建了一个包含样本数据的仪表板,创建了一个新的内部用户,备份了重要文件,并将集群从 1.3.7 版升级到 2.5.0 版。在您继续探索和试验 OpenSearch 和 OpenSearch Dashboards 之前,您应该验证升级结果。
对于此集群,升级后验证步骤可包括验证以下内容
验证新的运行版本
- 验证您的 OpenSearch 节点的当前运行版本
curl -s "https://:9201/_cat/nodes?v&h=name,version,node.role,master" \ -ku admin:<custom-admin-password> | column -t
示例响应
name version node.role master os-node-01 2.5.0 dimr * os-node-02 2.5.0 dimr - os-node-04 2.5.0 dimr - os-node-03 2.5.0 dimr -
- 验证 OpenSearch Dashboards 的当前运行版本
- 选项 1:从网页界面验证 OpenSearch Dashboards 版本。
- 打开 Web 浏览器并导航到 Docker 主机上的
5601
端口(例如,https://HOST_ADDRESS:5601
)。 - 使用默认用户名(
admin
)和默认密码(admin
)登录。 - 选择右上角的帮助按钮。版本将显示在弹出窗口中。
- 再次选择帮助按钮以关闭弹出窗口。
- 打开 Web 浏览器并导航到 Docker 主机上的
- 选项 2:通过检查
manifest.yml
验证 OpenSearch Dashboards 版本。- 从命令行,打开与 OpenSearch Dashboards 容器的交互式伪 TTY 会话
docker exec -it os-dashboards-01 bash
- 检查
manifest.yml
以获取版本head -n 5 manifest.yml
示例响应
--- schema-version: '1.1' build: name: OpenSearch Dashboards version: 2.5.0
- 终止伪 TTY 会话
exit
- 从命令行,打开与 OpenSearch Dashboards 容器的交互式伪 TTY 会话
- 选项 1:从网页界面验证 OpenSearch Dashboards 版本。
验证集群健康状况和分片分配
- 查询 集群健康 API 端点以查看有关集群健康状况的信息。您应该看到状态为
green
,这表示所有主分片和副本分片均已分配curl -s "https://:9201/_cluster/health?pretty" -ku admin:<custom-admin-password>
示例响应
{ "cluster_name" : "opensearch-dev-cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 4, "number_of_data_nodes" : 4, "discovered_master" : true, "discovered_cluster_manager" : true, "active_primary_shards" : 16, "active_shards" : 36, "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 }
- 查询 CAT 分片 API 端点以查看集群升级后分片是如何分配的
curl -s "https://:9201/_cat/shards" -ku admin:<custom-admin-password>
示例响应
security-auditlog-2023.02.27 0 r STARTED 4 80.5kb 172.20.0.13 os-node-03 security-auditlog-2023.02.27 0 p STARTED 4 80.5kb 172.20.0.11 os-node-01 security-auditlog-2023.03.08 0 p STARTED 30 95.2kb 172.20.0.13 os-node-03 security-auditlog-2023.03.08 0 r STARTED 30 123.8kb 172.20.0.11 os-node-01 ecommerce 0 p STARTED 4675 3.9mb 172.20.0.12 os-node-02 ecommerce 0 r STARTED 4675 3.9mb 172.20.0.13 os-node-03 .kibana_1 0 p STARTED 3 5.9kb 172.20.0.12 os-node-02 .kibana_1 0 r STARTED 3 5.9kb 172.20.0.11 os-node-01 .kibana_92668751_admin_1 0 p STARTED 33 37.3kb 172.20.0.13 os-node-03 .kibana_92668751_admin_1 0 r STARTED 33 37.3kb 172.20.0.11 os-node-01 opensearch_dashboards_sample_data_logs 0 p STARTED 14074 9.1mb 172.20.0.12 os-node-02 opensearch_dashboards_sample_data_logs 0 r STARTED 14074 9.1mb 172.20.0.14 os-node-04 security-auditlog-2023.02.28 0 p STARTED 6 26.2kb 172.20.0.11 os-node-01 security-auditlog-2023.02.28 0 r STARTED 6 26.2kb 172.20.0.14 os-node-04 .opendistro-reports-definitions 0 p STARTED 0 208b 172.20.0.12 os-node-02 .opendistro-reports-definitions 0 r STARTED 0 208b 172.20.0.13 os-node-03 .opendistro-reports-definitions 0 r STARTED 0 208b 172.20.0.14 os-node-04 security-auditlog-2023.03.06 0 r STARTED 53 174.6kb 172.20.0.12 os-node-02 security-auditlog-2023.03.06 0 p STARTED 53 174.6kb 172.20.0.14 os-node-04 .kibana_101107607_newuser_1 0 r STARTED 1 5.1kb 172.20.0.13 os-node-03 .kibana_101107607_newuser_1 0 p STARTED 1 5.1kb 172.20.0.11 os-node-01 .opendistro_security 0 r STARTED 10 64.5kb 172.20.0.12 os-node-02 .opendistro_security 0 r STARTED 10 64.5kb 172.20.0.13 os-node-03 .opendistro_security 0 r STARTED 10 64.5kb 172.20.0.11 os-node-01 .opendistro_security 0 p STARTED 10 64.5kb 172.20.0.14 os-node-04 .kibana_-152937574_admintenant_1 0 r STARTED 1 5.1kb 172.20.0.12 os-node-02 .kibana_-152937574_admintenant_1 0 p STARTED 1 5.1kb 172.20.0.14 os-node-04 security-auditlog-2023.03.07 0 r STARTED 37 175.7kb 172.20.0.12 os-node-02 security-auditlog-2023.03.07 0 p STARTED 37 175.7kb 172.20.0.14 os-node-04 .kibana_92668751_admin_2 0 p STARTED 34 38.6kb 172.20.0.13 os-node-03 .kibana_92668751_admin_2 0 r STARTED 34 38.6kb 172.20.0.11 os-node-01 .kibana_2 0 p STARTED 3 6kb 172.20.0.13 os-node-03 .kibana_2 0 r STARTED 3 6kb 172.20.0.14 os-node-04 .opendistro-reports-instances 0 r STARTED 0 208b 172.20.0.12 os-node-02 .opendistro-reports-instances 0 r STARTED 0 208b 172.20.0.11 os-node-01 .opendistro-reports-instances 0 p STARTED 0 208b 172.20.0.14 os-node-04
验证数据一致性
您需要再次查询电子商务索引,以确认样本数据仍然存在
- 将此查询的响应与您在上一步的使用 REST API 索引数据中收到的响应进行比较
curl -H 'Content-Type: application/json' \ -X GET "https://:9201/ecommerce/_search?pretty=true&filter_path=hits.total" \ -d'{"query":{"match":{"customer_first_name":"Sonya"}}}' \ -ku admin:<custom-admin-password>
示例响应
{ "hits" : { "total" : { "value" : 106, "relation" : "eq" } } }
- 打开 Web 浏览器并导航到 Docker 主机上的
5601
端口(例如,https://HOST_ADDRESS:5601
)。 - 输入默认用户名(
admin
)和密码(admin
)。 - 在 OpenSearch Dashboards 的主页上,选择网页界面左上角的菜单按钮以打开导航窗格。
- 选择仪表板。
- 选择[日志] Web 流量以打开您在此过程早期添加样本数据时创建的仪表板。
- 审查完仪表板后,选择配置文件按钮。选择注销,以便您可以以其他用户身份登录。
- 输入您在升级前创建的用户名和密码,然后选择登录。
后续步骤
查阅以下资源以了解有关 OpenSearch 如何工作的更多信息