最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

K8s 如何部署 MySQL 8.0.20 主從復(fù)制結(jié)構(gòu)

 更新時間:2024年04月24日 11:58:48   作者:小畢超  
這篇文章主要介紹了K8s 如何部署 MySQL 8.0.20 主從復(fù)制結(jié)構(gòu),本次使用 OpenEBS 來作為存儲引擎,OpenEBS 是一個開源的、可擴展的存儲平臺,它提供了一種簡單的方式來創(chuàng)建和管理持久化存儲卷,需要的朋友可以參考下

一、K8s 部署 MySQL

安裝規(guī)劃

組件replicas類型
mysql-master1StatefulSet
mysql-slave1StatefulSet

使用 k8s 版本為:v1.18.0 。

本次使用 OpenEBS 來作為存儲引擎,OpenEBS 是一個開源的、可擴展的存儲平臺,它提供了一種簡單的方式來創(chuàng)建和管理持久化存儲卷。它支持各種存儲后端,包括但不限于 ZFSBtrfs、XFS 等。同時,OpenEBS 具有高度的可擴展性和可配置性,可以滿足不同的存儲需求。

安裝 OpenEBS

kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml

驗證OpenEBS是否正確安裝:

kubectl get pods -n openebs

所有的 OpenEBS pods 都處于Running狀態(tài)表示正常。

1. 創(chuàng)建命名空間

vi mysql-ns.yml
apiVersion: v1
kind: Namespace
metadata:
  name: mysql
  labels:
    name: mysql
kubectl apply -f mysql-ns.yml

2. 創(chuàng)建一個默認的存儲卷:

vi mysql-local-storage.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: mysql-local-storage
  annotations:
    openebs.io/cas-type: local
    cas.openebs.io/config: |
      - name: StorageType
        value: hostpath
      - name: BasePath
        value: /data/openebs/mysql
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
kubectl apply -f mysql-local-storage.yml

3. 部署 MySQL 主節(jié)點:

vi mysql-master.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-master-config
  namespace: mysql
  labels:
    app: mysql-master-config
data:
  my.cnf: |+     
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    lower_case_table_names=1
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # 主從同步
    server-id = 1
    log-bin = mysql-bin
    sync_binlog = 1
    binlog_checksum = none
    binlog_format = mixed
    slave-skip-errors = all
    event_scheduler = 1
    max_allowed_packet = 64M
    # Custom config should go here
    !includedir /etc/mysql/conf.d/
---
# headless service 
apiVersion: v1
kind: Service
metadata:
  name: mysql-master-svc
  namespace: mysql
  labels:
    app: mysql-master-svc
spec:
  clusterIP: None
  ports:
  - name: master-port
    port: 3306
  selector:
    app: mysql-master
---
# NodePort service 
apiVersion: v1
kind: Service
metadata:
  name: mysql-master-nodeport
  namespace: mysql
  labels:
    app: mysql-master-nodeport
spec:
  clusterIP: 
  ports:
  - name: master-port
    port: 3306
    nodePort: 31306
    targetPort: 3306
  selector:
    app: mysql-master
  type: NodePort
  target-port:
  externalTrafficPolicy: Cluster 
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-master
  namespace: mysql
spec:
  serviceName: "mysql-master-svc"
  replicas: 1
  selector: 
    matchLabels: 
      app: mysql-master
  template:
    metadata:
      labels:
        app: mysql-master
    spec:
      containers:
      - name: mysql-master
        image: mysql:8.0.20
        ports:
        - containerPort: 3306
          name: master-port
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "root"
        - name: TZ
          value: "Asia/Shanghai"
        volumeMounts:                           
        - name: mycnf
          mountPath: /etc/mysql/my.cnf
          subPath: my.cnf
        - name: mysql-master-data
          mountPath: /var/lib/mysql 
      volumes:
      - name: mycnf
        configMap:                                
          name: mysql-master-config
  volumeClaimTemplates:
    - metadata:
        name: mysql-master-data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: mysql-local-storage
        resources:
          requests:
            storage: 5Gi
kubectl apply -f mysql-master.yml

查看 pod

kubectl get pods -n mysql

4. 部署 MySQL 從節(jié)點:

vi mysql-slave.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-slave-config
  namespace: mysql
  labels:
    app: mysql-slave-config
