关于k8s环境部署mysql主从的问题

吾爱主题 阅读:175 2024-04-01 23:23:27 评论:0

一、通过yaml部署mysql

1、mysql-configmap.yaml

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: v1 kind: ConfigMap metadata:    name: mysql    namespace: mysql    labels:      app: mysql data:    master.cnf: |      # Apply this config only on the master.      [mysqld]      log-bin    slave.cnf: |      # Apply this config only on slaves.      [mysqld]      super- read -only

2、mysql-service.yaml

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # Headless service for stable DNS entries of StatefulSet members. apiVersion: v1 kind: Service metadata:    name: mysql    namespace: mysql    labels:      app: mysql spec:    ports:    - name: mysql      port: 3306    clusterIP: None    selector:      app: mysql --- # Client service for connecting to any MySQL instance for reads. # For writes, you must instead connect to the master: mysql-0.mysql. apiVersion: v1 kind: Service metadata:    name: mysql- read    namespace: mysql    labels:      app: mysql spec:    ports:    - name: mysql      port: 3306    selector:      app: mysql

3、mysql-statefulset.yaml

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 apiVersion: apps /v1 kind: StatefulSet metadata:    name: mysql    namespace: mysql spec:    selector:      matchLabels:        app: mysql    serviceName: mysql    replicas: 3    template:      metadata:        labels:          app: mysql      spec:        tolerations:        - effect: NoSchedule          operator: Exists        affinity:          nodeAffinity:            requiredDuringSchedulingIgnoredDuringExecution:              nodeSelectorTerms: # 调度指定标签节点                - matchExpressions:                    - key: node-role.kubernetes.io /compute                      operator: In                      values:                      - dedicated-middleware        initContainers:        - name: init-mysql          image: mysql:5.7.35          command :          - bash          - "-c"          - |            set -ex            # Generate mysql server-id from pod ordinal index.            [[ ` hostname ` =~ -([0-9]+)$ ]] || exit 1            ordinal=${BASH_REMATCH[1]}            echo [mysqld] > /mnt/conf .d /server-id .cnf            # Add an offset to avoid reserved server-id=0 value.            echo server- id =$((100 + $ordinal)) >> /mnt/conf .d /server-id .cnf            # Copy appropriate conf.d files from config-map to emptyDir.            if [[ $ordinal - eq 0 ]]; then              cp /mnt/config-map/master .cnf /mnt/conf .d/            else              cp /mnt/config-map/slave .cnf /mnt/conf .d/            fi                   volumeMounts:          - name: conf            mountPath: /mnt/conf .d          - name: config-map            mountPath: /mnt/config-map        - name: clone-mysql          image: registry.cn-shanghai.aliyuncs.com /soulchild/xtrabackup :2.4          command :          - bash          - "-c"          - |            set -ex            # Skip the clone if data already exists.            [[ -d /var/lib/mysql/mysql ]] && exit 0            # Skip the clone on master (ordinal index 0).            [[ ` hostname ` =~ -([0-9]+)$ ]] || exit 1            ordinal=${BASH_REMATCH[1]}            [[ $ordinal - eq 0 ]] && exit 0            # Clone data from previous peer.            ncat --recv-only mysql-$(($ordinal-1)).mysql 3307 | xbstream -x -C /var/lib/mysql            # Prepare the backup.            xtrabackup --prepare --target- dir = /var/lib/mysql                   volumeMounts:          - name: data            mountPath: /var/lib/mysql            subPath: mysql          - name: conf            mountPath: /etc/mysql/conf .d        containers:        - name: mysql          image: mysql:5.7.35          env :          - name: MYSQL_ALLOW_EMPTY_PASSWORD            value: "1"          ports:          - name: mysql            containerPort: 3306          volumeMounts:          - name: data            mountPath: /var/lib/mysql            subPath: mysql          - name: conf            mountPath: /etc/mysql/conf .d          resources:            requests:              cpu: 500m              memory: 1Gi          livenessProbe:            exec :              command : [ "mysqladmin" , "ping" ]            initialDelaySeconds: 30            periodSeconds: 10            timeoutSeconds: 5          readinessProbe:            exec :              # Check we can execute queries over TCP (skip-networking is off).              command : [ "mysql" , "-h" , "127.0.0.1" , "-e" , "SELECT 1" ]            initialDelaySeconds: 5            periodSeconds: 2            timeoutSeconds: 1        - name: xtrabackup          image: registry.cn-shanghai.aliyuncs.com /soulchild/xtrabackup :2.4          ports:          - name: xtrabackup            containerPort: 3307          command :          - bash          - "-c"          - |            set -ex            cd /var/lib/mysql              # Determine binlog position of cloned data, if any.            if [[ -f xtrabackup_slave_info && "x$(<xtrabackup_slave_info)" != "x" ]]; then              # XtraBackup already generated a partial "CHANGE MASTER TO" query              # because we're cloning from an existing slave. (Need to remove the tailing semicolon!)              cat xtrabackup_slave_info | sed -E 's/;$//g' > change_master_to.sql. in              # Ignore xtrabackup_binlog_info in this case (it's useless).              rm -f xtrabackup_slave_info xtrabackup_binlog_info            elif [[ -f xtrabackup_binlog_info ]]; then              # We're cloning directly from master. Parse binlog position.              [[ ` cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1              rm -f xtrabackup_binlog_info xtrabackup_slave_info              echo "CHANGE MASTER TO MASTER_LOG_FILE= '${BASH_REMATCH[1]}' ,\                    MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql. in            fi              # Check if we need to complete a clone by starting replication.            if [[ -f change_master_to.sql. in ]]; then              echo "Waiting for mysqld to be ready (accepting connections)"              until mysql -h 127.0.0.1 -e "SELECT 1" ; do sleep 1; done                echo "Initializing replication from clone position"              mysql -h 127.0.0.1 \                    -e "$(<change_master_to.sql. in ), \                            MASTER_HOST= 'mysql-0.mysql' , \                            MASTER_USER= 'root' , \                            MASTER_PASSWORD= '' , \                            MASTER_CONNECT_RETRY=10; \                          START SLAVE;" || exit 1              # In case of container restart, attempt this at-most-once.              mv change_master_to.sql. in change_master_to.sql.orig            fi              # Start a server to send backups when requested by peers.            exec ncat --listen --keep- open --send-only --max-conns=1 3307 -c \              "xtrabackup --backup --slave-info --stream=xbstream --host=127.0.0.1 --user=root"                   volumeMounts:          - name: data            mountPath: /var/lib/mysql            subPath: mysql          - name: conf            mountPath: /etc/mysql/conf .d          resources:            requests:              cpu: 100m              memory: 100Mi        volumes:        - name: conf          emptyDir: {}        - name: config-map          configMap:            name: mysql    volumeClaimTemplates:    - metadata:        name: data      spec:        accessModes:        - ReadWriteOnce        resources:          requests:            storage: 30Gi

到此这篇关于k8s环境部署mysql主从的文章就介绍到这了,更多相关k8s部署mysql主从内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_33285112/article/details/123394989

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容