MySQLのHA冗長化を設定してみた〜AlibabaCloudクラウドネイティヴデータベースPolarDBのご紹介

2023/03/03に公開

目次

  1. 自前で構築する場合、MySQLのHA冗長化を設定してみます
  2. AlibabaCloud RDS MySQL
  3. AlibabaCloud クラウドネイティヴデータベースの紹介
  4. 最後に

自前で構築する場合、MySQLのHA冗長化を設定してみます

パブリッククラウドが進んでいるいまマネージドサービスを使うのが一般的ですが、
改めて昔ながらのやり方でMySQLのHA構成をやってみます。
実装してみて、クラウドの便利さをより実感できるようになります。

今回は一台の仮想サーバー上にDockerでMySQLを起動してHA構成を設定していきます。

マスター側設定

DockerでMySQLのマスターをRunします。

docker run -p 3307:3306 --name mysql-master \ 
-v /Users/rai/docker/host_data/mysql_log_master:/var/log/mysql \ 
-v /Users/rai/docker/host_data/mysql_data_master:/var/lib/mysql \ 
-v /Users/rai/docker/host_data/mysql_conf_master:/etc/mysql/conf.d \ 
-e MYSQL_ROOT_PASSWORD=root \ 
-d mysql:5.7

設定ファイルはこちらです。

[mysqld]
## server_id,ネットワーク内で一意 
server_id=101 
## レプリケーションしないデータベース名を指定
binlog-ignore-db=mysql
## バイナリログを有効化
log-bin=mall-mysql-bin
## バイナリログにメモリを振り分け
binlog_cache_size=1M
## バイナリログのフォーマット指定(mixed,statement,row)
binlog_format=mixed
## バイナリログの保存期限。デフォルト0,無期限
expire_logs_days=7
## エラーをスキップ,スタンバイレプリカのレプリケートを中断しないように
## 例:1062エラーはPK重複,1032マスターとスタンバイレプリカのデータが一致しない
slave_skip_errors=1062

設定ファイルを修正したら再起動

docker restart mysql-master

マスターのDockerのコンテナの中に入って、MySQLを接続して、ユーザーを作成

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
スタンバイレプリカの設定(設定上はslave)

※余談ですが、IT業界ではslaveなどの差別っぽい用語を使わない傾向があり、コマンド上はslaveですが、スタンバイレプリカと呼ぶようにしています。

DockerでMySQLのスタンバイレプリカをRunします。

docker run -p 3308:3306 --name mysql-slave \ 
-v /Users/rai/docker/host_data/mysql_log_slave:/var/log/mysql \ 
-v /Users/rai/docker/host_data/mysql_data_slave:/var/lib/mysql \ 
-v /Users/rai/docker/host_data/mysql_conf_slave:/etc/mysql/conf.d \ 
-e MYSQL_ROOT_PASSWORD=root \ 
-d mysql:5.7

設定ファイルはこちらです。

[mysqld]
## 设置server_id,ネットワーク内で一意
server_id=102
## レプリケーションしないデータベース名を指定
binlog-ignore-db=mysql
## バイナリログを有効化,スタンバイレプリカが将来マスターになる場合に備え
log-bin=mall-mysql-slave1-bin
## バイナリログにメモリを振り分け
binlog_cache_size=1M
## バイナリログのフォーマット指定(mixed,statement,row)
binlog_format=mixed
## バイナリログの保存期限。デフォルト0,無期限
expire_logs_days=7
## エラーをスキップ,スタンバイレプリカのレプリケートを中断しないように
## 例:1062エラーはPK重複,1032マスターとスタンバイレプリカのデータが一致しない
slave_skip_errors=1062
## relay_logの設定
relay_log=mall-mysql-relay-bin
## レプリケーションを自分のバイナリログに書き出すように
log_slave_updates=1
## スタンバイレプリカをRead Onlyに設定
read_only=1

設定ファイルを修正したら再起動

docker restart mysql-slave

マスターのステータスを確認

show master status

スタンバイレプリカのDockerのコンテナの中に入って、レプリケーションを設定

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mall-mysql-bin.000003', master_log_pos=617, master_connect_retry=30;

スタンバイレプリカのDockerのコンテナの中に入って、レプリケーションを開始し、ステータスを確認

start slave
show slave status \G;

これでレプリケーションの設定が完了しました。

AlibabaCloud RDS MySQL

上記のように、自分でMySQLを構築して、レプリケーションを設定すると手間がかかります。
その初期設定だけでなく、自前で構築した後に、運用管理の手間もかかります。
そので、AlibabaCloudのマネージドサービスRDSを使えば、
構築は管理コンソールのWebから数クリックでできます。
構築後の運用管理も楽になります。
例えば、深夜、早朝などアクセスが少ない時間帯にメンテナンスウィンドウを設定していけば、OSのパッチ適用やデータベースエンジンのマイナバージョンのバージョンアップが自動的に対応してくれます。
そして、データベースのストレージが自動的に拡張できます。

AlibabaCloud クラウドネイティヴデータベースの紹介

AlibabaCloud は普通のマネージドサービスRDSのMySQLだけでなく、
クラウドネイティヴの新型マネージドサービスデータベースもあります。
その名はPolarDBです。
PolarDBは以下のデータベースと互換性があります。

  • MySQL 100% 互換性   6倍の性能
  • PostgreSQL 100% 互換性
  • Oracle 高い互換性

スケール性能については、ストレージが自動的に拡張でき、最大100TBまで自動拡張できます。
リードレプリカのオートスケールは最大16レプリカまでできます。

最後に

MySQLのHA構成を設定してみたことで、データベースを自前で構築する場合の煩雑さを改めて実感できたと思います。
パブリッククラウドのマネージドサービスRDSを使えば、構築運用が楽になります。
さらに、クラウドネイティヴのPolarDBを使えば、もっと高い性能を得られ、スケーラビリティも獲得できます。

Discussion