1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS7でGalera Cluster(MariaDB10.1)を構築

Last updated at Posted at 2020-01-04

CentOS7でGalera Cluster(MariaDB10.1)

さくらのクラウドを利用して、ローカルネットワーク内でMariaDB10.1系から標準搭載されている、Galera Cluster(MariaDB10.1)を構築しました。

このGalera Clusterはマスター・スレーブ方式のレプリケーションとは異なり、全てのサーバーで読み込み書き込み可能な仕組みとなります。

そのためどのサーバーを更新しても、全てのサーバーに反映されるといったことが特徴です。

この特徴によって、一部のノード(サーバー)がダウンしても他のノードが残っていればサービスが維持できたり、マスターサーバーへの負荷を分散させることができます。

詳しくは、下記のサイトが参考になると思うので、興味がある方はぜひ読んでみてください。

参考:
https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/
https://www.s-style.co.jp/lp/galera/

前提条件

ローカルネットワークで構築したCentOS7のサーバー4台

  • Globalサーバー(eth0:グローバルIPアドレス、eth1:192.168.0.1)
  • MariaDB1(eth0:192.168.0.2)
  • MariaDB2(eth0:192.168.0.3)
  • MariaDB3(eth0:192.168.0.4)
  • Globalサーバーのeth1と、MariaDB1,2,3のeth0を繋いだスイッチ

※Galera Clusterのノード数の注意点として、過半数に満たないクラスターに所属するノードは処理を受け付けなくなるため、ノードの構成は奇数台にしなければいけない。
そのため今回は、最小ノード構成数の3台で行います。

参考:
https://www.s-style.co.jp/blog/2018/06/1906/

ローカルリポジトリを構築しインストール

MariaDB各種サーバーはインターネットと疎通がないため、Globalサーバーでyumリポジトリを構築しなければいけない。

そのためGlobalサーバーでローカルリポジトリ作成後、そのローカルリポジトリーを参照し、MariaDB各種サーバーでGalera Cluster導入に必要なパッケージをインストールする。

リポジトリとなるディレクトリを作成

# mkdir /root/MyRepo

MariaDB10.1を/root/MyRepoにダウンロード

公式サイトを参考に自分の環境に合うMariaDB10.1のリポジトリを追加、/root/MyRepoにダウンロードする。

# vi /etc/yum.repos.d/MariaDB.repo

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

# yum install -y --downloadonly --downloaddir=/root/MyRepo MariaDB-server MariaDB-client

policycoreutils-pythonを/root/MyRepoにダウンロード

SELinuxでアクセス制限を無効にしないとGaleraClusterの起動に失敗してしまうため、MariaDBのアクセス制限だけを無効にする設定に必要な、policycoreutils-pythonを上記と同様にダウンロード。

# yum install -y --downloadonly --downloaddir=/root/MyRepo policycoreutils-python

ローカルリポジトリを構築

createrepoというツールを使い、ローカルリポジトリを作成する。

# yum install -y createrepo
# createrepo /root/MyRepo/

成功したら、/root/MyRepo/下にrepodataディレクトリが作成されている。

# ls /root/MyRepo/repodata/

ローカルリポジトリ参照設定

作成したローカルリポジトリをyumに参照させるために、yumの参照リポジトリ一覧である/etc/yum.repos.d/にrepoファイルを作る。

# vi /etc/yum.repos.d/MyRepo.repo

[MyRepo]
name=MyRepo
baseurl=file:///root/MyRepo
gpgcheck=0

yumのMyRepoリポジトリに、ダウンロードしたRPMパッケージがあるか確認。

# yum list all | grep MyRepo

MariaDB1,2,3にローカルリポジトリを同期

Globalサーバーで作成した、ローカルリポジトリとローカルリポジトリの参照設定をMariaDB1,2,3にssh接続で同期する。

