個人用ツール

Pandora:Documentation ja:Percona Cluster

提供: Pandora FMS Wiki JP

移動先: 案内, 検索

Pandora FMS ドキュメント一覧に戻る

Percona XtraDB クラスタ

概要

This guide’s purpose is to have a working system with an architecture similar to the picture below:

このガイドの目的は、以下の図に示すようなアーキテクチャのシステムを作ることです。

ファイル:Architecture.jpg

We will have 3 nodes, which all have Percona Cluster installed, and they are all connected. Two of the nodes will have HAProxy and Keepalived installed, otherwise when node 1 fails, the whole cluster will fail. The first node has to be started with bootstrap.

Percona クラスタがインストールされた 3つのノードがあり、それぞれ接続されています。2つのノードで、HAProxy および Keepalived がインストールされています。これが無いと node 1 で障害が発生した場合にクラスタ全体が障害となってしまいます。最初のノードは起動時にプロセス起動する必要があります。

ファイル:Node123.jpg

node #1
hostname: percona1
IP: 192.168.70.71
node #2
hostname: percona2
IP: 192.168.70.72
node #3
hostname: percona3
IP: 192.168.70.73


The picture below shows that the system uses two HAProxy servers and keepalived with Virtual IP-addresses. Keepalived is needed for load balancing and high availability. This system ensures that when the first node fails, the others still keep working.

以下の図では、2つの HAProxy サーバおよび keepalived で仮想 IP アドレスを持っています。keepalived は、ロードバランシングと可用性確保のために必要です。このシステムにより、最初のノードで障害が発生した場合にもう一方を利用できるようにします。

ファイル:Proxyvip.jpg

The top part of the architecture is meant for applications, in this case Pandora FMS. We will have a Pandora FMS server, console and agents set up to work with the Percona Cluster.

アーキテクチャの図の一番上はアプリケーションを表しており、ここでは Pandora FMS です。Pandora FMS サーバ、コンソールおよび、エージェントを、Percona クラスタと共に利用します。

ファイル:Pandoralogo.png


Percona の概要

Percona XtraDB Cluster is open-source, free MySQL High Availability software. It integrates Percona Server and Percona XtraBackup with the Galera library of MySQL high availability solutions in a single package which enables you to create a cost-effective MySQL high availability cluster.

Percona XtraDB は、オープンソースの MySQL HA ソフトウエアです。MySQL HA ソリューションを一つのパッケージにまとめた Galera ライブラリと共に、Percona サーバと Percona XtraBackup が統合されています。

The main benefit of using Percona cluster would be the performance gains. Although these gains are not linear, for example 3-node cluster would not result in 3 times higher performance. One reason being that in a cluster one node must also distribute tasks.

Percona クラスタを使う主な利点はパフォーマンスの向上です。しかし、この利点はリニアに得られるものではありません。たとえば 3ノードのクラスタでは 3倍のパフォーマンスを得られるわけではありません。その理由の一つとしては、クラスタノード間の同期処理が必要だからです。

The Cluster consists of Nodes. Recommended configuration is to have at least 3 nodes, but you can make it running with 2 nodes as well.

クラスタはノードで構成されます。最低 3つのノードでの構成が推奨されますが、2ノードでも動かすことができます。

ファイル:Node123.jpg

Each Node is regular MySQL / Percona Server setup. The point is that you can convert your existing MySQL / Percona Server into Node and roll Cluster using it as a base. Or otherwise – you can detach Node from Cluster and use it as just a regular server.

それぞれのノードは通常の MySQL / Percona サーバ設定です。ポイントとしては、MySQL / Percona サーバをベースとして、ノードとクラスタロールに変換することです。逆に、クラスタからノードを外せば、通常のサーバとして使えます。

Each Node contains the full copy of data. That defines XtraDB Cluster behavior in many ways. And obviously there are benefits and drawbacks.

それぞれのノードは全データのコピーを持ちます。多くの方法で XtraDB クラスタの動作を定義しますが、それぞれあきらかに利点と欠点があります。

ファイル:Cluster.png

Percona XtraDB Cluster provides:

