ロードバランシングガイド
負荷を分散した Capsule プールの設定
概要
1. 負荷分散ソリューションの概要
Satellite Server 環境は、クラスター全体の複数の Capsule Server インスタンスの負荷を分散させる形で設定することが可能です。これを実現するには、ロードバランサーを設定する必要があります。クライアントのリクエストとネットワーク負荷が効率的に分散することでパフォーマンスが向上するため、Capsule Server インスタンスの負担が軽減されます。
負荷分散型の Capsule プール構成は通常、以下のコンポーネントで構成されます。
- 既存の Satellite 6.4 環境
- 負荷分散クラスター用の複数の Capsule Server インスタンス
- ロードバランサー
- 複数のクライアント
図1 Satellite 負荷分散ソリューションのアーキテクチャー
負荷分散型の設定では、ある Capsule Server インスタンスが定期または予定外のメンテナンスで停止されても、ほとんどすべての Capsule 機能は想定通りに動作し続けます。このソリューションでは、以下のサービスと機能の負荷が分散されます。
-
subscription-manager
を使用した登録 -
コンテンツ管理 (
yum
リポジトリー) - Puppet (オプション)
Puppet モジュールを使用している場合は、Puppet 認証機関 (CA) 管理が負荷分散型の証明書署名に対応していないという既知の制限があります。Puppet CA はシリアル番号カウンターや証明書失効リストといった証明書情報をファイルシステムに保存するため、複数の書き込みプロセスが同一データを使おうとすると、データが簡単に破損するおそれがあります。
この Puppet の制限に対する回避策として、このソリューションでは以下のステップを実行してください。
- ある Capsule Server インスタンス (通常はクラスター内の最初のインスタンス) で Puppet 証明書署名を設定する。
- クライアントマシン上で、CA リクエスト送信をロードバランサーのポート 8141 に設定する。
- ロードバランサーで、このポートを Puppet 証明書署名機能のある Capsule Server インスタンス (通常はクラスター内の最初のインスタンス) 上の 8140 にリダイレクトする。
Satellite Server および Capsule Server 環境の準備方法、ロードバランサーの設定方法、クライアントの登録方法についての詳細情報は、本ガイドの以下の章を参照してください。
2. 作業開始前の準備
アプリケーションリクエストを分散すると可用性と応答性が高まることと、サーバーの負荷を減らすことができるほか、特定の Capsule が単一障害点になることを防ぐこともできます。負荷分散の Capsule プールを設定すると、定期および予定外の停止に対する復元力が備えられます。
本ガイドのソリューションを実装する前に、以下の点を確認してください。
- Puppet を使用している場合は、Puppet 証明書署名がプール内の最初の Capsule に割り当てられることに注意してください。このプール内の最初の Capsule がダウンすると、クライアントは Capsule から Puppet コンテンツを取得できなくなります。この場合 Puppet 証明書署名は、最初の Capsule がサービス提供可能な状態に戻ると利用できるようになります。
- 本ガイドのソリューションでは、全 Capsule をある状態に維持するために pacemaker や他の同様の HA ツールは使用しません。問題のトラブルシュートに際しては、ロードバランサーを迂回して、各 Capsule 上で問題を再生成する必要があります。
負荷を分散した Capsule プールを設定すると、より複雑な環境となり、新たなメンテナンスが必要になります。
- すべての Capsule で同じコンテンツビューがあり、同一のコンテンツビューバージョンに同期されている必要があります。
- 各 Capsule を順にアップグレードする必要があります。
- プール内の各 Capsule で定期的なバックアップを行う必要があります。
3. Satellite Server および Capsule Server での負荷分散への準備
本章では、負荷を分散した Capsule Server プールを構成する Satellite Server と Capsule Server マシンの準備方法について説明します。
Satellite Server の準備
このソリューションでは、必要最小限の Satellite Server のバージョンをインストールする必要があります。Satellite Server 6.4 以上のバージョンが必要になります。Satellite Server のインストールに関する詳細情報は、オンラインネットワークからの SATELLITE SERVER のインストール を参照してください。
Capsule Server の準備
負荷を分散したプールでの Capsule Server マシンを準備するには、Red Hat Satellite Capsule Server のインストール にある以下の手順を完了する必要があります。
3.1. 負荷分散型 Capsule Server インストール
本章では、負荷を分散した Capsule Server プールを構成するマシンでの Capsule Server のインストール方法について説明します。
Puppet を使用している場合は、Puppet の既知の制限のため、ある Capsule Server インスタンス (通常はクラスター内の最初のインスタンス) で証明書署名を設定する必要があります。このため、以下の 2 つのタスクを実行してください。
- 証明書署名の Capsule Server インスタンス (通常はクラスター内の最初のインスタンス) をインストールする。
- クラスター内の残りの Capsule Server インスタンスをインストールする。
Puppet を使用していない場合は、残りの Capsule Server のインストールを完了する にある説明に従って Capsule Server をインストールし、Puppet 署名生成のステップは省略します。
前提条件
「Satellite Server および Capsule Server での負荷分散への準備」 の章にある Capsule Server 準備のステップを終えていること。
証明書署名の Capsule Server のインストールを完了するには、以下の手順に従います。
Satellite Server で Katello 証明書を生成します。
--foreman-proxy-cname
オプションにロードバランサーのホスト名を含めて証明書アーカイブを作成します。# capsule-certs-generate \ --foreman-proxy-fqdn capsule01.example.com \ --certs-tar "/root/capsule01.example.com-certs.tar" \ --foreman-proxy-cname loadbalancer.example.com
このコマンドを実行すると、毎回一意の
satellite-installer
コマンドが生成されます。後で使用するので、これを書き留めます。Capsule Server 上で、
custom-hiera.yaml
ファイルに以下の行を追加します。pulp::lazy_redirect_host: loadbalancer.example.com
ステップ 1 で生成された
satellite-installer
コマンドに、以下の行を追加します。--puppet-dns-alt-names loadbalancer.example.com \ --puppet-ca-server capsule01.example.com \ --foreman-proxy-puppetca true \ --puppet-server-ca true \ --enable-foreman-proxy-plugin-remote-execution-ssh
Capsule Server で、編集した
satellite-installer
コマンドを実行します。例を示します。# satellite-installer --scenario capsule \ --foreman-proxy-content-parent-fqdn "satellite.example.com" \ --foreman-proxy-register-in-foreman "true" \ --foreman-proxy-foreman-base-url "https://satellite.example.com" \ --foreman-proxy-trusted-hosts "satellite.example.com" \ --foreman-proxy-trusted-hosts "capsule01.example.com" \ --foreman-proxy-oauth-consumer-key "oauth key" \ --foreman-proxy-oauth-consumer-secret "oauth secret" \ --foreman-proxy-content-pulp-oauth-secret "katello oauth secret" \ --foreman-proxy-content-certs-tar "certs tgz" \ --puppet-server-foreman-url "https://satellite.example.com" \ --certs-cname loadbalancer.example.com \ --puppet-dns-alt-names loadbalancer.example.com \ --puppet-ca-server capsule01.example.com \ --foreman-proxy-puppetca true \ --puppet-server-ca true \ --enable-foreman-proxy-plugin-remote-execution-ssh
残りの Capsule で Puppet 証明書を生成します。プール内の最初の Capsule に Puppet 証明書署名が割り当てられているので、プール内のそれ以外の Capsule 用に Puppet 証明書を生成する必要があります。Capsule Server で以下のコマンドを実行します。
# puppet cert generate capsule02.example.com \ --dns_alt_names=loadbalancer.example.com
完全修飾ドメイン名 (FQDN) を編集して、ロードバランスプール内の残りの各 Capsule でこのコマンドを実行します。
残りの Capsule Server のインストールを完了する
Satellite Server で Katello 証明書を生成します。
--foreman-proxy-cname
オプションにロードバランサー名を含めて証明書アーカイブを作成します。# capsule-certs-generate \ --foreman-proxy-fqdn capsule02.example.com \ --certs-tar "/root/capsule02.example.com-certs.tar" \ --foreman-proxy-cname loadbalancer.example.com
このコマンドを実行すると、毎回一意の
satellite-installer
コマンドが生成されます。後で使用するので、これを書き留めます。Puppet 証明書を生成します。Capsule Server で以下のステップを実行します。
-
puppetserver
RPM をインストールします。 最初の Capsule Server インスタンスから残りの各インスタンス (つまり、2 つ目、3 つ目など) に以下のファイルをコピーします。各 Capsule に合わせて FQDN を編集します。
-
/etc/puppetlabs/puppet/ssl/certs/ca.pem
-
/etc/puppetlabs/puppet/ssl/certs/capsule02.example.com.pem
-
/etc/puppetlabs/puppet/ssl/private_keys/capsule02.example.com.pem
-
/etc/puppetlabs/puppet/ssl/public_keys/capsule02.example.com.pem
-
以下のコマンドを実行して、ファイルの所有者がユーザー
puppet
、グループpuppet
になるようにします。# chown -R puppet.puppet /etc/puppetlabs/puppet/ssl/
以下のコマンドを実行して、SELinux コンテキストを適切に設定します。
# restorecon -Rv /etc/puppetlabs/puppet/ssl/
-
Capsule Server 上で、
custom-hiera.yaml
ファイルに以下の行を追加します。pulp::lazy_redirect_host: loadbalancer.example.com
ステップ 1 で生成された
satellite-installer
コマンドに、以下の行を追加します。--puppet-dns-alt-names loadbalancer.example.com \ --puppet-ca-server capsule01.example.com \ --foreman-proxy-puppetca false \ --puppet-server-ca false \ --enable-foreman-proxy-plugin-remote-execution-ssh
Capsule Server で、編集した
satellite-installer
コマンドを実行します。例を示します。# satellite-installer --scenario capsule \ --foreman-proxy-content-parent-fqdn "satellite.example.com" \ --foreman-proxy-register-in-foreman "true" \ --foreman-proxy-foreman-base-url "https://satellite.example.com" \ --foreman-proxy-trusted-hosts "satellite.example.com" \ --foreman-proxy-trusted-hosts "capsule02.example.com" \ --foreman-proxy-oauth-consumer-key "oauth key" \ --foreman-proxy-oauth-consumer-secret "oauth secret" \ --foreman-proxy-content-pulp-oauth-secret "katello oauth secret" \ --foreman-proxy-content-certs-tar "certs tgz" \ --puppet-server-foreman-url "https://satellite.example.com" \ --certs-cname loadbalancer.example.com \ --puppet-dns-alt-names loadbalancer.example.com \ --puppet-ca-server capsule01.example.com \ --foreman-proxy-puppetca false \ --puppet-server-ca false \ --enable-foreman-proxy-plugin-remote-execution-ssh
4. ロードバランサーのインストール
以下のセクションでは、HAProxy ロードバランサーの設定方法に関する一般的な例を示します。TCP 転送およびスティッキーセッションをサポートしているロードバランサーソフトウェアソリューションであれば、どのロードバランサーをインストールしても構いません。
- Red Hat Enterprise Linux 7 ホストで、HAProxy RPM をインストールします。
SELinux で HAProxy がどのポートでもバインドできるように設定します。
semanage boolean --modify --on haproxy_connect_any
/etc/haproxy/haproxy.cfg
ファイルを以下のように設定して、すべてのポートのバランスをとります。表1 HAProxy のポート設定 サービス ポート モード バランスモード 宛先 HTTP
80
TCP
roundrobin
全 Capsule のポート 80
HTTPS
443
TCP
source
全 Capsule のポート 443
RHSM
8443
TCP
roundrobin
全 Capsule のポート 8443
AMQP
5647
TCP
roundrobin
全 Capsule のポート 5647
Puppet (オプション)
8140
TCP
roundrobin
全 Capsule のポート 8140
PuppetCA (オプション)
8141
TCP
roundrobin
最初の Capsule のポート 8140
SmartProxy (OpenScap のオプション)
9090
TCP
roundrobin
全 Capsule のポート 9090
Docker (オプション)
5000
TCP
roundrobin
全 Capsule のポート 5000
PuppetCA 用の追加ポート (ポート 8141) は最初の Capsule にのみ転送されることに注意してください。
5. クライアントの登録
Red Hat Enterprise Linux バージョン 6 または 7 のベースシステムで稼働しているクライアントはどれも、負荷分散型 Capsule プールに登録することができます。クライアントが以前にスタンドアロンの Capsule に登録していた場合は、そのクライアントを負荷分散型 Capsule プールに登録する必要があります。
クライアントを負荷分散型 Capsule プールに登録するには、以下の 2 つの方法があります。
- ブートストラップスクリプトを使った登録
- 手動でのクライアントの登録
ブートストラップスクリプトを使った登録方法が推奨されます。
5.1. ブートストラップスクリプトを使ったクライアントの登録
前提条件
クライアントマシンにブートストラップスクリプトをインストールして、実行可能としていること。詳細については、ホストの管理 の ブートストラップスクリプトを使用したホストの Satellite 6 への登録 セクションを参照してください。
ブートストラップスクリプトを使ったクライアント登録
クライアントを負荷分散型 Capsule に登録するには、以下のコマンドをクライアントマシンで実行します。
# python bootstrap.py --login=admin \ --server loadbalancer.example.com \ --organization="Your_Organization" \ --location="Your_Location" \ --hostgroup="Your_Hostgroup" \ --activationkey=your_activation_key \ --enablerepos=rhel-7-server-satellite-tools-6.4-rpms \ --unmanaged \ 1 --puppet-ca-port 8141 \ 2 --force 3
このスクリプトでは、--login
オプションを使用して入力した Satellite ユーザー名のパスワード入力が求められます。
登録手続きはすべてのクライアントマシンで完了する必要があります。
5.2. 手動でのクライアントの登録
ホストに katello-ca-consumer パッケージがインストールされている場合は、これを削除する必要があります。クライアントマシンで以下のコマンドを実行してください。
# yum remove 'katello-ca-consumer*'
以下のコマンドを実行して katello-ca-consumer パッケージをインストールします。
# rpm -Uvh http://loadbalancer.example.com/pub/katello-ca-consumer-latest.noarch.rpm
--serverurl
と--baseurl
オプションを含めて以下のコマンドを実行し、システムを登録します。# subscription-manager register --org=Your_Organization \ --activationkey=Your_Activation_Key \ --serverurl=https://loadbalancer.example.com:8443/rhsm \ --baseurl=https://loadbalancer.example.com/pulp/repos
以下のコマンドを実行して `puppet-agent` をインストールします。
# yum install puppet-agent
/etc/puppetlabs/puppet/puppet.conf
ファイルの agent セクションに以下の行を追加します。server = loadbalancer.example.com ca_server = loadbalancer.example.com ca_port = 8141
--noop
オプションをpuppet agent
コマンドに含めて、実行します。# puppet agent -t --noop
Satellite Server web UI で以下のステップを実行して、Puppet 用の SSL 証明書に署名します。
- Satellite Server Web UI にログインします。
- インフラストラクチャー > Capsule に移動します。
-
capsule01
の アクション コラムで 編集 リストをクリックして 証明書 を選択します。 - 署名 をクリックします。
再度
puppet agent
コマンドを実行して、証明書の署名後に機能することを確かめます。# puppet agent -t --noop
6. ロードバランサー設定の確認
設定が完了したら、以下のアクションを実行して確認します。
- 負荷分散型 Capsule プールにクライアントマシンを登録します。
- いずれかの Capsule Server インスタンスをシャットダウンします。
-
クライアントでコンテンツまたはサブスクリプション管理機能が利用可能であることを確かめます。たとえば、
subscription-manager refresh
コマンドやyum
コマンドを実行します。 - シャットダウンした Capsule Server インスタンスを再起動します。
- 負荷分散型プール内のすべての Capsule Server でステップ 2 - 4 を繰り返します。