- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-01-05T18:35:21+09:00","default:nowsky","nowsky")
*MaxScale [#o119416e]
[[MariaDB MaxScale>+https://mariadb.com/kb/en/maxscale/]]
MariaDBのトランザクションをバックグラウンドのMariaDBにロードバランスするソフトウェア。
MaxScaleはMariaDBに特化しているが、同様のソフトとしてMySQL Routerも存在する。
ソフト単体でMaxScale自体の冗長化は出来ない為、完全二重化を行う為にはKeepalivedも組み合わせて、
VirtualIP構成を取る必要がある。
#author("2020-01-05T20:17:44+09:00","default:nowsky","nowsky")
*kimchi [#t0147ec8]
-[[kimchi-project>+https://github.com/kimchi-project]]
-[[がらくたネット キムチ>+https://e-garakuta.net/techinfo/doku.php/linux/kimchi]]
webブラウザ経由でKVM環境を操作するフロントエンドツール。
kimchiはIBMが開発に着手し、エンタープライズの利用実績を歴てからOSS化された。
OpenStack/oVirt程の機能は無いが、RPMインストールで簡単に構築できる上、
ゲストOS作成・KVMコンソール操作・ストレージ管理が一括で出来る為、
クラスタを組まないKVM環境の管理ツールには十分な機能を備えている。
~
*インストール [#m7ca126f]
&size(16){&font(b){1. ビルド・インストール};};
今回はCentOS 8.0.1905・MaxScale v2.4.4でビルドを行う。
ライブラリインストールにdnfを用いているが、他ディストリを利用する時は読み替える。
# dnf install openssl-devel systemd-devel sqlite-devel pam-devel libcurl-devel gnutls-devel libgcrypt-devel
# dnf install npm tcl cmake uuid libuuid-devel xz-devel
# wget "https://github.com/mariadb-corporation/MaxScale/archive/maxscale-2.4.4.tar.gz"
# tar zxvf maxscale-2.4.4.tar.gz
# cd MaxScale-maxscale-2.4.4
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/maxscale-2.4.5 -DBUILD_TOOLS=Y -DBUILD_CDC=N
# make
# make install
# ln -s /usr/local/maxscale-2.4.4 /usr/local/maxscale
# ln -s /usr/local/maxscale/etc/maxscale.cnf /etc/maxscale.cnf
~
&size(16){&font(b){2. サービスファイル};};
最近のLinuxではsystemdを用いている為、MaxScale用のサービスファイルを準備する。
今回は実行ユーザとグループを決め打ちしている為、サービスファイルに直接埋め込む。
# groupadd maxscale
# useradd -g maxscale -d /var/run/maxscale -s /sbin/nologin maxscale
# vi /usr/lib/systemd/system/maxscale.service
-----
[Unit]
Description=MariaDB MaxScale Database Proxy
After=network.target
[Service]
Type=forking
Restart=on-abort
PermissionsStartOnly=true
User=maxscale
Group=maxscale
PIDFile=/var/run/maxscale/maxscale.pid
ExecStart=/usr/local/maxscale/bin/maxscale -f /etc/maxscale.cnf
Environment=ASAN_OPTIONS=abort_on_error=1
ExecStartPre=/usr/bin/install -d /var/run/maxscale -o maxscale -g maxscale
ExecStartPre=/usr/bin/install -d /var/lib/maxscale -o maxscale -g maxscale
TimeoutStartSec=120
LimitNOFILE=65535
LimitNPROC=65535
StartLimitBurst=0
WatchdogSec=60s
NotifyAccess=all
[Install]
WantedBy=multi-user.target
~
&size(16){&font(b){3. 起動準備};};
サービスファイルの登録と各ディレクトリを作成して起動準備を行う。
# systemctl enable maxscale
# mkdir /var/log/maxscale
# chown maxscale.maxscale /var/log/maxscale
# echo '/usr/local/maxscale/lib64/maxscale' > /etc/ld.so.conf.d/maxscale.conf
# vi /etc/logrotate.d/maxscale_logrotate
-----
/var/log/maxscale/*.log {
ifempty
missingok
sharedscripts
postrotate
kill -USR1 `/usr/bin/pgrep maxscale`
endscript
}
~
&size(16){&font(b){4. コンフィグファイル};};
今回は下記構成を想定してコンフィグを作成する。
細かいオプションについては[[公式ドキュメント>+https://mariadb.com/kb/en/mariadb-maxscale-23-mariadb-maxscale-configuration-usage-scenarios/]]を参照。
下記ではサンプルのみ掲載。
*インストール [#pdc52b9e]
&size(16){&font(b){1. インストール};};
ソースコードからビルドする方法もあるが、
KVM管理ツールとしてkernelに近い箇所を操作する事から、RPMインストールが推奨されている。
また、kimchiでスナップショットなど最近の機能を使う都合上、
CentOS7の標準libvirt/Qemuライブラリでは動作しない為、
仮想基盤リポジトリを追加して高機能版のQemuをインストールする。
|ホスト |IPアドレス|レプリカユーザ|レプリカパスワード|ReadOnly|ReadWrite|
|MariaDB #01|10.0.0.1 |replicate |rep-pass |- |TCP:3306 |
|MariaDB #02|10.0.0.2 |replicate |rep-pass |- |TCP:3306 |
|MaxScale |10.0.0.3 |maxscale |max-pass |TCP:3305|TCP:3306 |
QEMU v2.12リポジトリ追加
# yum install centos-release-qemu-ev
# yum install qemu-kvm-ev libvirt
#region(コンフィグサンプル)
# vi /etc/maxscale.cnf
-----
[maxscale]
threads=auto
log_warning=1
log_notice=0
log_info=0
logdir=/var/log/maxscale
cachedir=/var/lib/maxscale
kimchiインストール
# wget "https://github.com/kimchi-project/kimchi/releases/download/2.5.0/kimchi-2.5.0-0.el7.centos.noarch.rpm"
# wget "https://github.com/kimchi-project/kimchi/releases/download/2.5.0/wok-2.5.0-0.el7.centos.noarch.rpm"
# yum install kimchi-2.5.0-0.el7.centos.noarch.rpm wok-2.5.0-0.el7.centos.noarch.rpm
~
&size(16){&font(b){2. 設定変更};};
kimchiはwebコンソールのユーザ管理にLDAPを用いる事が出来るが、
参照先となるLDAP環境と検索フィルター設定も必要なので、Linuxユーザを用いたPAM認証を実装する。
PAM認証経由でlibvirtを操作する都合上、&font(b){ログインユーザにsudo権限が必要};なので注意。
kimchiの設定ファイルにはロギングなど他の設定項目も含まれている為、必要に応じて変更する。
# vi /etc/wok/wok.conf
---
[authentication]
method = pam
# ldap_server = "localhost"
# ldap_search_base = "ou=People, dc=wok, dc=org"
# ldap_search_filter = "uid=%(username)s"
# ldap_admin_id = "foo@foo.com, bar@bar.com"
~
&size(16){&font(b){3. テンプレート};};
kimchiはインストールするディストリビューションイメージを指定したJSON形式のテンプレートと、
作成対象のゲストOSスペックを定義したテンプレートの2種類が存在する。
ディストリビューションの方はサンプルだけでも動くが、標準外のOSを用いる場合には自力で修正する。
作成するゲストOSを定義するテンプレートは、下記とlibvirtの設定を参考に修正を行う
VPSで良くある&color(#ff0000){CPU2コア・MEM1GB・HDD50GB・NIC1本};は次の通りとなる。
# vi /etc/kimchi/template.conf
---
[main]
networks = default,
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=DB1,DB2
user=maxscale
password=max-pass
replication_user=maxscale
replication_password=max-pass
monitor_interval=2000
auto_failover=true
auto_rejoin=true
[memory]
current = 1024
maxmemory = 1024
[RO-Service]
type=service
router=readconnroute
servers=DB1,DB2
user=maxscale
password=max-pass
router_options=slave
[storage]
[[disk.0]]
size = 50
format = qcow2
pool = default
[RW-Service]
type=service
router=readwritesplit
servers=DB1,DB2
user=maxscale
password=max-pass
master_failure_mode=error_on_write
master_reconnection=true
transaction_replay=true
causal_reads=false
max_slave_connections=100%
[graphics]
type = vnc
listen = 127.0.0.1
[RO-Listener]
type=listener
service=RO-Service
protocol=mariadbclient
address=0.0.0.0
port=3305
[RW-Listener]
type=listener
service=RW-Service
protocol=mariadbclient
address=0.0.0.0
port=3306
[DB1]
type=server
address=10.0.0.1
port=3306
protocol=mariadbbackend
[DB2]
type=server
address=10.0.0.2
port=3306
protocol=mariadbbackend
#endregion
~
*レプリケーション設定 [#v5227dc4]
MaxScaleのバックエンドをレプリケーション構成にしている場合、
Master停止時にSlaveを自動でMasterに昇格する事が出来る。
その場合、&font(b){GTIDレプリケーションを双方向に設定};した上、
MaxScaleから&font(b){レプリカメンバーの昇格・降格を行える様に権限を追加付与};する。
[processor]
vcpus = 2
maxvcpus = 2
- [[SmartStyle TECH BLOG>+https://www.s-style.co.jp/blog/2018/05/1877/]]
- [[Qiita>+https://qiita.com/reioto/items/2ae56e9025ef711592ea]]
- [[MySQL>+https://www.ns-lab.org/wiki/?Linux/Source/MySQL]]
- MariaDB #01
・MaxScale接続ユーザ
> CREATE USER 'maxscale'@'10.0.0.3/255.255.255.255' IDENTIFIED BY 'max-pass';
> GRANT SELECT ON mysql.user TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SELECT ON mysql.db TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SHOW DATABASES ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT REPLICATION CLIENT ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SUPER ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255';
・GTIDレプリケーション
> CHANGE MASTER TO MASTER_HOST='10.0.0.2', MASTER_USER='replicate', MASTER_PASSWORD='rep-pass', MASTER_USE_GTID=slave_pos;
> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=YYYYYY;
+--------------------------------------------+
| binlog_gtid_pos("mysql-bin.XXXXXX",YYYYYY) |
+--------------------------------------------+
| 0-NNN-NNN |
+--------------------------------------------+
- MariaDB #02
・MaxScale接続ユーザ
> CREATE USER 'maxscale'@'10.0.0.3/255.255.255.255' IDENTIFIED BY 'max-pass';
> GRANT SELECT ON mysql.user TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SELECT ON mysql.db TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SHOW DATABASES ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT REPLICATION CLIENT ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255';
> GRANT SUPER ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255';
・GTIDレプリケーション
> CHANGE MASTER TO MASTER_HOST='10.0.0.1', MASTER_USER='replicate', MASTER_PASSWORD='rep-pass', MASTER_USE_GTID=slave_pos;
> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=YYYYYY;
+--------------------------------------------+
| binlog_gtid_pos("mysql-bin.XXXXXX",YYYYYY) |
+--------------------------------------------+
| 0-NNN-NNN |
+--------------------------------------------+
~
*ステータス確認 [#ya7c8dfe]
MaxScaleに同梱されているmaxctrlコマンドで、メンバーDBの稼働状況を確認出来る。
レプリカメンバーの自動昇格を有効化している場合もmaxctrlコマンドで確認する。
# maxctrl list services
┌────────────────┬────────────────┬─────────────┬──────────────────┬───────────────┐
│ Service │ Router │ Connections │ Total Connections │ Servers │
├────────────────┼────────────────┼─────────────┼──────────────────┼───────────────┤
│ RO-Service │ readconnroute │ 0 │ 1644 │ DB1, DB2 │
├────────────────┼────────────────┼─────────────┼──────────────────┼───────────────┤
│ RW-Service │ readwritesplit │ 0 │ 77 │ DB1, DB2 │
└────────────────┴────────────────┴─────────────┴──────────────────┴───────────────┘
# maxctrl list servers
┌───────┬───────────┬──────┬─────────────┬────────────────────────────┬────────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├───────┼───────────┼──────┼─────────────┼────────────────────────────┼────────────┤
│ DB1 │ 10.0.0.1 │ 3306 │ 0 │ Master, Running │ 0-NNN-NNN │
├───────┼───────────┼──────┼─────────────┼────────────────────────────┼────────────┤
│ DB2 │ 10.0.0.2 │ 3306 │ 0 │ Relay Master, Slave, Running │ 0-NNN-NNN │
└───────┴───────────┴──────┴─────────────┴────────────────────────────┴────────────┘