Percona XtraDB クラスタが提供するもの:

  • We have successfully performed rolling restarts and upgrades of our production cluster without stopping production traffic.
  • Synchronous replication. Transaction either committed on all nodes or none.
  • Multi-master replication. You can write to any node.
  • Parallel applying events on slave. Real “parallel replication”.
  • Automatic node provisioning.
  • Data consistency. No more unsynchronized slaves.
  • 本番環境を停止することなくクラスタの再起動とアップグレードを実現。
  • 同期レプリケーション。全てのノードに適用されるかまたは適用されないトランザクション。
  • マルチマスタレプリケーション。任意のノードに書き込めます。
  • スレーブへの並列イベント適用。実際の "並列レプリケーション"。
  • 自動ノードプロビジョニング。
  • データの一貫性。非同期スレーブなし。

Percona XtraDB Cluster drawbacks:

Percona XtraDB クラスタの欠点:

  • Overhead of joining new node. The new node has to copy full dataset from one of existing nodes. If it is 100GB, it copies 100GB.
  • This can’t be used as an effective write scaling solution. There might be some improvements in write throughput when you run write traffic to 2 nodes vs all traffic to 1 node, but you can’t expect a lot. All writes still have to go on all nodes.
  • You have several duplicates of data, for 3 nodes – 3 duplicates.
  • 新規ノードの追加にオーバーヘッドがあります。新規ノードは、既存ノードから全データのコピーを行います。100GB のデータがあるとすると、100GB をコピーします。
  • 書き込みをスケールする手段としては利用できません。書き込みを 2ノードに対して行うのと 1ノードに対して行うのとでスループットを改善できるかもしれませんが、多くは期待できません。全ての書き込みは最終的には全てのノードに対して行われます。
  • 3ノードであれば、3つといった、複数の複製データを持つことになります。

Percona のインストール

Prerequisites:

  • CentOS installation
  • Firewall has been set up to allow connecting to ports 3306, 4444, 4567 and 4568 (or disabled)
  • Delete any existing mysql installations
  • SELinux is disabled - you can use command
echo 0 >/selinux/enforce 

or check status with command

sestatus

要件:

  • CentOS をインストール
  • ファイアウォールにて、3306, 4444, 4567, 4568 ポートの接続を許可(もしくはファイアウォール無効化)
  • mysql がインストールされていたら削除
  • SELinux の無効化 - 次のコマンドを実行します。
echo 0 >/selinux/enforce 

以下のコマンドで確認します。

sestatus



Check the IP of your nodes with:

次のコマンドでノードの IP を確認します:

ifconfig

Here are the examples:

以下に例を示します:

node #1
hostname: percona1
IP: 192.168.70.71
node #2
hostname: percona2
IP: 192.168.70.72
node #3
hostname: percona3
IP: 192.168.70.73


必要パッケージのインストール

Firstly we need to install the required packages (Yum, Percona RPM and Percona XtraDB Cluster).

最初に必要なパッケージ(Percona および Percona XtraDB クラスタ)をインストールする必要があります。

Insert command for installing repository with yum package:

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

Enter Yes whenever asked. Install XtraDB Cluster package:

yum install Percona-XtraDB-Cluster-56 

Insert command to enable the repository:

rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

以下のように yum でリポジトリからパッケージをインストール。:

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

聞かれることに対しては Yes と入力します。 XtraDB クラスタパッケージをインストールします。:

yum install Percona-XtraDB-Cluster-56 

以下のコマンドでリポジトリを有効化します。:

rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

ノードの設定

Now we are going to set up the configuration file. Individual nodes should be configured to be able to bootstrap the cluster.

設定ファイルを設定します。個々のノードをクラスタが起動できるように設定する必要があります。

ノード #1

Open up terminal and open my.cnf file:

nano /etc/my.cnf

Set up my.cnf with this configuration (with your own IP’s) in node1 then save and exit.

ターミナルを開き、my.cnf ファイルを開きます。

nano /etc/my.cnf

node1 の my.cnf の内容は以下の設定(IPアドレスは環境に合わせてください)で保存し、終了します。


Configuration should look like this:

設定は次のようにします。

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #1 address
wsrep_node_address=192.168.70.71

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=my_centos_cluster

# Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"

After setting up my.cnf, enter this command:

mysql_install_db --datadir=/var/lib/mysql --user=mysql

my.cnf を設定したあとは、以下のコマンドを実行します。

mysql_install_db --datadir=/var/lib/mysql --user=mysql

Now start node1 with this command:

/etc/init.d/mysql bootstrap-pxc 

or

service mysql bootstrap-pxc

node1 を以下のコマンドで起動します。

