設定

設定

Galera クラスターを起動する前に、クラスターの一部として動作するよう、サーバーとデータベースを設定する必要があります。

サーバーの設定

OpenStack データベースのベースとなるオペレーティングシステムで動作している特定のサービスは、Galera Cluster が通常の動作をブロックしたり、mysqld がクラスターとのネットワーク接続を妨害したりする可能性があります。

ファイアウォール

Galera Cluster は、ネットワーク通信のために以下のポートを開く必要があります。

  • 3306 では、Galera Cluster がデータベースクライアント接続のために TCP を使用します。また、クライアント 、つまり mysqldump を必要とする State Snapshot Transfers メソッドを使用します。
  • 4567 では、Galera Cluster が複製通信のために TCP を使用します。マルチキャストレプリケーションは、このポートで TCP と UDP を使用します。
  • 4568 では、Galera Cluster が Incremental State Transfers のために TCP を使用します。
  • 4444 では、Galera Cluster が他のすべての State Snapshot Transfer メソッドのために TCP を使用します。

参考

ファイアウォールの詳細は、OpenStack Administrator Guide の Firewalls and default ports を参照してください。

これは iptables コマンドを使用して実現できます。

# iptables --append INPUT --in-interface eth0 \
  --protocol tcp --match tcp --dport ${PORT} \
  --source ${NODE-IP-ADDRESS} --jump ACCEPT

完了後、きちんと変更を保存してください。これは、お使いのディストリビューションにより異なります。

代わりに、多くの Linux ディストリビューションにおいて利用できる FirewallD 向けの firewall-cmd ユーティリティーを使用して変更することもできます。

# firewall-cmd --add-service=mysql --permanent
# firewall-cmd --add-port=3306/tcp --permanent

SELinux

Security-Enhanced Linux は、Linux オペレーティングシステムにおいてセキュリティーを向上させるためのカーネルモジュールです。Red Hat 系のディストリビューションでは、一般的にデフォルトで有効化され、設定されています。Galera Cluster の観点では、SELinux を有効化したシステムは、データベースサービスをブロックするかもしれません。また、クラスターを起動しても、ネットワーク接続を確立できないかもしれません。

SELinux を設定して Galera Cluster の動作を許可するために、semanage ユーティリティーを使用して、使用ポートを開く必要があるかもしれません。例:

# semanage port -a -t mysqld_port_t -p tcp 3306

いくつかのディストリビューションの古いバージョンは、Galera をセキュア化するための最新ポリシーを提供していません。データベースへのアクセスと操作のために SELinux をもう少しゆるく設定する必要があるかもしれません。

# semanage permissive -a mysqld_t

注釈

SELinux を permissive モードにすることは、良いセキュリティー慣行ではないことを覚えておいてください。長い間、Galera Cluster のセキュリティーポリシーを開発して、SELinux を enforcing モードに切り替える必要があります。

Galera Cluster と動作する SELinux を設定する方法の詳細は SELinux ドキュメント を参照してください。

AppArmor

Application Armor は、Linux オペレーティングシステムにおいてセキュリティーを向上するためのカーネルモジュールです。Canonical により開発され、一般的に Ubuntu 系のディストリビューションにおいて使用されています。Galera Cluster の観点では、AppArmor を有効化したシステムは、データベースサービスが正常に動作することを妨げる可能性があります。

各クラスターノードにおいて以下の手順を実行して、Galera Cluster を正常に動作させるために AppArmor を設定します。

  1. disable ディレクトリーにデータベースサーバーへのシンボリックリンクを作成します。

    # ln -s /etc/apparmor.d/usr /etc/apparmor.d/disable/.sbin.mysqld
    
  2. AppArmor を再起動します。init を使用するサーバーの場合、以下のコマンドを実行します。

    # service apparmor restart
    

    systemd を使用するサーバーの場合、以下のコマンドを実行します。

    # systemctl restart apparmor
    

AppArmor により Galera Cluster の動作を許可されます。

データベース設定

MariaDB や Percona XtraDB を含む、MySQL は my.cnf ファイルを使用して設定を管理します。一般的に /etc ディレクトリーにあります。これらのデータベースにおいて利用できる設定オプションは、Galera Cluster においても利用できます。いくつかの制約や追加があります。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
binlog_format=ROW
bind-address=10.0.0.12

# InnoDB Configuration
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=122M

# Galera Cluster Configuration
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"
wsrep_cluster_name="my_example_cluster"
wsrep_cluster_address="gcomm://GALERA1-IP,GALERA2-IP,GALERA3-IP"
wsrep_sst_method=rsync

