KubernetesでWordpress + MySQL(レプリケーション) 構築
本ページは広告やPRを掲載しています
目次
-
概要
-
構築の流れ
-
DockerでWordpress用のイメージ作成
-
Dockerイメージからtarファイルに保存
-
tarファイルからmicrok8sイメージに保存
-
Kubernetes(Microk8s)で MySQL 構築
-
Kubernetes(Microk8s)で Wordpress 構築
-
Wordpress 設定
-
MySQLレプリケーション設定
-
概要
kubernetes でwordpress + MySQL用の公開ソースはたくさんあったけど、どれも http公開やMySQLが単体稼働だったりして、
やってみたかった、Wordpress + MySQL(レプリケーション)+ Https 公開が無かったので、自分で作ってみました。
Wordpress アプリデータとMySQLのデータ保存場所は、VMでNFSマウントしているディレクトリに保存し、
Kubernetes上では、OSでNFSマウントしているディレクトリをlocalStorageとして取り扱ってます。
-
構築の流れ
DockerでWordpress用のイメージ作成
Dockerイメージからtarファイルに保存
tarファイルからmicrok8sイメージに保存
Kubernetes(Microk8s)で MySQL 構築
Kubernetes(Microk8s)でWordpress 構築
Wordpress 設定
MySQLレプリケーション設定
Wordpress 公開
-
DockerでWordpress用のイメージ作成
SSL証明書組み込んで wordpress:5.8.1-apache を作成します。
今回用意したファイルは以下です。
wordpress ∟Dockerfile default-ssl.conf keyfile hogehogenohogehoge.com.crt hogehogenohogehoge.com.key hoge_intermediate.crt wordpress.yaml wordpress-service.yml wordpress-pv-pvc.yaml mysql-0.yaml mysql-1.yaml
- Dockerファイルの作成
実行コマンド: vi Dockerfile
ファイル内容
FROM bibcnrs/wordpress:5.8.1-apache RUN apt-get update && apt-get install -y \ git \ && docker-php-ext-install pdo_mysql; RUN apt-get install -y gettext; RUN mkdir -p /home/apache; COPY ./hogehogenohogehoge.com.crt /etc/ssl/certs COPY ./hogehogenohogehoge.com.key /etc/ssl/private COPY ./hoge_intermediate.crt /etc/ssl/certs COPY ./default-ssl.conf /home/apache RUN a2enmod ssl \ && a2ensite default-ssl.conf RUN a2enmod proxy_http RUN cp -f /home/apache/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf
- default-ssl.conf ファイル作成
実行コマンド: vi default-ssl.conf
default-ssl.conf ファイルをDockerfile と同じディレクトリに配置します。
ファイル内容
<IfModule mod_ssl.c> ServerName hogehogenohogehoge.com <VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName hogehogenohogehoge.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/hogehogenohogehoge.com.crt SSLCertificateKeyFile /etc/ssl/private/hogehogenohogehoge.com.key SSLCACertificateFile /etc/ssl/certs/hoge_intermediate.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> <VirtualHost *:80> DocumentRoot "/var/www/html" ServerName hogehogenohogehoge.com #ErrorLog logs/hoge_error_log #TransferLog logs/hoge_access_log LogLevel warn </VirtualHost> </IfModule>
- 証明書の作成
参考:RapidSSLが格安
証明書の作成方法は上記参考ください。以下のファイルをDockerfile と同じディレクトリに配置します。
証明書:hogehogenohogehoge.com.crt
キーファイル:hogehogenohogehoge.com.key
中間証明書:hoge_intermediate.crt
- Docker イメージ作成
実行コマンド: docker build -t wordpress:v1.0.0 .
- Docker イメージ作成確認
実行コマンド: docker image ls
]REPOSITORY TAG IMAGE ID CREATED SIZE wordpress v1.0.0 798d950fdc68 6 days ago 730MB bibcnrs/wordpress 5.8.1-apache cf9ca815ff3f 8 weeks ago 621MB
-
Dockerイメージからtarファイルに保存
実行コマンド:docker save wordpress:v1.0.0 > wordpress_v1.tar
以下実行例
[root@hoge-rhel8-dev00 wordpress]# docker save wordpress:v1.0.0 > wordpress_v1.tar [root@hoge-rhel8-dev00 wordpress]# ls wordpress_v1.tar wordpress_v1.tar
-
tarファイルからmicrok8sイメージに保存
-
tar ファイルからmicrok8sイメージへ保存
実行コマンド:microk8s ctr image import wordpress.tar
以下実行例
[root@hoge-rhel8-dev00 wordpress]# microk8s ctr image import wordpress.tar unpacking wordpress:v1.0.0 (sha256:672209b1094b53337b863a97a5e8dfa223c3b4b6c398830f2d1b469bc8b96f8a)...done
-
イメージ確認
実行コマンド:microk8s ctr image list | grep wordpress
以下実行例
[root@hoge-rhel8-dev00 wordpress]# microk8s ctr image list | grep wordpress docker.io/library/wordpress:v1.0.1 sha256:672209b1094b53337b863a97a5e8dfa223c3b4b6c398830f2d1b469bc8b96f8a 711.1 MiB linux/amd64
-
Kubernetes(Microk8s)で MySQL 構築
予め PV / PVC永続データボリューム用のディレクトリをNFSマウントで用意しておきます。
そして、データベースデータは PV / PVC 永続データボリュームに保存します。MySQLはStatefulSet で作成します。
パスワード等はSecretで暗号化します。ConfigMapでMySQLのconfファイルを設定してます。
-
NFSマウント用ディレクトリ用意
実行コマンド: mkdir /data
-
NFSマウント設定
実行コマンド: vi /etc/fstab
設定例
192.168.1.150:/Vol0 /data nfs defaults 0 0
-
NFSマウント
実行コマンド: mount -a
-
NFSマウント確認
実行コマンド: mount | grep /data
192.168.1.150:/Vol0 on /data type nfs4 ・・・
-
MySQL データベース用ディレクトリ作成
実行コマンド:mkdir -p /data/{mysql-0|mysql-1|mysql-2}
-
Secret 作成
ユーザ名やパスワードを平文でマニュフェストに入れたくないという人のために、暗号化して作成します。
-
keyファイルの作成(2048bit)
実行コマンド:openssl rand 0-base64 2048 | ter -d '\r\n' | cuut -c 1-2048 > kyeyfile
-
kubectl create secret でシークレット作成
実行コマンド: 以下を参考にmysql rootパスワードやユーザ名を作成する
[root@hoge-rhel8-dev00 wordpress]# microk8s kubectl create secret generic mysql-config \ > --from-literal=mysql_root_password=hogehoge \ > --from-literal=mysql_database_name=wordpress \ > --from-literal=mysql_user_name=hogehoge \ > --from-literal=mysql_user_password=hogehoge \ > --from-file=./keyfile secret/mysql-config created
-
暗号化された情報を取得してメモ帳などに書き出す
実行コマンド: microk8s kubectl get secret/mysql-config -o yaml
※ ★が必要情報
[root@hoge-rhel8-dev00 20.Answer]# microk8s get secret/mysql-config -o yamlkubectl ★apiVersion: v1 ★data: ★ keyfile: cDY4ZktCekZ・・・・・(省略) ★ mysql_database_name: d29y(省略) ★ mysql_root_password: aGZIQ(省略) ★ mysql_user_name: aGZIQ(省略) ★ mysql_user_password: aGZIQ(省略) ★kind: Secret ★metadata: creationTimestamp: "2021-12-24T06:59:29Z" ★ name: mysql-config namespace: default resourceVersion: "1286610" selfLink: /api/v1/namespaces/default/secrets/mysql-config uid: e4ec2356-b5d5-4f04-8e3e-bd8ed47c81e7 ★type: Opaque
-
kubectl delete secret でシークレット削除
実行コマンド: microk8s kubectl delete secret/mysql-config
-
マニュフェストファイルの作成(Master)
実行コマンド:vi mysql-0.yaml
以下ファイル内容
apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume-0 namespace: default labels: app: mysql type: mysql-data spec: storageClassName: slow capacity: storage: 20Gi accessModes: - ReadWriteMany hostPath: path: "/data/mysql-0" type: Directory --- apiVersion: v1 kind: Service metadata: name: mysql-master namespace: default labels: app: mysql-master spec: ports: - port: 3306 name: mysql selector: app: mysql-master clusterIP: None --- apiVersion: v1 kind: ConfigMap metadata: name: mysql-config labels: app: mysql-master data: mysqld.cnf: | [client] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci innodb-use-native-aio = 0 log_bin = /var/log/mysql/mysql-bin server_id = 1 pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql symbolic-links=0 [mysql] prompt = '(master) [\\d] > ' --- apiVersion: v1 kind: Secret metadata: name: mysql-secret labels: app: mysql-master type: Opaque data: mysql_root_password: aGZIQ(省略) mysql_database_name: d29y(省略) mysql_user_name: aG9n(省略) mysql_user_password: aGZIQ(省略) keyfile: cDY4ZktCekZ・・・・・(省略) --- apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-master labels: app: mysql-master spec: selector: matchLabels: app: mysql-master serviceName: "mysql-master" replicas: 1 template: metadata: labels: app: mysql-master spec: terminationGracePeriodSeconds: 60 containers: - name: mysql image: mysql:5.7 imagePullPolicy: Always args: - "--ignore-db-dir=lost+found" ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql_root_password - name: MYSQL_DATABASE valueFrom: secretKeyRef: name: mysql-secret key: mysql_database_name - name: MYSQL_USER valueFrom: secretKeyRef: name: mysql-secret key: mysql_user_name - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql_user_password - name: MYSQL_MASTER value: "true" volumeMounts: - name: config-volume mountPath: /etc/mysql/mysql.conf.d - name: mysql-data mountPath: /var/lib/mysql volumes: - name: config-volume configMap: name: mysql-config - name: secret secret: secretName: mysql-secret items: - key: keyfile path: keyfile mode: 0700 volumeClaimTemplates: - metadata: name: mysql-data spec: storageClassName: slow accessModes: - ReadWriteMany resources: requests: storage: 20Gi
-
マニュフェストファイルの作成(Slave)
実行コマンド:vi mysql-1.yaml
以下ファイル内容
apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume-1 namespace: default labels: app: mysql type: mysql-data spec: storageClassName: slow capacity: storage: 20Gi accessModes: - ReadWriteMany hostPath: path: "/data/mysql-1" type: Directory --- apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume-2 namespace: default labels: app: mysql type: mysql-data spec: storageClassName: slow capacity: storage: 20Gi accessModes: - ReadWriteMany hostPath: path: "/data/mysql-2" type: Directory --- apiVersion: v1 kind: Service metadata: name: mysql-slave namespace: default labels: app: mysql-slave spec: ports: - port: 3306 name: mysql selector: app: mysql-slave clusterIP: None --- apiVersion: v1 kind: ConfigMap metadata: name: mysql-config-slave data: mysqld.cnf: | [client] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci innodb-use-native-aio = 0 log_bin = /var/log/mysql/mysql-bin server_id = 4 pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql symbolic-links=0 [mysql] prompt = '(master) [\\d] > ' --- apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-slave labels: app: mysql-slave spec: selector: matchLabels: app: mysql-slave serviceName: "mysql-slave" replicas: 2 updateStrategy: type: OnDelete template: metadata: labels: app: mysql-slave spec: terminationGracePeriodSeconds: 60 containers: - name: mysql image: mysql:5.7 imagePullPolicy: Always args: - "--ignore-db-dir=lost+found" ports: - containerPort: 3306 env: - name: MYSQL_MASTER_HOST value: "mysql-master-0.mysql-master" - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql_root_password - name: MYSQL_DATABASE valueFrom: secretKeyRef: name: mysql-secret key: mysql_database_name - name: MYSQL_USER valueFrom: secretKeyRef: name: mysql-secret key: mysql_user_name - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql_user_password - name: MYSQL_REPL_USER value: "repl" - name: MYSQL_REPL_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql_user_password volumeMounts: - name: config-volume-slave mountPath: /etc/mysql/mysql.conf.d - name: mysql-data mountPath: /var/lib/mysql volumes: - name: config-volume-slave configMap: name: mysql-config-slave - name: secret secret: secretName: mysql-secret items: - key: keyfile path: keyfile mode: 0700 volumeClaimTemplates: - metadata: name: mysql-data spec: storageClassName: slow accessModes: - ReadWriteMany resources: requests: storage: 20Gi
-
MySQL Master Pod 作成
実行コマンド:microk8s kubectl apply -f mysql-0.yaml
-
MySQL Slave Pod 作成
実行コマンド:microk8s kubectl apply -f mysql-1.yaml
-
MySQL Pod 確認
[root@hoge-rhel8-dev00 wordpress]# microk8s kubectl get po -w -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-master-0 1/1 Running 0 12m 10.1.9.96 hoge-ubu20-dev01.hogehoge.com <none> <none> mysql-slave-0 1/1 Running 0 3m7s 10.1.1.77 hoge-rhel8-dev01.hogehoge.com <none> <none> mysql-slave-1 1/1 Running 0 2m57s 10.1.8.93 hoge-ubu20-dev02.hogehoge.com <none> <none>
-
Kubernetes(Microk8s)で Wordpress 構築
Dockerで作成したイメージを利用してSSL用対応のWordpressを構築します。MySQLサーバ(Master)へはサービスを参照するようにしてます。
また、Wordpress本体は PV / PVC 永続ボリュームに保存しています。ConfigMap は設定変更したい場合もあるので、作成しておきます。
-
Wordpress データ用ディレクトリ作成
実行コマンド:mkdir /data/wordpress
-
Wordpress ダウンロード
Wordpress をダウンロードして、上記のディレクトリにwordpressデータを配置します。
-
マニュフェストファイル作成(pv / pvc)
実行コマンド:vi wordpress-pv-pvc.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: wordpress-pv spec: storageClassName: slow accessModes: - ReadWriteOnce capacity: storage: 20Gi persistentVolumeReclaimPolicy: Retain hostPath: path: /data/wordpress type: Directory --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wordpress-pvc spec: storageClassName: slow accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
-
マニュフェストファイル作成(wordpress)
実行コマンド:vi wordpress.yaml
--- apiVersion: v1 kind: ConfigMap metadata: name: wordpress-config labels: app: wordpress tier: wordpress data: default-ssl.conf: | <IfModule mod_ssl.c> ServerName hogehogenohogehoge.com <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ServerName hogehogenohogehoge.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/hogehogenohogehoge.com.crt SSLCertificateKeyFile /etc/ssl/private/hogehogenohogehoge.com.key SSLCACertificateFile /etc/ssl/certs/hoge_intermediate.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> <VirtualHost *:80> DocumentRoot "/var/www/html" ServerName hogehogenohogehoge.com #ErrorLog logs/hoge_error_log #TransferLog logs/hoge_access_log LogLevel warn </VirtualHost> </IfModule> --- apiVersion: v1 kind: Secret metadata: name: wordpress-secret data: keyfile: cDY4Zkt・・・(省略) mysql_database_name: d29(省略) mysql_root_password: aGZI(省略) mysql_user_name: aG9(省略) mysql_user_password: aGZI(省略) type: Opaque --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress labels: app: wordpress spec: replicas: 2 selector: matchLabels: app: wordpress template: metadata: labels: app: wordpress spec: containers: - image: wordpress:v1.0.0 name: wordpress imagePullPolicy: Never env: - name: WORDPRESS_DB_HOST value: mysql-master:3306 - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: wordpress-secret key: mysql_root_password ports: #- containerPort: 80 - containerPort: 443 name: wordpress volumeMounts: - name: wordpress-local-storage mountPath: /var/www/html - name: wordpress-config-volume mountPath: /home/apache volumes: - name: wordpress-local-storage persistentVolumeClaim: claimName: wordpress-pvc - name: wordpress-config-volume configMap: name: wordpress-config - name: secret secret: secretName: wordpress-secret items: - key: keyfile path: keyfile mode: 0700
-
マニュフェストファイル作成(service)
実行コマンド:vi wordpress-service.yaml
apiVersion: v1 kind: Service metadata: labels: app: wordpress name: wordpress spec: #type: NodePort type: LoadBalancer loadBalancerIP: NAT用のIPアドレス ports: - port: 443 targetPort: 443 protocol: TCP selector: app: wordpress
-
Wordpress用永続データボリューム作成
実行コマンド:microk8s kubectl apply -f wordpress-pv-pvc.yaml
-
Wordpress Pod作成
実行コマンド:microk8s kubectl apply -f wordpress.yaml
-
Wordpress Service 作成
実行コマンド:microk8s kubectl apply -f wordpress-service.yaml
-
PV / PVC / Pod / Service 確認
実行コマンド:microk8s kubectl get pv,pvc,po,service
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/mysql-pv-volume-0 20Gi RWX Retain Bound default/mysql-data-mysql-master-0 slow 7d6h persistentvolume/mysql-pv-volume-2 20Gi RWX Retain Bound default/mysql-data-mysql-slave-0 slow 7d1h persistentvolume/mysql-pv-volume-1 20Gi RWX Retain Bound default/mysql-data-mysql-slave-1 slow 7d1h persistentvolume/wordpress-pv 20Gi RWO Retain Bound default/wordpress-pvc slow 2d NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/mysql-data-mysql-master-0 Bound mysql-pv-volume-0 20Gi RWX slow 7d6h persistentvolumeclaim/mysql-data-mysql-slave-0 Bound mysql-pv-volume-2 20Gi RWX slow 7d1h persistentvolumeclaim/mysql-data-mysql-slave-1 Bound mysql-pv-volume-1 20Gi RWX slow 7d1h persistentvolumeclaim/wordpress-pvc Bound wordpress-pv 20Gi RWO slow 2d NAME READY STATUS RESTARTS AGE pod/mysql-slave-1 1/1 Running 0 7d1h pod/mysql-slave-0 1/1 Running 0 31h pod/mysql-master-0 1/1 Running 0 30h pod/wordpress-66cbd8fb47-9jll7 1/1 Running 0 5h30m pod/wordpress-66cbd8fb47-j2mpc 1/1 Running 0 5h29m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/mysql-master ClusterIP None <none> 3306/TCP 7d6h service/wordpress LoadBalancer 10.152.183.63 172.68.2.201 443:30725/TCP 7d3h service/mysql-slave ClusterIP None <none> 3306/TCP 7d1h
-
Wrodpress Pod へログイン
実行コマンド:microk8s kubectl exec -it wordpress-66cbd8fb47-9jll7 bash
root@wordpress-66cbd8fb47-9jll7:/var/www/html#
-
wordpress ディレクトリのオーナーを変更する
実行コマンド:chown -R www-data. /var/www/html
-
wordpress ディレクトリのオーナーの確認
実行コマンド:ls -l /var/www/html
total 228 -rw-r--r-- 1 www-data www-data 405 Feb 6 2020 index.php -rw-r--r-- 1 www-data www-data 19915 Dec 31 06:59 license.txt -rw-r--r-- 1 www-data www-data 10083 Dec 31 06:59 readme.html -rw-r--r-- 1 www-data www-data 7165 Jan 21 2021 wp-activate.php drwxr-xr-x 9 www-data www-data 4096 Nov 27 06:00 wp-admin -rw-r--r-- 1 www-data www-data 351 Feb 6 2020 wp-blog-header.php -rw-r--r-- 1 www-data www-data 2328 Feb 17 2021 wp-comments-post.php -rw-r--r-- 1 www-data www-data 4068 Nov 27 06:00 wp-config-sample.php -rw-rw-rw- 1 www-data www-data 4401 Dec 31 06:56 wp-config.php -rw-rw-rw- 1 www-data www-data 4401 Dec 29 13:00 wp-config.php.org drwxr-xr-x 7 www-data www-data 4096 Dec 31 07:10 wp-content -rw-r--r-- 1 www-data www-data 3939 Jul 30 2020 wp-cron.php drwxr-xr-x 25 www-data www-data 8192 Nov 27 06:00 wp-includes -rw-r--r-- 1 www-data www-data 2496 Feb 6 2020 wp-links-opml.php -rw-r--r-- 1 www-data www-data 3900 May 15 2021 wp-load.php -rw-r--r-- 1 www-data www-data 45463 Apr 6 2021 wp-login.php -rw-r--r-- 1 www-data www-data 8509 Apr 14 2020 wp-mail.php -rw-r--r-- 1 www-data www-data 22297 Jun 1 2021 wp-settings.php -rw-r--r-- 1 www-data www-data 31693 May 7 2021 wp-signup.php -rw-r--r-- 1 www-data www-data 4747 Oct 8 2020 wp-trackback.php -rw-r--r-- 1 www-data www-data 3236 Jun 8 2020 xmlrpc.php
-
MySQLレプリケーション設定
-
MySQL(Master)Podへログイン
実行コマンド:microk8s kubectl exec -it mysql-master-0 bash
root@mysql-master-0:/#
-
ホスト名取得
実行コマンド:hostname
-
ドメイン名取得
実行コマンド:hostname -d
-
MySQLデータベースへログイン
実行コマンド: mysql -u root -p
root@mysql-master-0:/# mysql -u root -p Enter password: Secret作成時に設定したMYSQL_ROOT_PASSWORD Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 981 Server version: 5.7.36-log MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. (master) [(none)] >
-
wordpressデータベース作成
実行コマンド:CREATE DATABASE wordpress;
-
Master Status確認
実行コマンド:SHOW MASTER STATUS;
(master) [(none)] > SHOW MASTER STATUS; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 621 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
-
MySQL(Slave)Podへログイン(slave0|1共通:masterと別のターミナルで実施)
実行コマンド:microk8s kubectl exec -it mysql-slave-0 bash
root@mysql-slave-0:/#
-
MySQLデータベースへログイン(Slave0|1共通)
実行コマンド: mysql -u root -p
root@mysql-slave-0:/# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 18 Server version: 5.7.36-log MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. (master) [(none)] >
-
wordpressデータベース作成(Slave0|1共通)
実行コマンド:CREATE DATABASE wordpress;
-
レプリケーション用ユーザ/アクセスIP設定(Slave0|1共通)
実行コマンド: CREATE USER 'repl'@'10.1.%.%' IDENTIFIED BY 'REPL ユーザのパスワード';
※ PodのIPアドレスは「microk8s kubectl get pod -o wide」で、確認することができる。
-
レプリケーションDBアクセス権限付与(Slave0|1共通)
実行コマンド: GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.1.%.%';
-
レプリケーション設定(Slave0|1共通)
実行コマンド:CHANGE MASTER TO MASTER_HOST='Mstaerのホスト名+ドメイン名', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='REPL ユーザのパスワード', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=Master StatusのPosition 番号;
-
Start Slave(Slave0|1共通)
START SLAVE USER = 'repl' PASSWORD = 'REPL ユーザのパスワード';
-
SLAVE Status確認(Slave0|1共通)
実行コマンド:SHOW SLAVE STATUS\G;
※ 星印がYesになっていること。Errorが表示されていないことを確認する。
(master) [(none)] > SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: Mstaerのホスト名+ドメイン名 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: Master StatusのPosition 番号 Relay_Log_File: mysql-slave-0-relay-bin.000002 Relay_Log_Pos: Master StatusのPosition 番号 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes ★ yesになっていること Slave_SQL_Running: Yes ★ yesになっていること Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 979306 Relay_Log_Space: 978188 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 3c7fd582-648a-11ec-b099-de26f9d81686 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)
Wordpress 設定
Webブラウザ でWordpressにアクセスし、「さあ、始めましょう!」ボタンをクリック
以下の情報を入れて、「送信」ボタンをクリック
データベース名:Master で作成した Wordpress を入力
ユーザ名: Secret 設定時の mysql_user_name の値を入力
パスワード:mysql_user_name のパスワードを入力
データベースのホスト名: MySQL Master の「ホスト名+ドメイン名」を入力
「送信」ボタンクリック後に「インストールは完了しました」と出たら完了です。
お疲れさまでした!
広告