亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、K8s 部署 MySQL

安裝規(guī)劃

組件replicas類型
mysql-master1StatefulSet
mysql-slave1StatefulSet

使用 k8s 版本為:v1.18.0

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

安裝 OpenEBS

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

驗(yàn)證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)建一個(gè)默認(rèn)的存儲(chǔ)卷:

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é)點(diǎn):

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é)點(diǎn):

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é)點(diǎn)配置

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

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

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

show master status;

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

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

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

從節(jié)點(diǎn)配置

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

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

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

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é)點(diǎn)的 Service

啟動(dòng)同步進(jìn)程:

start slave;

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

show slave status\G

看到 Slave_IO_RunningSlave_SQL_Running 都為 Yes 則表示啟動(dòng)成功。

三、主從測(cè)試

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

create database testdb;

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

show databases;

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

然后在主節(jié)點(diǎn)創(chuàng)建測(cè)試表:

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é)點(diǎn)查看表:

use testdb;
show tables;

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

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

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

然后到從節(jié)點(diǎn)查看表數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL 自定義變量的概念及特點(diǎn)

    MySQL 自定義變量的概念及特點(diǎn)

    MySQL 是可以自定義臨時(shí)變量的,而臨時(shí)變量在做查詢優(yōu)化和靜態(tài)查詢分析時(shí)十分有用。而實(shí)際上很少有人記得 MySQL 的自定義變量。本篇文章講述 MySQL 的自定義變量的概念及特點(diǎn)。
    2021-05-05
  • mysql密碼過期導(dǎo)致連接不上mysql

    mysql密碼過期導(dǎo)致連接不上mysql

    mysql密碼過期了,今天遇到了連接mysql,總是連接不上去,下面有兩種錯(cuò)誤現(xiàn)象,有類似問題的朋友可以參考看看,或許對(duì)你有所幫助
    2013-05-05
  • MySQL數(shù)據(jù)庫(kù)下用戶及用戶權(quán)限配置

    MySQL數(shù)據(jù)庫(kù)下用戶及用戶權(quán)限配置

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)下用戶及用戶權(quán)限配置的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 一臺(tái)服務(wù)器部署兩個(gè)獨(dú)立的mysql數(shù)據(jù)庫(kù)操作實(shí)例

    一臺(tái)服務(wù)器部署兩個(gè)獨(dú)立的mysql數(shù)據(jù)庫(kù)操作實(shí)例

    這篇文章主要給大家介紹了關(guān)于一臺(tái)服務(wù)器部署兩個(gè)獨(dú)立的mysql數(shù)據(jù)庫(kù)的相關(guān)資料,同一臺(tái)服務(wù)器裝兩個(gè)數(shù)據(jù)庫(kù),可以通過虛擬化技術(shù)實(shí)現(xiàn),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • MySQL中冗余和重復(fù)索引的區(qū)別說明

    MySQL中冗余和重復(fù)索引的區(qū)別說明

    這篇文章主要介紹了MySQL中冗余和重復(fù)索引的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • MySQL圖形化管理工具Navicat安裝步驟

    MySQL圖形化管理工具Navicat安裝步驟

    大家好,本篇文章主要講的是MySQL圖形化管理工具Navicat安裝步驟,感興趣的同學(xué)趕快來看看吧,對(duì)你有幫助的話記得收藏一下哦
    2021-12-12
  • MySQL中JOIN連接的基本用法實(shí)例

    MySQL中JOIN連接的基本用法實(shí)例

    大家對(duì)join應(yīng)該都不會(huì)陌生,join可以將兩個(gè)表連接起來,下面這篇文章主要給大家介紹了關(guān)于MySQL中JOIN連接用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 解決Windows10下mysql5.5數(shù)據(jù)庫(kù)命令行中文亂碼問題

    解決Windows10下mysql5.5數(shù)據(jù)庫(kù)命令行中文亂碼問題

    重置系統(tǒng)后,很久之前安裝的MySQL數(shù)據(jù)庫(kù)出現(xiàn)了控制臺(tái)查詢中文亂碼問題,時(shí)間太久早已經(jīng)不記得怎么設(shè)置了。下面通過本文給大家分享Windows10下解決MySQL5.5數(shù)據(jù)庫(kù)命令行中文亂碼問題,一起看看吧
    2017-07-07
  • mysql函數(shù)split功能實(shí)現(xiàn)

    mysql函數(shù)split功能實(shí)現(xiàn)

    mysql 5.* 的版本現(xiàn)在沒有split 函數(shù),但有些地方會(huì)用,在這里就簡(jiǎn)單記錄一下
    2012-09-09
  • Redis什么是熱Key問題以及如何解決熱Key問題

    Redis什么是熱Key問題以及如何解決熱Key問題

    這篇文章主要介紹了Redis什么是熱Key問題以及如何解決熱Key問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論