CentOS7+MySQL Cluster 7.5.13の 環境構築メモメモ

# はじめに
　仕事でMySQL Cluster使う事が決まったので最新版で環境構築を行なったのでメモ

# 参考URL
　日本語は7.4のやつしか無い
　https://dev.mysql.com/doc/refman/5.6/ja/mysql-cluster-installation.html

　英語 ←☆結果これ☆ 7.4と7.5で設定ファイルの記載方法が異なるので結果ココを読む必要がある。
　https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-installation.html

# 環境
　ちょっぱやで作りたかったのでVagrantで環境構築（Vagrantは相性とかあるのでバージョンは以下)
　Vagrant　Version:2.2.4
　VertualBox　Version:6.0.4

　設定ファイルはこんな感じ。

``` 
  ### server1の設定内容
  config.vm.define "d1" do |server|
    server.vm.hostname = config.vm.box + "-d1" + ".vagrant"
    server.vm.network "private_network", ip: "192.168.200.101", host: "52001"
    config.vm.provider "virtualbox" do |vb|
      ### virtualbox上で表示される名前
      vb.name = config.vm.box + "_d1"
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--cpus", "2"]
    end
  end
  ### server2の設定内容
  config.vm.define "d2" do |server|
    server.vm.hostname = config.vm.box + "-d2" + ".vagrant"
    server.vm.network "private_network", ip: "192.168.200.102", host: "52002"
    config.vm.provider "virtualbox" do |vb|
      ### virtualbox上で表示される名前
      vb.name = config.vm.box + "_d2"
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--cpus", "1"]
    end
  end
  ### server0の設定内容
  config.vm.define "s0" do |server|
    server.vm.hostname = config.vm.box + "-s0" + ".vagrant"
    server.vm.network "private_network", ip: "192.168.200.200", host: "53001"
    config.vm.provider "virtualbox" do |vb|
      ### virtualbox上で表示される名前
      vb.name = config.vm.box + "_s0"
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--cpus", "1"]
    end
  end
  ### serverMの設定内容
  config.vm.define "sM" do |server|
    server.vm.hostname = config.vm.box + "-sM" + ".vagrant"
    server.vm.network "private_network", ip: "192.168.200.100", host: "52000"
    config.vm.provider "virtualbox" do |vb|
      ### virtualbox上で表示される名前
      vb.name = config.vm.box + "_sM"
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--cpus", "1"]
    end
  end
```

# 構成
　サイトで推奨している最小構成で構築（こんな想定)
　sM：192.168.200.100：管理サーバ(MGMノード)
　s0：192.168.200.200：管理サーバ(SQLノード)
　d1：192.168.200.101：データノードA(NDBDノード)
　d2：192.168.200.102：データノードB(NDBDノード)

# インストールパッケージ
　今回はRPMパッケージでインストール(パッケージはこれ（RPMのバンドル):wgetとかで持ってくる。)
 https://cdn.mysql.com//Downloads/MySQL-Cluster-7.5/mysql-cluster-community-7.5.13-1.el7.x86_64.rpm-bundle.tar


# 確認
## SSHの疎通確認
ssh 192.168.200.100 -l root
ssh 192.168.200.200 -l root
ssh 192.168.200.101 -l root
ssh 192.168.200.102 -l root
※passwordは全てvagrant

## SCPでコピー
・管理サーバ(MGMノード)
　MySQL-Cluster-management-server-XXXXXX.rpm
・管理サーバ(SQLノード)
　MySQL-Cluster-server-XXXXXX.rpm
 　→　MySQL-Cluster-client-XXXXXX.rpm
　　　→　MySQL-Cluster-common-XXXXXX.rpm
　　　→　MySQL-Cluster-lib-XXXXXX.rpm
・データノード(NDBDノード)
　MySQL-Cluster-data-node-XXXXXX.rpm

#RPMインストール
　rpm -Uhv XXX.rpm

### 注意
　管理サーバ(SQLノード)でclientのRPMが入らない。。(client)
　perl-DBIとperl-Class-MethodMakerが必要。
　perl-DBIは、yumで入れた。
　perl-Class-MethodMakerは、wgetでRPM落としてきてインストール。
　http://repo.openfusion.net/centos7-x86_64//perl-Class-MethodMaker-2.21-1.of.el7.x86_64.rpm

# 設定

## 設定ファイル
　全てのサーバに配布

```/etc/my.cnf
[mysqld]
# Options for mysqld process:
ndbcluster                      # run NDB storage engine

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.200.100  # location of management server
```

## ディレクトリ作成
```
mkdir -p /usr/local/mysql/data
```

## ディレクトリ作成
　管理ノードで設定ファイル作成
```
% mkdir /var/lib/mysql-cluster
% cd /var/lib/mysql-cluster
% vi config.ini
```

```config.ini
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2    # Number of replicas
DataMemory=80M    # How much memory to allocate for data storage
IndexMemory=18M   # How much memory to allocate for index storage
                  # For DataMemory and IndexMemory, we have used the
                  # default values. Since the "world" database takes up
                  # only about 500KB, this should be more than enough for
                  # this example NDB Cluster setup.
ServerPort=2202   # This the default value; however, you can use any
                  # port that is free for all the hosts in the cluster
                  # Note1: It is recommended that you do not specify the port
                  # number at all and simply allow the default value to be used
                  # instead
                  # Note2: The port was formerly specified using the PortNumber
                  # TCP parameter; this parameter is no longer available in NDB
                  # Cluster 7.5.

[ndb_mgmd]
# Management process options:
HostName=192.168.200.100          # Hostname or IP address of MGM node
DataDir=/var/lib/mysql-cluster  # Directory for MGM node log files

[ndbd]
# Options for data node "d1":
                                # (one [ndbd] section per data node)
HostName=192.168.200.101          # Hostname or IP address
NodeId=2                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[ndbd]
# Options for data node "d2":
HostName=192.168.200.102          # Hostname or IP address
NodeId=3                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[mysqld]
# SQL node options:
HostName=192.168.200.200          # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)
```
# 起動

## 管理ノード起動
```
% ndb_mgmd -f /var/lib/mysql-cluster/config.ini 
MySQL Cluster Management Server mysql-5.7.25 ndb-7.5.13
```
## データノード起動
```
% ndbd
2019-04-15 08:08:47 [ndbd] INFO     -- Angel connected to '192.168.200.100:1186'
2019-04-15 08:08:47 [ndbd] INFO     -- Angel allocated nodeid: 2
```
起動しない時は管理ノードなどのFireWallをOFFにする
CentOS7ならこれでいける。

```
% systemctl stop iptables
% systemctl disable iptables
% systemctl status iptables
```

# 起動確認
　確認にはndb_mgmが必要。（今回入れたのはSQLノードなのでSQLノードで確認)

```
% ndb_mgm
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2	@192.168.200.101  (mysql-5.7.25 ndb-7.5.13, Nodegroup: 0, *)
id=3	@192.168.200.102  (mysql-5.7.25 ndb-7.5.13, Nodegroup: 0)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@192.168.200.100  (mysql-5.7.25 ndb-7.5.13)

[mysqld(API)]	1 node(s)
id=4	@192.168.200.200  (mysql-5.7.25 ndb-7.5.13)
```
管理ノードにもclientを入れたほうが良さそう？

# 停止
 停止もndb_mgmを使う

```
% ndb_mgm -e shutdown
```

とりあえず以上。