data:
  my.cnf: |+     
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    lower_case_table_names=1
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # 主從同步
    server-id = 2
    log-bin = mysql-bin
    sync_binlog = 1
    binlog_checksum = none
    binlog_format = mixed
    slave-skip-errors = all
    event_scheduler = 1
    max_allowed_packet = 64M
    read-only=1
    # Custom config should go here
    !includedir /etc/mysql/conf.d/
---
# headless service 
apiVersion: v1
kind: Service
metadata:
  name: mysql-slave-svc
  namespace: mysql
  labels:
    app: mysql-slave-svc
spec:
  clusterIP: None
  ports:
  - name: slave-port
    port: 3306
  selector:
    app: mysql-slave
---
# NodePort service 
apiVersion: v1
kind: Service
metadata:
  name: mysql-slave-nodeport
  namespace: mysql
  labels:
    app: mysql-slave-nodeport
spec:
  clusterIP: 
  ports:
  - name: slave-port
    port: 3306
    nodePort: 31307
    targetPort: 3306
  selector:
    app: mysql-slave
  type: NodePort
  target-port:
  externalTrafficPolicy: Cluster 
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-slave
  namespace: mysql
spec:
  serviceName: "mysql-slave-svc"
  replicas: 1
  selector: 
    matchLabels: 
      app: mysql-slave
  template:
    metadata:
      labels:
        app: mysql-slave
    spec:
      containers:
      - name: mysql-slave
        image: mysql:8.0.20
        ports:
        - containerPort: 3306
          name: slave-port
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "root"
        - name: TZ
          value: "Asia/Shanghai"
        volumeMounts:                           
        - name: mycnf
          mountPath: /etc/mysql/my.cnf
          subPath: my.cnf
        - name: mysql-slave-data
          mountPath: /var/lib/mysql 
      volumes:
      - name: mycnf
        configMap:                                
          name: mysql-slave-config
  volumeClaimTemplates:
    - metadata:
        name: mysql-slave-data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: mysql-local-storage
        resources:
          requests:
            storage: 5Gi
kubectl apply -f mysql-slave.yml

查看 pod :

kubectl get pods -n mysql

二、主從配置

主節(jié)點配置

可以在外面使用 MySQL 客戶端連接 mysql-master ,注意換成你的 k8s nodel ip :

mysql -h 192.168.40.12 -P 31306  -u root -proot

查看當前 master 狀態(tài):

show master status;

注意這里查詢出來的 FilePosition 下面主從復(fù)制時會用到。

為從節(jié)點創(chuàng)建一個同步用戶:

CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'replica123';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

從節(jié)點配置

在外面使用 MySQL 客戶端連接 mysql-master ,注意換成你的 k8s nodel ip :

mysql -h 192.168.40.12 -P 31307  -u root -proot

同步指向主節(jié)點:

CHANGE MASTER TO MASTER_HOST='mysql-master-svc',MASTER_USER='replica',MASTER_PASSWORD='replica123',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=152,MASTER_PORT=3306;

注意這里的 MASTER_HOST 指向的是主節(jié)點的 Service

啟動同步進程:

start slave;

查看同步狀態(tài):

show slave status\G

看到 Slave_IO_RunningSlave_SQL_Running 都為 Yes 則表示啟動成功。

三、主從測試

首先在主節(jié)點創(chuàng)建數(shù)據(jù)庫 testdb:

create database testdb;

然后在從節(jié)點查看數(shù)據(jù)庫:

show databases;

可以正常查到主節(jié)點創(chuàng)建的數(shù)據(jù)庫。

然后在主節(jié)點創(chuàng)建測試表:

use testdb;
create table `test` (
  `id` int not null auto_increment,
  `name` varchar(255) default null,
  primary key (`id`)
) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_0900_ai_ci;

接著在從節(jié)點查看表:

use testdb;
show tables;

可以正??吹絼?chuàng)建的表。

然后在主節(jié)點寫入一條測試數(shù)據(jù):

insert into test(name) values('小明');

然后到從節(jié)點查看表數(shù)據(jù):

select * from test;

可以正常查到寫入的數(shù)據(jù)。