mysqld の設定

標準的な MySQL、MariaDB、Percona XtraDB データベースに利用できる設定パラメーターは Galera Cluster で利用できますが、競合や予期しない動作を避けるために始めに定義する必要があるものがあります。

  • データベースサーバーが localhost: 127.0.0.1 のみにバインドされていないことを確認してください。また、0.0.0.0 にバインドしないでください。localhost や 0.0.0.0 にバインドすることにより、MySQL がマシンのすべての IP アドレスにバインドされます。これは仮想 IP アドレスを含み、HAProxy が起動しなくなります。代わりに、コントローラーノードの管理 IP アドレスにバインドして、管理ネットワーク経由で他のノードによりアクセスできるようにします。

    bind-address=10.0.0.12
    
  • バイナリーログ形式が、ステートメントレベルのレプリケーションではなく、行レベルのレプリケーションに設定されていることを確認してください。

    binlog_format=ROW
    

InnoDB の設定

Galera Cluster は、トランザクション未対応ストレージエンジンをサポートしません。デフォルトでは InnoDB を使用する必要があります。競合を避けるために定義する必要のある追加パラメーターがいくつかあります。

  • デフォルトのストレージエンジンをきちんと InnoDB に設定してください。

    default_storage_engine=InnoDB
    
  • 自動インクリメント値を生成するための InnoDB ロックモードがをきちんと``2`` に設定してください。これは、インターリーブ・ロックモードです。

    innodb_autoinc_lock_mode=2
    

    この値を変更してはいけません。他のモジュールが、自動インクリメントの列を用いてテーブルに INSERT ステートメントを発行するかもしれません。これは、システムが応答不可になる解決不能なデッドロックに陥ります。

  • パフォーマンスを改善するために、InnoDB ログバッファーが、コミットごとではなく、1 秒ごとにファイルに書き込むことを確認します。

    innodb_flush_log_at_trx_commit=0
    

    Setting this parameter to 0 or 2 can improve performance, but it introduces certain dangers. Operating system failures can erase the last second of transactions. While you can recover this data from another node, if the cluster goes down at the same time (in the event of a data center power outage), you lose this data permanently.

  • InnoDB メモリーバッファープールサイズを定義します。デフォルト値は 128 MB ですが、Galera Cluster の追加メモリー使用状況に対して補うために、通常の値を 5% までスケールさせてください。

    innodb_buffer_pool_size=122M
    

wsrep レプリケーションの設定

Galera Cluster の設定パラメーターは、すべて wsrep_ プレフィックスを持ちます。OpenStack データベースにおいて、各クラスターノード向けに以下のパラメーターを定義する必要があります。

  • wsrep Provider: Galera Replication Plugin は、Galera Cluster の wsrep プロバイダーとして動作します。お使いのシステムに libgalera_smm.so ファイルとしてインストールされます。このファイルへのパスを my.cnf に定義します。

    wsrep_provider="/usr/lib/libgalera_smm.so"
    
  • クラスター名: 任意のクラスターの名前を定義します。

    wsrep_cluster_name="my_example_cluster"
    

    すべてのクラスターノードにおいて同じ名前を使用する必要があります。この値が一致しない場合、接続が失敗します。

  • クラスターアドレス: 各クラスターノードの IP アドレスを表示します。

    wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
    

    ここで指定された IP アドレスを、お使いのクラスターにある OpenStack の各データベースのコンマ区切りリストに置き換えます。

  • ノード名: クラスターノードの論理名を定義します。

    wsrep_node_name="Galera1"
    
  • ノードアドレス: クラスターノードの IP アドレスを定義します。

    wsrep_node_address="192.168.1.1"
    

追加パラメーター

利用できるパラメーターの一覧は、データベースクライアントから SHOW VARIABLES コマンドを実行してください。

SHOW VARIABLES LIKE 'wsrep_%';

+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| wsrep_auto_increment_control | ON    |
+------------------------------+-------+
| wsrep_causal_reads           | OFF   |
+------------------------------+-------+
| wsrep_certify_nonPK          | ON    |
+------------------------------+-------+
| ...                          | ...   |
+------------------------------+-------+
| wsrep_sync_wait              | 0     |
+------------------------------+-------+

Galera Cluster において利用できる、これらのパラメーター、wsrep プロバイダーオプション、状態変数のドキュメントは、Galera クラスターの`リファレンス <http://galeracluster.com/documentation-webpages/reference.html>`_ を参照してください。

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.