/etc/init.d/mysql bootstrap-pxc 

または

service mysql bootstrap-pxc

This command will start the cluster with initial wsrep_cluster_address set to gcomm://. This way the cluster will be bootstrapped and in case the node or MySQL have to be restarted later, there would be no need to change the configuration file.

このコマンドは、初期の wsrep_cluster_address を gcomm:// に設定してクラスタを起動します。 これによりクラスタが起動され、ノードでは MySQL が後から起動されます。以降は設定ファイルを変更する必要はありません。

The output should look like this:

Bootstrapping PXC (Percona XtraDB Cluster)Starting MySQL (Percona XtraDB Cluster). SUCCESS!

次のような出力がされます。

Bootstrapping PXC (Percona XtraDB Cluster)Starting MySQL (Percona XtraDB Cluster). SUCCESS!

To check mysql status, first enter:

mysql -u root

then enter this command:

show status like 'wsrep%';

mysql の状態を確認するには次のコマンドを実行します。

mysql -u root

そして、次のコマンドを実行します。

show status like 'wsrep%';

The output should look something like this:

次のような出力が表示されます。

+----------------------------+--------------------------------------+
| Variable_name           | Value                                
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid    | c2883338-834d-11e2-0800-03c9c68e41ec 
...
| wsrep_local_state        | 4                                    
| wsrep_local_state_comment| Synced                               
...
| wsrep_cluster_size       | 1                                    
| wsrep_cluster_status     | Primary                              
| wsrep_connected          | ON                                   
...
| wsrep_ready             | ON                                   
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)

(Optional) To add password for root, use this command:

(オプション) root にパスワードを付けるには次のコマンドを実行します。

UPDATE mysql.user SET password=PASSWORD("yourpassword") where user='root';

then:

FLUSH PRIVILEGES;

In order to perform successful State Snapshot Transfer using XtraBackup new user needs to be set up with proper privileges with these commands:

CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';

then:

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';

and also:

FLUSH PRIVILEGES;

XtraBackup を使って状態スナップショット転送を出来るようにするには、次のコマンドで適切な権限を持ったユーザを設定する必要があります。

CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';

次に、以下を実行します。

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';

また、以下を実行します。

FLUSH PRIVILEGES;

Exit mysql with:

exit

以下のコマンドで mysql を抜けます。

exit

When the first node is finished, you will need to configure the other nodes.

最初のノードの準備が終わったら、他のノードを設定します。

ノード #2

Now we need to stop node1 with:

service mysql stop

Next step is to open node2 terminal and modify my.cnf with this command:

nano /etc/my.cnf

Paste this configuration to node2 my.cnf (with your own IP’s) then save and exit.

以下のコマンドで node1 を停止する必要があります。

service mysql stop

次に、node2 のターミナルを開き、my.cnf を編集します。

nano /etc/my.cnf

以下の設定を node2 の my.cnf にペーストし(IPアドレスは環境に合わせて調整します)、保存します。

Configuration should look like this:

設定は次の通りです。

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #2 address
wsrep_node_address=192.168.70.72

# Cluster name
wsrep_cluster_name=my_centos_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

#Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"

After setting up node2 my.cnf, enter this command:

mysql_install_db --datadir=/var/lib/mysql --user=mysql

node2 の my.cnf を設定したら、以下のコマンドを実行します。

mysql_install_db --datadir=/var/lib/mysql --user=mysql

If node2 is configured correctly, then we need to start Mysql.

node2 が正しく設定できたら、Mysql を起動します。

Start mysql with this command:

service mysql start

The output should be like this:

Starting MySQL (Percona XtraDB Cluster)...                 [  OK  ]

以下のコマンドで mysql を起動します。

service mysql start

次のような出力が表示されます。

Starting MySQL (Percona XtraDB Cluster)...                 [  OK  ]

This means that everything is correct and working and we can continue to configure node3.

全て正常に動作しているので、node3 の設定に進みます。


ノード #3

Now we are going to configure node3. Stop node2 mysql with:

service mysql stop

Open node3 terminal and open my.cnf with:

nano /etc/my.cnf

Paste this configuration to node3 my.cnf (with your own IP’s) then save and exit.

node3 の設定に進みます。 node2 の mysql を停止します。

service mysql stop

node3 のターミナルを開き、my.cnf を編集します。

nano /etc/my.cnf

