Link Search Menu Expand Document Documentation Menu

滚动升级实验室

你可以按照以下步骤在你自己的兼容主机上重现 OpenSearch 项目用于测试滚动升级的相同集群状态。如果你想在开发环境中测试升级过程,此练习会很有用。

本实验中使用的步骤在任意选择的 Amazon Elastic Compute Cloud (Amazon EC2) t2.large 实例上进行了验证,该实例使用 Amazon Linux 2 内核版本 Linux 5.10.162-141.675.amzn2.x86_64Docker 版本 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 资源,你应该查看并修改该命令,以避免无意中删除其他资源。此命令不会恢复主机配置更改,例如内存交换行为。

选择主机后,即可开始实验

  1. 为你的 Linux 发行版和系统架构安装相应版本的 Docker Engine
  2. 配置主机上的重要系统设置
    1. 禁用主机的内存分页和交换以提高性能
      sudo swapoff -a
      

    2. 增加 OpenSearch 可用的内存映射数量。打开 sysctl 配置文件进行编辑。此示例命令使用 vim 文本编辑器,但你可以使用任何可用的文本编辑器
      sudo vim /etc/sysctl.conf
      

    3. 将以下行添加到 /etc/sysctl.conf
      vm.max_map_count=262144
      

    4. 保存并退出。如果你使用 vivim 文本编辑器,可以通过切换到命令模式并输入 :wq!ZZ 来保存并退出。
    5. 应用配置更改
      sudo sysctl -p
      

  3. 在你的主目录中创建一个名为 deploy 的新目录,然后导航到它。你将使用 ~/deploy 用于部署脚本、配置文件和 TLS 证书中的路径
    mkdir ~/deploy && cd ~/deploy
    

  4. 从 OpenSearch 项目 documentation-website 仓库下载 upgrade-demo-cluster.sh
    wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/upgrade-demo-cluster.sh
    

  5. 在不进行任何修改的情况下运行该脚本,以部署四个运行 OpenSearch 的容器和一个运行 OpenSearch Dashboards 的容器,它们使用自定义的自签名 TLS 证书和一组预定义的内部用户
    sh upgrade-demo-cluster.sh
    

  6. 确认容器已成功启动
    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
    
  7. OpenSearch 初始化集群所需的时间因底层主机的性能能力而异。你可以通过容器日志查看 OpenSearch 在引导过程中正在做什么
    1. 输入以下命令以在终端窗口中显示容器 os-node-01 的日志
      docker logs -f os-node-01
      

    2. 当节点准备就绪时,你将看到类似于以下示例的日志条目

      示例

      [INFO ][o.o.s.c.ConfigurationRepository] [os-node-01] Node 'os-node-01' initialized
      
    3. Ctrl+C 停止跟踪容器日志并返回命令提示符。
  8. 使用 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 索引数据

  1. 下载示例字段映射文件
    wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce-field_mappings.json
    

  2. 接下来,下载将摄取到此索引中的批量数据
    wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce.ndjson
    

  3. 使用创建索引 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"
    }
    
  4. 使用批量 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
          }
       ]
    }
    
  5. 搜索查询也可以确认数据已成功索引。以下查询返回关键字 `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 添加数据

  1. 打开网页浏览器并导航到你的 Docker 主机上的端口 5601(例如,https://HOST_ADDRESS:5601)。如果 OpenSearch Dashboards 正在运行并且你的浏览器客户端可以访问该主机网络,你将被重定向到登录页面。
    1. 如果由于 TLS 证书是自签名而导致网络浏览器报错,你可能需要在浏览器中绕过证书检查。有关绕过证书检查的信息,请参阅浏览器的文档。每个证书的通用名称 (CN) 是根据集群内通信的容器和节点名称生成的,因此从浏览器连接到主机仍会导致“无效 CN”警告。
  2. 输入默认用户名(admin)和密码(admin)。
  3. 在 OpenSearch Dashboards 的 Home 页面上,选择 Add sample data(添加示例数据)。
  4. Sample web logs(示例 Web 日志)下,选择 Add data(添加数据)。
    1. 可选:选择 View data(查看数据)以查看 [Logs] Web Traffic([日志] Web 流量)仪表板。
  5. 选择菜单按钮以打开导航窗格,然后转到安全 > 内部用户
  6. 选择创建内部用户
  7. 提供用户名密码
  8. Backend role(后端角色)字段中,输入 admin
  9. 选择创建

备份重要文件

在更改集群之前务必创建备份,尤其是在集群在生产环境中运行时。

在本节中,你将

注册快照仓库

  1. 使用 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
    }
    
  2. 可选:执行额外检查以验证仓库是否成功创建
    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"
          }
       }
    }
    

创建快照

快照是集群索引和状态的备份。有关更多信息,请参阅快照

  1. 创建一个包含所有索引和集群状态的快照
    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 索引。以下步骤将指导你生成这些备份文件并将其复制到主机进行存储

  1. 打开与 os-node-01 的交互式伪 TTY 会话
    docker exec -it os-node-01 bash
    

  2. 创建一个名为 backups 的目录并导航到它
    mkdir /usr/share/opensearch/backups && cd /usr/share/opensearch/backups
    

  3. 使用 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
    
  4. 可选:为 TLS 证书创建备份目录并存储证书副本。如果你使用唯一的 TLS 证书,请对每个节点重复此操作
    mkdir /usr/share/opensearch/backups/certs && cp /usr/share/opensearch/config/*pem /usr/share/opensearch/backups/certs/
    

  5. 终止伪 TTY 会话
    exit
    

  6. 将文件复制到你的主机
    docker cp os-node-01:/usr/share/opensearch/backups ~/deploy/
    

执行升级

现在集群已配置完成,并且你已经备份了重要文件和设置,是时候开始版本升级了。

本节中包含的一些步骤,例如禁用分片复制和刷新事务日志,不会影响集群的性能。这些步骤作为最佳实践包含在内,并且可以在客户端在整个升级过程中持续与 OpenSearch 集群交互(例如通过查询现有数据或索引文档)的情况下显著提高集群性能。

  1. 禁用分片复制以停止 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" : { }
    }
    
  2. 对集群执行刷新操作,将事务日志条目提交到 Lucene 索引
    curl -X POST "https://:9201/_flush?pretty" -ku admin:<custom-admin-password>
    

    示例响应

    {
       "_shards" : {
          "total" : 20,
          "successful" : 20,
          "failed" : 0
       }
    }
    
  3. 选择要升级的节点。你可以按任何顺序升级节点,因为此演示集群中的所有节点都是合格的集群管理器。以下命令将停止并删除容器 os-node-01,但不删除已挂载的数据卷
    docker stop os-node-01 && docker container rm os-node-01
    

  4. 启动一个名为 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
    
  5. 可选:查询集群以确定哪个节点正在充当集群管理器。你可以在此过程中的任何时候运行此命令,以查看何时选举新的集群管理器
    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       -
    
  6. 可选:查询集群以查看随着节点被移除和替换,分片分配如何变化。你可以在此过程中的任何时候运行此命令,以查看分片状态如何变化
    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
    
  7. 停止 os-node-02
    docker stop os-node-02 && docker container rm os-node-02
    

  8. 启动一个名为 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
    
  9. 停止 os-node-03
    docker stop os-node-03 && docker container rm os-node-03
    

  10. 启动一个名为 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
    
  11. 停止 os-node-04
    docker stop os-node-04 && docker container rm os-node-04
    

  12. 启动一个名为 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
    
  13. 确认您的集群正在运行新版本
    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       -
    
  14. 您应升级的最后一个组件是 OpenSearch Dashboards 节点。首先,停止并移除旧容器
    docker stop os-dashboards-01 && docker rm os-dashboards-01
    

  15. 创建一个运行目标 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
    
  16. 确保 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
    
  17. 重新启用副本分片分配
    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 之前,您应该验证升级结果。

对于此集群,升级后验证步骤可包括验证以下内容

验证新的运行版本

  1. 验证您的 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       -
    
  2. 验证 OpenSearch Dashboards 的当前运行版本
    1. 选项 1:从网页界面验证 OpenSearch Dashboards 版本。
      1. 打开 Web 浏览器并导航到 Docker 主机上的 5601 端口(例如,https://HOST_ADDRESS:5601)。
      2. 使用默认用户名(admin)和默认密码(admin)登录。
      3. 选择右上角的帮助按钮。版本将显示在弹出窗口中。
      4. 再次选择帮助按钮以关闭弹出窗口。
    2. 选项 2:通过检查 manifest.yml 验证 OpenSearch Dashboards 版本。
      1. 从命令行,打开与 OpenSearch Dashboards 容器的交互式伪 TTY 会话
        docker exec -it os-dashboards-01 bash
        

      2. 检查 manifest.yml 以获取版本
        head -n 5 manifest.yml 
        

        示例响应

        ---
        schema-version: '1.1'
        build:
           name: OpenSearch Dashboards
           version: 2.5.0
        
      3. 终止伪 TTY 会话
        exit
        

验证集群健康状况和分片分配

  1. 查询 集群健康 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
    }
    
  2. 查询 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
    

验证数据一致性

您需要再次查询电子商务索引,以确认样本数据仍然存在

  1. 将此查询的响应与您在上一步使用 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"
          }
       }
    }
    
  2. 打开 Web 浏览器并导航到 Docker 主机上的 5601 端口(例如,https://HOST_ADDRESS:5601)。
  3. 输入默认用户名(admin)和密码(admin)。
  4. 在 OpenSearch Dashboards 的主页上,选择网页界面左上角的菜单按钮以打开导航窗格
  5. 选择仪表板
  6. 选择[日志] Web 流量以打开您在此过程早期添加样本数据时创建的仪表板。
  7. 审查完仪表板后,选择配置文件按钮。选择注销,以便您可以以其他用户身份登录。
  8. 输入您在升级前创建的用户名和密码,然后选择登录

后续步骤

查阅以下资源以了解有关 OpenSearch 如何工作的更多信息