# rsync -av -e ssh /root/MyRepo/ root@192.168.0.2:/root/MyRepo/
# rsync -av -e ssh /etc/yum.repos.d/MyRepo.repo/ root@192.168.0.2:/etc/yum.repos.d/MyRepo.repo/

//MariaDB2(192.168.0.3)、MariaDB3(192.168.0.4)にも同様に設定

ローカルリポジトリを参照してインストール

ローカルリポジトリを参照して、MariaDB10.1とpolicycoreutils-pythonをMariaDB1,2,3内でインストールする。


# yum install -y --disablerepo=\* --enablerepo=MyRepo MariaDB-server MariaDB-client
# mysql_secure_installation //MySQLの初期設定

# yum install -y --disablerepo=\* --enablerepo=MyRepo policycoreutils-python

//MariaDB2(192.168.0.3)、MariaDB3(192.168.0.4)にも同様にインストール

Galera Clusterのノード設定

MariaDB1,2,3にGalera Clusterのノード設定を、/etc/my.cnf.d/server.cnfにする。

[galera]
# Mandatory settings
# レプリケーションに使うGaleraライブラリのパスを指定
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# wsrep_cluster_addressはノードのIP一覧
wsrep_cluster_address=gcomm://192.168.0.2,192.168.0.3,192.168.0.4
# デフォルト
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# クラスタリングを有効化するオプション
wsrep_on=ON 
# 管理用のクラスタ名
wsrep_cluster_name=DBCLUSTER 
# 自身のノードの名称を示すのでノードごとに変更
wsrep_node_name=DBCLUSTER-NODE1 
# 自身のIPを示すのでノードごとに変更
wsrep_node_address=192.168.0.2 

wsrepという記述は、Galera Clusterでレプリケーションの設定をするためのもの。

一番最初に立ち上げるサーバには既存サーバが無いため、gcomm:// の記述をする。

firewallのポート解放

Galera Clusterに必要なポートを解放する必要があるので、firewalldで3306:mysql, 4567:replication, 4444:rsyncのポートを解放。

# firewall-cmd --add-port=3306/tcp --add-port=4567/tcp --add-port=4444/tcp --permanent
# firewall-cmd --reload

SELinuxのPermissive設定

アクセス制限を無効にするが警告をだすPermissiveの設定を、MariaDB(MySQL)のみに設定する。

# semanage permissive -a mysqld_t

Galera Clusterノード起動

MariaDB2,3が起動していないことを確認し、MariaDB1のノードで新規クラスターを起動する。

# galera_new_cluster

その後、MariaDB2,3では、通常通り起動。

# systemctl start mariadb

wsrep_local_state_commentがSyncedになっており、起動したノードがwsrep_incoming_addressesに含まれていることを確認。

# mysql -u root -p -e "show status like 'wsrep_%';"

//部分抜粋
+---------------------------+-------------------------------------------------+
| Variable_name             | Value                                           |
+---------------------------+-------------------------------------------------+
| wsrep_local_state_comment | Synced                                          |
| wsrep_incoming_addresses  | 192.168.0.2,192.168.0.3,192.168.0.4             |
+---------------------------+-------------------------------------------------+

最終確認

最後に、それぞれのMariaDBでDBやテーブルを追加しても、他のノードでも反映されているか確認し、成功していたら、CentOS7でGalera Cluster(MariaDB10.1)の構築は終了です。

参考URL

https://qiita.com/egnr-in-6matroom/items/f6af7318e850206bc424
https://qiita.com/Sa2Knight/items/bec1c24d78719c01a705
https://sky-joker.tech/2016/10/10/mariadb-galera-cluster%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/
https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/
https://www.s-style.co.jp/lp/galera/
https://www.s-style.co.jp/blog/2018/06/1906/
https://serversmanvps.xn--ockc3f5a.com/2017/12/22/mysql%E3%81%A7%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9E%E3%82%B9%E3%82%BF-galera-cluster/

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?