MySQL Clusterのtarパッケージを展開するとmydqldのinitスクリプトはsupport_files配下に存在するものの、ndbdやndb_mgmdの起動ファイルは見あたらず、なおかつsystemdのファイルでは無いので作ってみた。
良いのか悪いのか判断つきにくいところだが、ndb_mgmdとndbd(ここではマルチスレッドのndbmtd)は、プロセスが落ちてしまった場合に自動的に復旧するようにしてある。(意図的に停止したい場合にはsystemctl stop xxx)
mysqldについてはmysqld_safeが復旧させてくれる(mysqld_safeを1から書き直す元気が無かった)ので、これをそのまま利用している。
起動順序としては ndb_mgmd → ndbd → mysqld 。
NodeIdは各サーバで割り当てたNodeIdに合わせること。
/etc/my.cnf
[ndb_mgmd]
# daemonとして起動しない(Type=simpleとするため)
nodaemon = true
[ndbd]
# daemonとして起動しない(Type=simpleとするため)
nodaemon = true
/etc/systemd/system/ndb_mgmd.service
[Unit]
Description=NDB Manager
After=syslog.target
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/mysql/bin/ndb_mgmd
Restart=always
User=mysql
[Install]
WantedBy=multi-user.target
/etc/systemd/system/ndbd.service
[Unit]
Description=NDB MultiThread Daemon
After=ndb_mgmd.service
[Service]
Type=simple
ExecStart=/usr/local/mysql/bin/ndbmtd
Restart=always
User=mysql
[Install]
WantedBy=multi-user.target
/etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=ndbd.service
[Service]
Type=simple
ExecStart=/usr/local/mysql/bin/mysqld
PIDFile=/var/lib/mysql/mysql.pid
User=mysql
Restart=always
[Install]
WantedBy=multi-user.target
修正(2018/3/29)
ndb_mgmdおよびndbdをdaemon化させないようにし、Type=simpleとした。
これによりPID管理などから解放。
修正(2018/4/5)
mysqldをmysqld_safeでなくsystemdから制御するようにした。
(Restart=alwaysでプロセスダウン時には自動的に復旧)