csmart.swift
エクスプレス
これは、OpenStack Swift クラスターを設定および管理する役割です。 現在、Proxy、Account、Container、Object のすべての Swift サービスを実行している PACO ノードをサポートしています。
主な作業内容:
- Swift ノードの準備(SELinux の設定と SSH アクセスの確認を含む)
- リポジトリの追加とパッケージのインストール
- ロギング、rsyncd、および memcached などの依存サービスの設定
- プロキシ VIPs のフェイルオーバー用の keepalived の設定
- Swift PACO サービスの設定
- 初期アカウント、コンテナ、オブジェクトリングの作成
- 各ノードのディスクを準備し、リングに従ってフォーマットとマウント
- リングのビルドと配布
- 分散の設定
- 以下のような簡単な運用タスク:
- リングの更新と配布
- PACO サービスの再設定
- 分散およびレプリケーションレポートの生成
要件
事前に存在する CentOS 8 Stream ノードのインベントリ(ネットワークが設定されているもの)。
クラスターにはすべての Swift ノードを管理するための管理用ボックスが必要です(swift_admin
グループに含まれる)。
もし別の管理ホストがない場合は、Swift ノードの1つを管理ボックスとして使用できます。
仮想 Swift クラスターを構築する場合は、https://github.com/csmart/ansible-role-virt-infra にある csmart.virt_infra
Ansible ロールの使用を検討してください。
サンプルインベントリとプレイブックは、csmart.virt_infra
と csmart.swift
の両方に対して、https://github.com/csmart/virt-infra-swift で見つけることができます。
ロール変数
このロールには、defaults/main/
の下に分割された多くのデフォルト変数があります。
これらは、Swift クラスターの共通設定や特定の Swift サービスのデフォルトを含みます。
- account-rings.yml
- account.yml
- container-rings.yml
- container.yml
- dispersion.yml
- hash.yml
- networks.yml
- object-rings.yml
- object.yml
- packages.yml
- proxy.yml
- swift.yml
- tempauth.yml
ユーザーが定義する必要がある必須グローバル変数には、次のものがあります:
swift_hash_suffix
- クラスターのハッシュサフィックス。設定した後は変更してはいけません。- デフォルト値は
07b4ef9c-2e01-4ea2-a109-5ffc5273225f
- デフォルト値は
swift_hash_prefix
- クラスターのハッシュプレフィックス。設定した後は変更してはいけません。- デフォルト値は
f9175259-ace0-48bb-af9d-e7ac505b89d2
- デフォルト値は
swift_outward_subnet
- 外部接続用のルーティング可能な CIDR サブネット(プロキシノード用)- デフォルト値は
203.0.113.0/24
- デフォルト値は
swift_cluster_subnet
- クラスター間通信の CIDR サブネット- デフォルト値は
192.0.2.0/24
- デフォルト値は
swift_replication_subnet
- レプリケーション用 CIDR サブネット(クラスターと同じでも可)- デフォルト値は
198.51.100.0/24
- デフォルト値は
ユーザーが定義する必要がある必須ノード固有の変数には、次のものがあります:
swift_outward_ip
- 外向きネットワークの IP アドレス- 例:
203.0.113.11
- 例:
swift_cluster_ip
- クラスター ネットワークの IP アドレス- 例:
192.0.2.11
- 例:
swift_replication_ip
- レプリケーション ネットワークの IP アドレス- 例:
198.51.100.11
- 例:
swift_vips
- プロキシ VIP のリスト(IP の 4 番目のオクテット)各プロキシノードは、VIP IP の 4 番目のオクテットを優先順位に従って列挙する必要があります。例えば、デフォルトの外向きサブネット
203.0.113.0/24
に基づいて、VIP203.0.113.111
、203.0.113.112
、203.0.113.113
を希望するノードは次のように記述できます。swift_vips: - 111 - 112 - 113
swift_rings_disks
- どのリングに使用するディスクを定義する辞書のリスト各ノードのディスクには、そのパスとリングに対する重みを含める必要があります。例えば、次のようにオブジェクト用の SCSI ディスクとアカウントおよびコンテナ両用の NVMe を示すことができます。
swift_rings_disks: - disk: device: sdb rings: - name: account weight: 0 - name: container weight: 0 - name: object weight: 100 - disk: device: nvme0n1 rings: - name: account weight: 100 - name: container weight: 100 - name: object weight: 0
依存関係
なし。
例のプレイブック
virt-infra-swift
リポジトリは、https://github.com/csmart/virt-infra-swift で、一連のサンプルプレイブックおよびインベントリを提供します。
インベントリには、次のグループが含まれている必要があります:
swift
(またはall
)swift_admin
swift_proxy
swift_account
swift_container
swift_object
以下は、必要なグループを持つ3ノードのPACO Swiftクラスターのインベントリの例です。
swift:
hosts:
swift-admin:
swift-[01:03]:
children:
swift_admin:
hosts:
swift-admin:
swift_proxy:
hosts:
swift-[01:03]:
swift_account:
hosts:
swift-[01:03]:
swift_container:
hosts:
swift-[01:03]:
swift_object:
hosts:
swift-[01:03]:
基本的なインベントリができたら、基本的なプレイブックの作成は簡単です。
---
- hosts: swift
tasks:
- include_role:
name: csmart.swift
プレイブックを実行すると、全ロールとデフォルトのタスクが順番に実行されます。
ansible-playbook -i inventory/ site.yml
このロールには、各タイプのタスク用のタグも含まれているので、すべてまたは特定のタグに対して1つ以上のプレイブックを作成することができます。
---
- hosts: swift
tasks:
- include_role:
name: csmart.swift
tags:
- account
- common
- config
- container
- disks
- dispersion
- hosts
- keepalived
- logging
- memcached
- object
- packages
- prep
- proxy
- rings
- rsyncd
- selinux
- services
- system
- update
次に、特定のタグに対してプレイブックを実行します。たとえば、アカウントサービスを再設定する場合です。
ansible-playbook -i inventory/ site.yml --tags account
ライセンス
GPLv3+
著者情報
クリス・スマート https://blog.christophersmart.com