搭建3scale的高可用架构

发布日期:2020年12月16日
作者:田畑义之,日立制作所有限公司(GitHub账号:@y-tabata)

首先

3scale是一款开源的API管理产品。本次我们将使用3scale的OpenShift Operator来构建最新版本2.9.1的高可用(HA)配置。有关3scale的详细信息,请参阅Think IT的连载文章《基于开源软件的API管理平台3scale入门》。

这篇文章仅代表作者的观点,不是日立制作所和Red Hat的官方文件。

3scale的高可用性配置是什么?

3scale的HA架构是什么?由于3scale在OpenShift上运行,即使发生故障,也可以通过OpenShift的功能,如存活探测、就绪探测和重启策略,设计使障碍点自动恢复,并在最短的停机时间内恢复。

しかし、システムによってはこの最小のダウンタイムでさえも許されないことがあります。そのようなシステムでは、システムのコンポーネントを冗長化し、一方のコンポーネントに障害が発生しても他方のコンポーネントで業務を継続できるように、HA構成をとることが一般的です。3scaleでも、そのような目的のためにHA構成をとることができます。

3scaleは以下のようなPodで構成されています。HA構成では、重要なPodはレプリカ数を増やして冗長化します。また重要な情報を持つDBやファイルストレージは、レプリケーション構成を組むために、OpenShift外に構築します。

Pod名説明HA構成のときapicast-production本番環境用のAPIゲートウェイ。レプリカ数を2以上にして冗長化する。apicast-stagingステージング環境用のAPIゲートウェイ。レプリカ数を2以上にして冗長化する。system-app管理者ポータルや開発者ポータルを提供する。レプリカ数を2以上にして冗長化する。system-sidekiq非同期でsystemコンポーネントのバックグラウンドタスクを実行する。レプリカ数を2以上にして冗長化する。system-sphinx管理者ポータルのテキスト検索機能用のインデックスサービス。レプリカ数は1のままでOK。system-memcache管理者ポータルや開発者ポータル用のキャッシュサービス。レプリカ数は1のままでOK。system-mysql管理者ポータルや開発者ポータル用各種リソースを格納するメインデータベース。OpenShift外に構築するため、Podは不要。system-redissystemコンポーネントのタスクを保存するデータベース。OpenShift外に構築するため、Podは不要。backend-listener認証機能やレポート機能を担当する。レプリカ数を2以上にして冗長化する。backend-worker非同期でbackendコンポーネントのバックグラウンドタスクを実行する。レプリカ数を2以上にして冗長化する。backend-cronbackendコンポーネントの失敗したタスクを再スケジュールする。レプリカ数を2以上にして冗長化する。backend-redis認証機能やレポート機能用のデータや、backendコンポーネントのタスクを保存するデータベース。OpenShift外に構築するため、Podは不要。zyncOpenID Connect関連の通知を受信し、zync-queにデータ同期を委任する。レプリカ数を2以上にして冗長化する。zync-queOpenShiftのRouteの作成・管理や、Red Hat Single Sign-Onとのデータ同期を担当する。レプリカ数を2以上にして冗長化する。zync-databasezyncコンポーネントのタスクを保存するデータベース。レプリカ数は1のままでOK。

尝试构建3scale的高可用架构。

那么,让我们实际上搭建一个3scale的高可用配置。这次我们将使用AWS上的OpenShift 4.5环境来进行搭建。

预先准备

首先,让我们做好事前准备。我们将在OpenShift之外建立DB和文件存储。这次我们将使用以下AWS服务。

DB/ファイルストレージAWSサービスsystem-mysqlの代替となるDBAmazon RDS for MySQL1system-redisの代替となるDBAmazon ElastiCache for Redisbackend-redisの代替となるDBAmazon ElastiCache for RedisファイルストレージAmazon S3

安装3scale运算符

operator_hub.png
operator_summary.png
operator_install.png

以上是3scale运算符的安装已完成。

安装3scale

让我们开始安装3scale。
首先,我们将创建四个Secret,以便连接到在OpenShift外部创建的数据库和文件存储。

(1) 用于代替系统-mysql的数据库连接机密

apiVersion: v1
kind: Secret
metadata:
  name: system-database
stringData:
  URL: "mysql2://root:<rootユーザのパスワード>@<Amazon RDSのエンドポイント>/system"
  DB_USER: "root"
  DB_PASSWORD: "<rootユーザのパスワード>"
type: Opaque

(2)用于替代system-redis的数据库连接的秘密。

apiVersion: v1
kind: Secret
metadata:
  name: system-redis
stringData:
  URL: "redis://<Amazon ElastiCache for Redisのプライマリエンドポイント>/1"
  NAMESPACE: ""
  MESSAGE_BUS_URL: "redis://<Amazon ElastiCache for Redisのプライマリエンドポイント>/8"
  MESSAGE_BUS_NAMESPACE: ""
type: Opaque

(3)用于替代后端Redis进行数据库连接的Secret

