Org Org Org Org Org Org Org Org

おうち じかん

Org Org Org Org Org Org Org Org

KubernetesでWordpress + MySQL(レプリケーション) 構築

本ページは広告やPRを掲載しています

目次

  1. 概要

  2. 構築の流れ

  3. DockerでWordpress用のイメージ作成

  4. Dockerイメージからtarファイルに保存

  5. tarファイルからmicrok8sイメージに保存

  6. Kubernetes(Microk8s)で MySQL 構築

  7. Kubernetes(Microk8s)で Wordpress 構築

  8. Wordpress 設定

  9. MySQLレプリケーション設定


  1. 概要

    kubernetes でwordpress + MySQL用の公開ソースはたくさんあったけど、どれも http公開やMySQLが単体稼働だったりして、

やってみたかった、Wordpress + MySQL(レプリケーション)+ Https 公開が無かったので、自分で作ってみました。

Wordpress アプリデータとMySQLのデータ保存場所は、VMでNFSマウントしているディレクトリに保存し、

Kubernetes上では、OSでNFSマウントしているディレクトリをlocalStorageとして取り扱ってます。

 


  1. 構築の流れ

DockerでWordpress用のイメージ作成

 


Dockerイメージからtarファイルに保存

 


tarファイルからmicrok8sイメージに保存

 


Kubernetes(Microk8s)で MySQL 構築

 

Kubernetes(Microk8s)でWordpress 構築

 


Wordpress 設定

 

MySQLレプリケーション設定


Wordpress 公開


  1. 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

  1. 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

  1. 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

 


  1. 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 作成

ユーザ名やパスワードを平文でマニュフェストに入れたくないという人のために、暗号化して作成します。

  1. keyファイルの作成(2048bit)

実行コマンド:openssl rand 0-base64 2048 | ter -d '\r\n' | cuut -c 1-2048 > kyeyfile

 

  1. 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

 

  1. 暗号化された情報を取得してメモ帳などに書き出す

実行コマンド: 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

 

  1. 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>

 


  1. 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

  1. 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 の「ホスト名+ドメイン名」を入力

 

「送信」ボタンクリック後に「インストールは完了しました」と出たら完了です。

お疲れさまでした!


広告