到此這篇關(guān)于K8s 部署 MySQL 8.0.20 主從復(fù)制結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)MySQL 8.0.20 主從復(fù)制結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL的鎖機制使用詳解

    MySQL的鎖機制使用詳解

    這篇文章主要介紹了MySQL的鎖機制使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • mysql啟動時出現(xiàn)ERROR 2003 (HY000)問題的解決方法

    mysql啟動時出現(xiàn)ERROR 2003 (HY000)問題的解決方法

    這篇文章主要為大家詳細介紹了mysql啟動時出現(xiàn)ERROR 2003 (HY000問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • mysql 5.7.11 winx64安裝配置方法圖文教程

    mysql 5.7.11 winx64安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.7.11winx64安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-07-07
  • The MySQL server is running with the --read-only option so it cannot execute this statement

    The MySQL server is running with the --read-only option so i

    1209 - The MySQL server is running with the --read-only option so it cannot execute this statement
    2020-08-08
  • Ubuntu中遠程連接Mysql數(shù)據(jù)庫的詳細圖文教程

    Ubuntu中遠程連接Mysql數(shù)據(jù)庫的詳細圖文教程

    Ubuntu是一個以桌面應(yīng)用為主的Linux發(fā)行版操作系統(tǒng),這篇文章主要為大家詳細介紹了Ubuntu中遠程連接Mysql數(shù)據(jù)庫的詳細圖文教程,有需要的小伙伴可以參考下
    2025-04-04
  • MYSQL數(shù)據(jù)表基本操作之創(chuàng)建+查看+修改+刪除操作方法

    MYSQL數(shù)據(jù)表基本操作之創(chuàng)建+查看+修改+刪除操作方法

    本文將介紹如何在MySQL數(shù)據(jù)庫中進行數(shù)據(jù)表的創(chuàng)建、查看、修改和刪除操作,并討論一些常見的注意事項及防止誤操作的策略,通過這些基礎(chǔ)操作,您將能夠更高效地進行數(shù)據(jù)庫設(shè)計和管理工作,感興趣的朋友一起看看吧
    2025-04-04
  • MySQL數(shù)據(jù)目錄遷移的完整過程

    MySQL數(shù)據(jù)目錄遷移的完整過程

    文章詳細介紹了將MySQL數(shù)據(jù)目錄遷移到新硬盤的整個過程,包括新硬盤掛載、創(chuàng)建新的數(shù)據(jù)目錄、遷移數(shù)據(jù)(推薦使用兩遍rsync方案)、修改MySQL配置文件和重啟驗證等步驟,需要的朋友可以參考下
    2025-12-12
  • Mysql字符集和排序規(guī)則詳解

    Mysql字符集和排序規(guī)則詳解

    這篇文章主要介紹了Mysql字符集和排序規(guī)則詳解,在mysql中存儲的是字符串數(shù)據(jù),那么這些數(shù)據(jù)到底在Mysql中如何存儲呢?這就涉及到字符集的概念,接下來我們一起進入文章學(xué)習(xí)詳細內(nèi)容介紹吧
    2022-09-09
  • Docker Dockerfile構(gòu)建MySQL并初始化數(shù)據(jù)方式

    Docker Dockerfile構(gòu)建MySQL并初始化數(shù)據(jù)方式

    這篇文章主要介紹了Docker Dockerfile構(gòu)建MySQL并初始化數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySQL備份數(shù)據(jù)庫幾種常見的方法

    MySQL備份數(shù)據(jù)庫幾種常見的方法

    MySQL備份數(shù)據(jù)庫是指將MySQL數(shù)據(jù)庫中的數(shù)據(jù)進行備份,以便在數(shù)據(jù)丟失或損壞時進行恢復(fù),這篇文章主要介紹了MySQL備份數(shù)據(jù)庫幾種常見的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-06-06

最新評論

高邑县| 台江县| 城口县| 闵行区| 郧西县| 柳江县| 密云县| 保亭| 抚州市| 尉氏县| 曲麻莱县| 永嘉县| 神池县| 治多县| 武山县| 共和县| 合江县| 望奎县| 墨脱县| 新建县| 克拉玛依市| 汉川市| 柳林县| 崇州市| 泽州县| 沈丘县| 海淀区| 秦安县| 北宁市| 棋牌| 利津县| 巩留县| 益阳市| 介休市| 巫溪县| 枣强县| 太仓市| 大余县| 沙坪坝区| 大城县| 进贤县|