apiVersion: v1
kind: Secret
metadata:
  name: backend-redis
stringData:
  REDIS_STORAGE_URL: "redis://<Amazon ElastiCache for Redisのプライマリエンドポイント>/0"
  REDIS_STORAGE_SENTINEL_HOSTS: ""
  REDIS_STORAGE_SENTINEL_ROLE: ""
  REDIS_QUEUES_URL: "redis://<Amazon ElastiCache for Redisのプライマリエンドポイント>/1"
  REDIS_QUEUES_SENTINEL_HOSTS: ""
  REDIS_QUEUES_SENTINEL_ROLE: ""
type: Opaque

(4) 用于文件存储连接的秘密凭证

apiVersion: v1
kind: Secret
metadata:
  name: aws-auth
stringData:
  AWS_ACCESS_KEY_ID: <Amazon S3にアクセスできるAWS IAMユーザのアクセスキーID>
  AWS_SECRET_ACCESS_KEY: <Amazon S3にアクセスできるAWS IAMユーザのシークレットアクセスキー>
  AWS_BUCKET: <Amazon S3バケット名>
  AWS_REGION: ap-northeast-1
type: Opaque
create_apimanager.png

在APIManager创建界面的YAML视图中,编写以下类似的YAML,并点击“创建”。

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
  namespace: 3scale
spec:
  wildcardDomain: apps.<OCPクラスタ名>.<OCPクラスタのベースドメイン名>
  system:
    fileStorage:
      simpleStorageService:
        configurationSecretRef:
          name: aws-auth
    appSpec:
      replicas: 2
    sidekiqSpec:
      replicas: 2
  backend:
    listenerSpec:
      replicas: 2
    workerSpec:
      replicas: 2
    cronSpec:
      replicas: 2
  apicast:
    productionSpec:
      replicas: 2
    stagingSpec:
      replicas: 2
  zync:
    appSpec:
      replicas: 2
    queSpec:
      replicas: 2
  highAvailability:
    enabled: true

以上是3scale安装完成。您可以按照以下方式确认已经创建了满足3scale高可用配置的Pod。

NAME                              READY   STATUS      RESTARTS   AGE
3scale-operator-f8f74c985-rtbjw   1/1     Running     0          10m
apicast-production-1-deploy       0/1     Completed   0          3m
apicast-production-1-ftghr        1/1     Running     0          2m55s
apicast-production-1-vn87t        1/1     Running     0          2m54s
apicast-staging-1-6wfsv           1/1     Running     0          2m57s
apicast-staging-1-9ng79           1/1     Running     0          2m57s
apicast-staging-1-deploy          0/1     Completed   0          3m
backend-cron-1-deploy             0/1     Completed   0          3m59s
backend-cron-1-m752m              1/1     Running     0          3m55s
backend-cron-1-ng7hl              1/1     Running     0          3m55s
backend-listener-1-deploy         0/1     Completed   0          3m59s
backend-listener-1-md5wt          1/1     Running     0          3m55s
backend-listener-1-z69w5          1/1     Running     0          3m55s
backend-worker-1-56dvv            1/1     Running     0          3m55s
backend-worker-1-deploy           0/1     Completed   0          3m59s
backend-worker-1-pp8bg            1/1     Running     0          3m55s
system-app-1-deploy               0/1     Completed   0          3m38s
system-app-1-hook-post            0/1     Completed   0          66s
system-app-1-hook-pre             0/1     Completed   0          3m35s
system-app-1-t6wch                3/3     Running     0          2m38s
system-app-1-x57dd                3/3     Running     0          2m38s
system-memcache-1-deploy          0/1     Completed   0          3m38s
system-memcache-1-rsmj2           1/1     Running     0          3m34s
system-sidekiq-1-deploy           0/1     Completed   0          3m38s
system-sidekiq-1-jknvg            1/1     Running     0          3m35s
system-sidekiq-1-tcclr            1/1     Running     0          3m35s
system-sphinx-1-2m22d             1/1     Running     0          3m34s
system-sphinx-1-deploy            0/1     Completed   0          3m37s
zync-1-4txrj                      1/1     Running     1          3m16s
zync-1-deploy                     0/1     Completed   0          3m23s
zync-1-kmng2                      1/1     Running     0          3m16s
zync-database-1-b7hl5             1/1     Running     0          3m16s
zync-database-1-deploy            0/1     Completed   0          3m23s
zync-que-1-2g8b5                  1/1     Running     2          3m15s
zync-que-1-deploy                 0/1     Completed   0          3m23s
zync-que-1-sfw6r                  1/1     Running     2          3m15s
routes.png
secrets.png
intro_wizard.png
admin_portal.png

最后、

在本文中,我们介绍了构建3scale高可用结构的方法。通过实现高可用结构,我们相信3scale的应用场景将更加广泛。现在就利用这个机会来试试如何呢?

需要更改DB参数组,并将log_bin_trust_function_creators设置为1。
广告
将在 10 秒后关闭
bannerAds