node3 の my.cnf に以下をペーストして(IPは環境に合わせて設定します)、保存します。

Configuration should look like this:

設定は次の通りです。

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #3 address
wsrep_node_address=192.168.70.73

# Cluster name
wsrep_cluster_name=my_centos_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

#Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"

Start node3 mysql with this command

service mysql start

The output should look like this

Starting MySQL (Percona XtraDB Cluster)...                 [  OK  ]

以下のコマンドで node3 の mysql を起動します。

service mysql start

次のような出力が表示されます。

Starting MySQL (Percona XtraDB Cluster)...                 [  OK  ]

If the output looks like that, then you can continue with the steps. But first stop node3 mysql with this command:

service mysql stop

問題なければ、次のステップに進みます。 その前に、node3 の mysql を停止しておきます。

service mysql stop

サーバの起動

If all the nodes work, then we need to stop them all and start them in the correct order. For this, follow these steps:

すべてのノードが動作するようになったら、すべてを停止したあと正しい順番で起動させる必要があります。そのためには次のステップを実行します。

Now start node1 with this command:

/etc/init.d/mysql bootstrap-pxc

After bootstrapping node1, start node2 and node3 with this command:

service mysql start

node1 にて以下のコマンドを実行し起動します。

/etc/init.d/mysql bootstrap-pxc

node1 が起動したら、node2 と node3 で以下を実行します。

service mysql start

After the server has been started, it should receive the state snapshot transfer automatically on nodes 2 and 3.

サーバが起動したら、状態スナップショット転送が自動的に node2 と 3 に行われます。

Now check status in mysql (node1, node2 or node3):

mysql -u root 

or if you set up a password then:

mysql -u root -p

then check status:

show status like 'wsrep%';

Look for this line to see how many nodes are connected to cluster:

| wsrep_cluster_size         | 3                    |

mysql の状態を確認します。(node1, node2 および node3)

mysql -u root 

パスワードを設定している場合は次のようにします。

mysql -u root -p

そして、状態を確認します。

show status like 'wsrep%';

クラスタにいくつノードが接続されているか、次の行を確認します。

| wsrep_cluster_size         | 3                    |

To test the cluster, follow these steps:

クラスタをテストするには、以下のステップを実行します。

Create database on node2 mysql ( connect with mysql -u root or if you set up a password then mysql -u root -p ). Command for database:

CREATE DATABASE percona; 

Output: Query OK, 1 row affected (x sec) Create example table on node3 ( connect with mysql -u root or if you set up a password then mysql -u root -p ). First command for example table:

USE percona;

Output: Database changed

node2 の mysql でデータベースを作成します。( mysql -u root で接続します。パスワードを設定している場合は mysql -u root -p です) 以下のコマンドを実行します。

CREATE DATABASE percona; 

出力: Query OK, 1 row affected (x sec)

node3 に example テーブルを作成します。( mysql -u root で接続します。パスワードを設定している場合は mysql -u root -p です) 以下のコマンドを実行します。

USE percona;

出力: Database changed

Second command:

CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));

Output: Query OK, 0 rows affected (x sec) Inserting records on node1 ( connect with mysql -u root or if you set up a password then mysql -u root -p ). Command for inserting records:

INSERT INTO percona.example VALUES (1, 'percona1');

Output: Query OK, 1 row affected (x sec) Retrieving all the rows from that table on node2: Command:

SELECT * FROM percona.example;

Output:

+-----------+------------------+
| node_id   | node_name        |
+-----------+------------------+
|       1   |   percona1       |
+-----------+------------------+
1 row in set (0.00 sec)

This example shows that all nodes in the cluster are synchronized and working as intended.

つぎに以下を実行します。

CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));

出力: Query OK, 0 rows affected (x sec)

node1 でレコードを挿入します。( mysql -u root で接続します。パスワードを設定している場合は mysql -u root -p です) レコード挿入のコマンドは以下の通りです。

INSERT INTO percona.example VALUES (1, 'percona1');

出力: Query OK, 1 row affected (x sec)

node2 のテーブルから全ての行を取得します。 コマンド:

SELECT * FROM percona.example;

出力:

+-----------+------------------+
| node_id   | node_name        |
+-----------+------------------+
|       1   |   percona1       |
+-----------+------------------+
1 row in set (0.00 sec)

This example shows that all nodes in the cluster are synchronized and working as intended.

