特に必要に迫られたわけではないが、53ningen.com をさくら VPS から AWS 環境へお引越ししてみる。
現状 nginx, MariaDB が稼働する gomi-web 系と zabbix, elasticsearch, kibana, その他諸々をぶん回している gomi-back 系がある。これを ELB + EC2 2 台 + RDS という構成に変更する。
主に nginx, php-fpm, MariaDB が稼働していたさくら VPS の gomi-web 系統から MariaDB を分離し RDS にお引越し
zabbix, elasticsearch, kibana, influxdb, graphana など色々てんこ盛りで動いてたバックエンド系 + 実験用サーバだが、カオスだったり、環境をぶっ壊しがちだったので、定常的に動かすものとそうでないものを分離しておく
ウェブサーバの構成変更点は以下のようなもの
nginx で直接 SSL を解いていたが、前段の ALB によって SSL オフロードする
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) { $_SERVER['HTTPS']='on'; }
- listen 443 ssl; + listen 8443;
rsync -av ./wordpress/ remote_ip:/path/to/wordpress/ --dry-run rsync -av ./wordpress/ remote_ip:/path/to/wordpress/
sudo firewall-cmd --zone=external --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx/32" service name="mysql" accept' sudo firewall-cmd --zone=external --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx/32" service name="mysql" accept' --permanent
$ strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo; ........... $ mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 23627 Server version: 10.2.15-MariaDB-log MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE USER 'hoge'@"xx.xx.xx.xx" IDENTIFIED BY '...........'; MariaDB [(none)]> GRANT ......... ON ........ TO 'hoge'@"xx.xx.xx.xx"; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SHOW GRANTS for 'hoge'@"xx.xx.xx.xx"; +-----------------------------------------------------------------------------------------------------------------+ | Grants for 'hoge'@"xx.xx.xx.xx" | +-----------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON ....... TO ..... IDENTIFIED BY PASSWORD ........................... | +-----------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
ALB の FQDN から動作確認
ウェブサーバの移行残タスクは以下
続いてデータベースの RDS 移行
AWS のドキュメントによると、MariaDB 10.0.24 以降を利用している場合で RDS MariaDB をレプリケーションスレーブにしたい場合、GTID ベースレプリケーションの設定が必要となる。
(もし既存のレプリケーションがなければ) DB の conf を修正し、restart
[mysqld] server-id={{ mysql_server_id }} {% if mysql_server_state == 'master' %} log-bin=mysql-bin expire_logs_days=3 {% else %} read_only {% endif %}
(もし既存のレプリケーションがなければ)現行系 DB にレプリケーション用ユーザーを作成
# create replication user $ strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo; ............... $ mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 23627 Server version: 10.2.15-MariaDB-log MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE USER ......... IDENTIFIED BY ...............; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> SELECT user, host FROM mysql.user; +------------------+-----------------+ | user | host | +------------------+-----------------+ ......... +------------------+-----------------+ 10 rows in set (0.00 sec) MariaDB [(none)]> GRANT CLIENT, REPLICATION SLAVE ON *.* TO ........... IDENTIFIED BY '........'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SHOW GRANTS for '.....'@'........'; +-----------------------------------------------------------------------------------------------------------------+ | Grants for .................. | +-----------------------------------------------------------------------------------------------------------------+ ........ +-----------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
現行 DB をダンプし、移行先 DB にインポート
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SET GLOBAL read_only = ON; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SELECT @@gtid_current_pos; +--------------------+ | @@gtid_current_pos | +--------------------+ | 0-1001-20104 | +--------------------+ 1 row in set (0.00 sec) MariaDB [(none)]> exit Bye $ mysqldump \ > --databases hogehoge \ > --single-transaction \ > --compress \ > --order-by-primary | mysql \ > --host=dbname.********.ap-northeast-1.rds.amazonaws.com \ > --port=**** \ > -u ***** \ > -p Enter password:
slave の設定を行いレプリケーションを開始する
MariaDB [(none)]> CALL mysql.rds_set_external_master_gtid ('*************', *****, 'repl', '***************', '0-1001-20104', 0); Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]> CALL mysql.rds_start_replication; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> UPDATE mysql.rds_replication_status SET action='start slave'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event ... Slave_IO_Running: Yes Slave_SQL_Running: Yes ... Seconds_Behind_Master: 0 ... Using_Gtid: Slave_Pos ... Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it 1 row in set (0.01 sec)
新系を数日寝かせて動作確認後、DNS 変更で新系の ELB を向くように Route 53 を設定する
RDS で稼働する DB を新 master に切り替える