欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

K8s 如何部署 MySQL 8.0.20 主從復制結構

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

一、K8s 部署 MySQL

安裝規(guī)劃

組件replicas類型
mysql-master1StatefulSet
mysql-slave1StatefulSet

使用 k8s 版本為:v1.18.0 。

本次使用 OpenEBS 來作為存儲引擎,OpenEBS 是一個開源的、可擴展的存儲平臺,它提供了一種簡單的方式來創(chuàng)建和管理持久化存儲卷。它支持各種存儲后端,包括但不限于 ZFS、Btrfs、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 下面主從復制時會用到。

為從節(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ù)。

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

相關文章

  • MySQL 自定義變量的概念及特點

    MySQL 自定義變量的概念及特點

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

    mysql密碼過期導致連接不上mysql

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

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

    這篇文章主要介紹了MySQL數(shù)據(jù)庫下用戶及用戶權限配置的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • 一臺服務器部署兩個獨立的mysql數(shù)據(jù)庫操作實例

    一臺服務器部署兩個獨立的mysql數(shù)據(jù)庫操作實例

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

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

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

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

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

    MySQL中JOIN連接的基本用法實例

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

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

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

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

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

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

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

最新評論