この例は、クラスタ内の全ノードが同期され意図通りに動作していることを示しています。

Pandora コンソールの設定

Now that you have all the nodes configured, you should start setting up the Pandora Console. Follow these steps:

すべてのノードの設定が完了したので、Pandora コンソールの設定を始めます。以下の手順です。

Install Pandora FMS server and console using this guide: http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_en:Installing#Installation_in_Red_Hat_Enterprise_Linux_.2F_Fedora_.2F_CentOS Open Terminal, log into Pandora server using command

ssh root@<pandora_server_ip>

Connect to MySQL using command

mysql -u root -p 

Enter this command to grant all privileges:

grant all privileges on pandoraname.* ‘pandora’@<node #1 ip> identified by ‘pandora’;  

Run <Pandora FMS server IP>/pandora_console/install.php Use guide: http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_en:Installing#Console_Initial_Configuration

Pandora FMS サーバとコンソールを次のガイドに従ってインストールします。 http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_ja:Installing#Red_Hat_Enterprise_Linux_.2F_Fedora_.2F_CentOS_.E3.81.B8.E3.81.AE.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB ターミナルを開き、Pandora サーバにログインします。

ssh root@<pandoraサーバIP>

MySQL に接続します。

mysql -u root -p 

次のコマンドで全ての権限設定をします。

grant all privileges on pandoraname.* ‘pandora’@<node #1 ip> identified by ‘pandora’;  

<Pandora FMS サーバのIP>/pandora_console/install.php にアクセスします。詳細は以下を参照してください。 http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_ja:Installing#.E3.82.B3.E3.83.B3.E3.82.BD.E3.83.BC.E3.83.AB.E3.81.AE.E5.88.9D.E6.9C.9F.E8.A8.AD.E5.AE.9A

Please note that apache may be under different names, in our case it was httpd. Few examples: apache, apached, http, httpd, apache2

apache は異なる名前になっている可能性があるので注意してください。ここでは httpd です。他には、apache, apached, http, httpd, apache2 などがあります。

Now we need to configure the config.php and pandora_server.conf files to work with the nodes:

ノードを使って動作するようにするには、config.php および pandora_server.conf を設定する必要があります。

Configure config.php with

nano /var/www/html/pandora_console/include/config.php

Change dbuser to root, dbpass to pandora (default) and dbhost to node #1 ip. Configure pandora_server.conf with:

nano /etc/pandora/pandora_server.conf 

Change dbuser to root, dbpass to pandora (default) and dbhost to node #1 ip. Start all nodes from 1 to 3, bootstraping first, then restart pandora_server with command:

service pandora_server restart

次の通り config.php を編集します。

nano /var/www/html/pandora_console/include/config.php

dbuser を root に、dbpass を pandora(デフォルト) に変更し、dbhost を ノード #1 の IP に変更します。 pandora_server.conf を編集します。

nano /etc/pandora/pandora_server.conf 

dbuser を root に、dbpass を pandora(デフォルト) に変更し、dbhost を ノード #1 の IP に変更します。 bootstrap を最初にして 1 から 3 の全てのノードを起動します。その後 pandora_server を以下のコマンドで再起動します。

service pandora_server restart

HAProxy の設定

HAProxy is a free, very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. High availability is required to keep the cluster running even if the bootstrapping node fails. Load balancing makes sure that workloads are distributed equally.

HAProxy はフリーで、高速な HA、ロードバランシング、TCP および HTTP ベースのアプリケーションに対するプロキシのソリューションを提供するソフトです。bootstrap ノードで障害が発生したとしてもクラスタが動作し続けるために高可用性が必要とされます。ロードバランシングは、負荷を均等に分散します。

ファイル:Haproxy.jpg

The picture above shows how HAProxy communicates with the nodes

上記の図は、どのように HAProxy がノードと通信するかを示しています。

Prerequisites:

要件:

At least 2 nodes with:

少なくとも以下の設定の 2ノードが必要です。

  • SELinux's enforcing “permissive”

To do that you need to modify your SELinux config with

nano /etc/selinux/config 

and change SELINUX=disabled to SELINUX=permissive and reboot

  • SELinux のモードを“permissive”にする

これには、SELinux 設定を編集する必要があります。

nano /etc/selinux/config 

SELINUX=disabled を SELINUX=permissive に変更し、再起動します。

  • iptables disabled

