CentOS 5.4 x64でMySQL Clusterを設定

タックス

今日現在の最新版であるMySQL 5.1.45には、複数のサーバを利用してクラスタリングができる機能が組み込まれています。
クラスターと聞くと非常に敷居が高く感じられますが、MySQL Clusterは非常に簡単にクラスターを組むことができます。
今回は、その手順を簡単ではありますが、ご紹介したいと思います。

    普通、MySQLで負荷分散や冗長性を確保するには、マスタースレーブ構成を組んだり、有償のソフトウェアを用いたりしますが、MySQL 5.1からはMySQL Clusterが使用できるようになりました。
    これにより、複数台のデータベースサーバをあたかも1台の高性能データベースサーバかのように扱うことができます。
    当然複数台のサーバを扱うわけですから、MySQLクライアント(Webサーバ等)とやりとりするには、ロードバランサーやDNSラウンドロビンを使うなどが考えられますが、この辺は各自で検討することとし、割愛させて頂きます。
    今回設定にあたっては、当サイトのwingリポジトリで公開しています、MySQL 5.1.45(2010/4/15現在)を使用しました。
    一応趣味で開発しているものですので、保証はできませんが、動作実績は一応ありますので、それなりに使えるのではないかと思います。

  • 環境

  • サーバを2台以上用意して下さい。(今回は2台構成で設定)
    以下は、MySQL Clusterを組む際の役割を示しています。

    管理ノード:192.168.0.1
    SQLノード:192.168.0.1(SQLノード1)、192.168.0.2(SQLノード2)
    データノード:192.168.0.1(データノード1)、192.168.0.2(データノード2)

    これを踏まえて以下の設定を行って下さい。
    項目に(管理ノード、データノード、SQLノード)と書いてあるものは、そのサーバで設定することを表しています。

  • MySQLとMySQL Clusterのインストール(管理ノード、データノード、SQLノード)

  • # yum install mysql-server mysql-cluster
    ※ 詳しくは以下のページを参照して下さい。
    RHEL/CentOS 5.4用 wingリポジトリを公開 - にわかSEの独り言

  • MySQL Serverの設定(管理ノード、データノード、SQLノード)

  • # vi /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=1

    # To allow mysqld to connect to a MySQL Cluster management daemon, uncomment
    # these lines and adjust the connectstring as needed.
    #ndbcluster
    #ndb-connectstring="nodeid=4;host=localhost:1186"

    ndbcluster
    ndb-connectstring="192.168.0.1"

    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

    [ndbd]
    # If you are running a MySQL Cluster storage daemon (ndbd) on this machine,
    # adjust its connection to the management daemon here.
    # Note: ndbd init script requires this to include nodeid!
    #connect-string="nodeid=2;host=localhost:1186"

    connect-string="192.168.0.1"

    [ndb_mgm]
    # connection string for MySQL Cluster management tool
    #connect-string="host=localhost:1186"

    connect-string="192.168.0.1"

    [mysql_cluster]
    ndb-connectstring="192.168.0.1"

  • 管理ノード設定(管理ノード)

  • # cp /usr/share/mysql/ndb-config-2-node.ini /var/lib/mysql-cluster/config.ini
    # vi /var/lib/mysql-cluster/config.ini
    # Example Ndbcluster storage engine config file.
    #
    [ndbd default]
    NoOfReplicas= 2
    MaxNoOfConcurrentOperations= 10000
    DataMemory= 80M
    IndexMemory= 24M
    TimeBetweenWatchDogCheck= 30000
    DataDir= /var/lib/mysql-cluster
    MaxNoOfOrderedIndexes= 512

    [ndb_mgmd default]
    DataDir= /var/lib/mysql-cluster

    [ndb_mgmd]
    Id=1
    #HostName= localhost
    HostName=192.168.0.1

    [ndbd]
    Id= 2
    #HostName= localhost
    HostName= 192.168.0.1

    [ndbd]
    Id= 3
    #HostName= localhost
    HostName= 192.168.0.2

    [mysqld]
    Id= 4

    [mysqld]
    Id= 5

    [mysqld]
    Id= 6

    [mysqld]
    Id= 7

    # choose an unused port number
    # in this configuration 63132, 63133, and 63134
    # will be used
    [tcp default]
    PortNumber= 63132

  • 管理ノードの起動と起動設定(管理ノード)

  • # service ndb_mgmd start
    # chkconfig ndb_mgmd on

  • データノードの起動と起動設定(データノード)

  • # service ndbd start
    # chkconfig ndbd on

  • SQLノードの起動と起動設定(SQLノード)

  • # service mysqld start
    # chkconfig mysqld on

  • クラスターの動作確認1(管理ノード)

  • # ndb_mgm
    ndb_mgm> show
    以下のように表示されればOKです。
    Connected to Management Server at: 192.168.0.1:1186
    Cluster Configuration
    ---------------------
    [ndbd(NDB)] 2 node(s)
    id=2 @192.168.0.1 (Version: 5.1.45, Nodegroup: 0, Master)
    id=3 @192.168.0.2 (Version: 5.1.45, Nodegroup: 0)

    [ndb_mgmd(MGM)] 1 node(s)
    id=1 @192.168.0.1 (Version: 5.1.45)

    [mysqld(API)] 4 node(s)
    id=4 @192.168.0.1 (Version: 5.1.45)
    id=5 @192.168.0.2 (Version: 5.1.45)
    id=6 (not connected, accepting connect from any host)
    id=7 (not connected, accepting connect from any host)

  • クラスターの動作確認2(SQLノード1)

  • # mysql -u root
    mysql> create database WING;
    mysql> use WING;
    mysql> create table wing(id int(10) auto_increment primary key, name varchar(100)) engine=ndbcluster;
    mysql> insert into wing values(1, 'wing');
    mysql> select * from wing;

  • クラスターの動作確認3(SQLノード2)

  • # mysql -u root
    mysql> use WING;
    mysql> select * from wing;

    SQLノード1と同じものが出ればOK。
    あとはロードバランサー等を使用して、インフラを整備して下さい。
    非常に簡単ですね。

    以上の方法は、元々最新のFedoraのRPMパッケージを参考にパッケージ化していますので、Fedoraや次期RHEL 6などでも同じように設定することが可能です。
    是非、お役に立てて下さい。

    以下、参考リンクです。

    Wikipedia(Linux)
    Wikipedia(CentOS)
    Wikipedia(MySQL)
    Wikipedia(phpMyAdmin)

関連記事


FC2Blog Rankingblogram投票ボタンとれまが人気ブログランキングブログランキング・にほんブログ村へ
くる天 人気ブログランキングにほんブログ村 IT技術ブログ CentOSへ

テーマ : Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

WING☆

Author:WING☆


カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
お問い合わせ

名前:
メール:
件名:
本文:

WING☆からのお知らせ
  • CentOS 7設定集
  •    └wingリポジトリ(el7)

  • CentOS 6 x64設定集
  •    └wingリポジトリ(el6)

  • CentOS 5 x64設定集
  •    └wingリポジトリ(el5)



    My Yahoo!に追加

    FC2ブログランキング



    リンク
    ブロとも一覧
    Virtualization & Sever Maniax
    RSSリンクの表示
    QRコード
    QRコード
    ブロとも申請フォーム

    この人とブロともになる