To disable iptables, use command

service iptables stop
  • iptables の無効化

iptables を無効化するには以下を実行します。

service iptables stop
  • ntpd ON

To enable ntpd, use command

service ntpd start
  • ntpd の有効化

ntpd を有効化するには以下を実行します。

service ntpd start

HAProxy のインストール

Execute this command on all individual nodes to install HAProxy software:

yum -y install haproxy

HAProxy をインストールするには、個々のノードで以下のコマンドを実行します。

yum -y install haproxy

HAProxy の設定

In this part we will configure the HAproxy configuration files to work with the nodes. Simply follow these steps:

ここでは、ノードで動作するように HAproxy 設定ファイルの設定をします。以下の手順を実施します。

Make a backup of the configuration by executing this command

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.orig

以下のコマンドで設定のバックアップを取得します。

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.orig

Now make a new configuration file

nano /etc/haproxy/haproxy.cfg

新たな設定ファイルを作成します。

nano /etc/haproxy/haproxy.cfg

Paste the lines below and set your own parameters (hostname and IP’s of Node1, Node2 and Node3 )

以下の設定をコピーしパラメータ(node1,node2,node3 のホスト名とIP)の調整をします。

global
 log 127.0.0.1   local0
 log 127.0.0.1   local1 notice
 maxconn 4096
 uid 188
 gid 188
 daemon
 #debug
 #quiet

defaults
 log     global
 mode    http
 option  tcplog
 option  dontlognull
 retries 3
 option redispatch
 maxconn 2000
 contimeout      5000
 clitimeout      50000
 srvtimeout      50000

listen mysql-cluster 0.0.0.0:33306
 mode    tcp
 balance roundrobin
 option  httpchk

 server percona1 192.168.70.71:3306 check port 9200 inter 12000 rise 3 fall 3
 server percona2 192.168.70.72:3306 check port 9200 inter 12000 rise 3 fall 3
 server percona3 192.168.70.73:3306 check port 9200 inter 12000 rise 3 fall 3

listen mysql-cluster-failover :43306
 mode    tcp
 balance leastconn
 option  httpchk
 server  percona1 192.168.70.71:3306 check port 9200
 server  percona2 192.168.70.72:3306 check port 9200 backup
 server  percona3 192.168.70.73:3306 check port 9200 backup

With this configuration HAProxy will load balance between three nodes.

この設定で、HAProxy は 3ノード間のロードバランシングをします。

Save and exit the configuration file

設定ファイルを保存して抜けます。

Execute these two commands to start server

service haproxy start        

and

chkconfig haproxy on

以下の 2つのコマンドでサーバを起動します。

service haproxy start        

および

chkconfig haproxy on

Keepalived で 2台の HAProxy ノードを冗長化する

Keepalived の最新版のインストール

The latest version of keepalived will be installed on your system with the use of this command:

yum install -y keepalived

keepalived の最新版は、以下のコマンドでインストールします。

yum install -y keepalived

Keepalived の設定

On both two nodes create the configuration file by following these steps:

2つのノード双方で、次のステップで設定ファイルを作成します。

Rename original configuration file with a command (for backup):

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.backup

Create a new file with a command:

nano /etc/keepalived/keepalived.conf

Insert this configuration to created file, replace the Virtual IP address, the email address, the SMTP's IP address and set the OTHER nodes IP address with your values:

オリジナルの設定ファイルをリネームします。(バックアップ)

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.backup

新たなファイルを作成します。

nano /etc/keepalived/keepalived.conf

作成したファイルに以下の設定を入れます。仮想 IP アドレス、email アドレス、SMTP サーバ IP アドレスは環境に合わせて調整します。

global_defs {
notification_email {
alvise.dorigo@pd.infn.it
}
notification_email_from noreply-keepalived-gridops@pd.infn.it
smtp_server 192.168.70.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1
}
vrrp_instance VI_1 {
interface eth0
state MASTER
 smtp_alert
 virtual_router_id 51
 priority 101 # on the nodes considered slaves, change 101 -> 100
 unicast_peer {
    192.168.70.72 # this is the other node's IP address
 }
 advert_int 1
   authentication {
      auth_type PASS
        auth_pass 1111
 }
# check every second
# add 2 points of prio if OK
# 101 on master, 100 on slaves
 virtual_ipaddress {
    192.168.70.54
 } 
}
track_script {
  chk_haproxy
}

In order to be able to bind on a IP which is not yet defined on the system, we need to enable non local binding at the kernel level:

システムに定義されていない IP をバインドできるように、kernel レベルで非ローカルアドレスのバインドを有効化します。

Open sysctl.conf with command:

nano /etc/sysctl.conf

Add a line to the bottom:

net.ipv4.ip_nonlocal_bind = 1

To enable it, use this command:

sysctl -p

Now start keepalive using these commands:

service keepalived start

and

chkconfig keepalived on

You can use this command to check which node the Virtual IP is associated with:

ip addr sh eth0

sysctl.conf を開きます。

nano /etc/sysctl.conf

以下の行を追加します。

net.ipv4.ip_nonlocal_bind = 1

有効化するために以下を実行します。

sysctl -p

以下のコマンドで、keepalive を起動します。

service keepalived start

また以下を実行します。

chkconfig keepalived on

どちらのノードに仮想 IP がついているかは、以下のコマンドで確認できます。

ip addr sh eth0

If done correctly the output should look similar to this:

正しく設定できていれば、次のように表示されます。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
   link/ether 44:37:e6:dd:fa:27 brd ff:ff:ff:ff:ff:ff
   inet 192.168.70.71/24 brd 192.168.70.255 scope global eth0
   inet 192.168.70.54/32 scope global eth0
   inet6 fe80::4637:e6ff:fedd:fa27/64 scope link
      valid_lft forever preferred_lft forever

Now you should have an architecture like in the picture below:

これで、次のようなアーキテクチャになりました。

ファイル:Architecture.jpg

'too many open files' 問題の回避

To avoid this error, open the limits configuration file

nano /etc/security/limits.conf

このエラーを回避するは、制限の設定ファイルを開きます。

nano /etc/security/limits.conf

Add these two lines below at the end then save and exit

* soft nofile 60000
* hard nofile 60000

以下の 2行を追記します。

* soft nofile 60000
* hard nofile 60000

Open sysctl.conf

nano /etc/sysctl.conf

then add the following line:

fs.file-max = 900000

sysctl.conf を開きます。

nano /etc/sysctl.conf

そして、以下の行を追加します。

fs.file-max = 900000

After that enter command to enable it:

sysctl -p

その後、以下のコマンドで有効化します。

sysctl -p

最適化

This part is optional, but recommended. For optimal cluster work you should optimize your configuration files, we added these lines to our /etc/my.cnf file:

この章はオプションですが対応をお勧めします。 クラスタ動作の最適化のために設定を調整すると良いでしょう。我々は、/etc/my.cnf ファイルに以下の設定をしています。

innodb_io_capacity = 100
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
key_buffer = 300M
innodb_buffer_pool_size  = 600M
innodb_log_buffer_size =32M
max_allowed_packet = 64M
bind-address            = 0.0.0.0
innodb_lock_wait_timeout = 30
query_cache_size = 128M
query_cache_limit = 2M
join_buffer_size = 16M
log_warnings
back_log=100
max_connections=500
innodb_file_per_table

The result were as follows:

結果は以下の通りです。

Prior to optimization:

最適化前:

 -> Current rate: 0.82 modules/sec
 -> Current rate: 0.69 modules/sec
 -> Current rate: 0.60 modules/sec
 -> Current rate: 0.80 modules/sec
 -> Current rate: 0.81 modules/sec
 -> Current rate: 0.56 modules/sec

After optimization: 最適化後:

 -> Current rate: 62.44 modules/sec
 -> Current rate: 61.49 modules/sec
 -> Current rate: 74.81 modules/sec
 -> Current rate: 73.90 modules/sec
 -> Current rate: 73.22 modules/sec
 -> Current rate: 77.00 modules/sec
 -> Current rate: 72.77 modules/sec
 -> Current rate: 77.10 modules/sec
 -> Current rate: 72.44 modules/sec
 -> Current rate: 69.99 modules/sec
 -> Current rate: 70.81 modules/sec

Using this configuration should improve performance noticeably although considering you might be running on different hardware, improvements might not be as big as ours. Tinkering with these setting might result in even higher performance gains.

この設定でパフォーマンスが目立って改善していますが、利用環境は同じではないはずなので、これと同じ結果にはならない可能性があります。 これらの設定を調整することにより、さらに高いパフォーマンスを得られる可能性もあります。