国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

mysql有狀態(tài)服務部署

ashe / 1972人閱讀

摘要:概述本文對的集成使用做了部署和測試。我在上部署了一套集群,這個集群包含一個,兩個,的數(shù)據(jù)目錄通過數(shù)據(jù)卷掛載到鏡像上,當遷移時,能無法對接原有的數(shù)據(jù)。在主從數(shù)據(jù)同步方面,使用的是工具,本文不打算對其展開論述。

概述

本文對mysql cluster on kubernetes with ceph的集成使用做了部署和測試。

這個測試案例來源于kubernetes官網(wǎng),有興趣的話大家可以看下原文。

我在k8s上部署了一套mysql集群,這個集群包含一個master,兩個slave,mysql的數(shù)據(jù)目錄/var/lib/mysql通過數(shù)據(jù)卷pv掛載到ceph rbd鏡像上,當mysql pod遷移時,能無法對接原有的mysql數(shù)據(jù)。

在mysql主從數(shù)據(jù)同步方面,使用的是xtrabackup工具,本文不打算對其展開論述。

環(huán)境說明

kubernetes 1.8.2

mysql 5.7,一主兩從3個節(jié)點組成master-slave集群

ceph集群

創(chuàng)建ConfigMap
kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-configmap.yaml

# mysql-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: 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
創(chuàng)建Service
kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-services.yaml

# mysql-services.yaml
# Headless service for stable DNS entries of StatefulSet members.
apiVersion: v1
kind: Service
metadata:
  name: 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
  labels:
    app: mysql
spec:
  ports:
  - name: mysql
    port: 3306
  selector:
    app: mysql
創(chuàng)建Statefulset
kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-statefulset.yaml

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  replicas: 3
  template:
    metadata:
      labels:
        app: mysql
    spec:
      initContainers:
      - name: init-mysql
        image: 172.16.18.100:5000/mysql:5.7
        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: 172.16.18.100:5000/gcr.io/google-samples/xtrabackup:1.0
        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: 172.16.18.100:5000/mysql:5.7
        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
        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: 172.16.18.100:5000/gcr.io/google-samples/xtrabackup:1.0
        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 ]]; then
            # XtraBackup already generated a partial "CHANGE MASTER TO" query
            # because we"re cloning from an existing slave.
            mv xtrabackup_slave_info change_master_to.sql.in
            # Ignore xtrabackup_binlog_info in this case (it"s useless).
            rm -f 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 xtrabackup_binlog_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"
            # In case of container restart, attempt this at-most-once.
            mv change_master_to.sql.in change_master_to.sql.orig
            mysql -h 127.0.0.1 <
檢查創(chuàng)建的k8s api對象
檢查pv,pvc
[root@172 ~]# kubectl get pv,pvc | grep mysql
pv/pvc-2b89e760-d64a-11e7-9581-000c29f99475   10Gi       RWO            Delete           Bound     default/data-mysql-0   ceph                     1m
pv/pvc-41126384-d64a-11e7-9581-000c29f99475   10Gi       RWO            Delete           Bound     default/data-mysql-1   ceph                     39s
pv/pvc-5122d058-d64a-11e7-9581-000c29f99475   10Gi       RWO            Delete           Bound     default/data-mysql-2   ceph                     12s

pvc/data-mysql-0   Bound     pvc-2b89e760-d64a-11e7-9581-000c29f99475   10Gi       RWO            ceph           1m
pvc/data-mysql-1   Bound     pvc-41126384-d64a-11e7-9581-000c29f99475   10Gi       RWO            ceph           39s
pvc/data-mysql-2   Bound     pvc-5122d058-d64a-11e7-9581-000c29f99475   10Gi       RWO            ceph           12s
檢查pod
[root@172 ~]# kubectl get po -owide
NAME      READY     STATUS    RESTARTS   AGE       IP              NODE
mysql-0   2/2       Running   0          1m        192.168.5.188   172.16.20.10
mysql-1   2/2       Running   0          1m        192.168.3.24    172.16.20.12
mysql-2   2/2       Running   0          35s       192.168.2.165   172.16.20.11
測試 從mysql master寫入數(shù)據(jù)
kubectl run mysql-client --image=172.16.18.100:5000/mysql:5.7 -i --rm --restart=Never --
  mysql -h mysql-0.mysql <
從mysql slave讀取數(shù)據(jù)
kubectl run mysql-client --image=172.16.18.100:5000/mysql:5.7 -i -t --rm --restart=Never --
  mysql -h mysql-read -e "SELECT * FROM test.messages"
mysql master遷移

將節(jié)點172.16.20.10設(shè)置為維護狀態(tài)

kubectl cordon 172.16.20.10

[root@172 ~]# kubectl get no
NAME           STATUS                     ROLES     AGE       VERSION
172.16.20.10   Ready,SchedulingDisabled       3d        v1.8.2
172.16.20.11   Ready                          4d        v1.8.2
172.16.20.12   Ready                          4d        v1.8.2

遷移mysql-0

kubectl delete pod/mysql-0
[root@172 mysql]# kubectl get po -l app=mysql -owide -w 
NAME      READY     STATUS    RESTARTS   AGE       IP              NODE
mysql-0   2/2       Running   0          9m        192.168.5.188   172.16.20.10
mysql-1   2/2       Running   0          9m        192.168.3.24    172.16.20.12
mysql-2   2/2       Running   0          8m        192.168.2.165   172.16.20.11
mysql-0   2/2       Terminating   0         9m        192.168.5.188   172.16.20.10
mysql-0   1/2       Terminating   0         10m       192.168.5.188   172.16.20.10
mysql-0   0/2       Terminating   0         10m           172.16.20.10
mysql-0   0/2       Terminating   0         11m           172.16.20.10
mysql-0   0/2       Terminating   0         11m           172.16.20.10
mysql-0   0/2       Pending   0         0s            
mysql-0   0/2       Pending   0         0s            172.16.20.12
mysql-0   0/2       Init:0/2   0         0s            172.16.20.12
mysql-0   0/2       Init:1/2   0         3s        192.168.3.25   172.16.20.12
mysql-0   0/2       PodInitializing   0         4s        192.168.3.25   172.16.20.12
mysql-0   1/2       Running   0         5s        192.168.3.25   172.16.20.12
mysql-0   2/2       Running   0         9s        192.168.3.25   172.16.20.12

驗證數(shù)據(jù)

kubectl run mysql-client --image=172.16.18.100:5000/mysql:5.7 -i --rm --restart=Never --
mysql -h mysql-0.mysql -e "SELECT * FROM test.messages"

message
hello

可見,mysql-0從172.16.20.10遷移到172.16.20.12后,依然能夠查詢出遷移前寫入的數(shù)據(jù)。
恢復節(jié)點

[root@172 ~]# kubectl uncordon 172.16.20.10
node "172.16.20.10" uncordoned
master slave遷移
[root@172 ~]# kubectl get po -owide
NAME      READY     STATUS    RESTARTS   AGE       IP              NODE
mysql-0   2/2       Running   0          2h        192.168.3.25    172.16.20.12
mysql-1   2/2       Running   0          3h        192.168.3.24    172.16.20.12
mysql-2   2/2       Running   0          3h        192.168.2.165   172.16.20.11

遷移mysql-1

[root@172 ~]# kubectl delete pod/mysql-1
pod "mysql-1" deleted

mysql-1172.16.20.12遷到172.16.20.10

[root@172 ~]# kubectl get pod -l app=mysql -owide -w
NAME      READY     STATUS    RESTARTS   AGE       IP              NODE
mysql-0   2/2       Running   0          2h        192.168.3.25    172.16.20.12
mysql-1   2/2       Running   0          3h        192.168.3.24    172.16.20.12
mysql-2   2/2       Running   0          3h        192.168.2.165   172.16.20.11
mysql-1   2/2       Terminating   0         3h        192.168.3.24   172.16.20.12
mysql-1   0/2       Terminating   0         3h            172.16.20.12
mysql-1   0/2       Terminating   0         3h            172.16.20.12
mysql-1   0/2       Terminating   0         3h            172.16.20.12
mysql-1   0/2       Terminating   0         3h            172.16.20.12
mysql-1   0/2       Pending   0         0s            
mysql-1   0/2       Pending   0         0s            172.16.20.10
mysql-1   0/2       Init:0/2   0         0s            172.16.20.10
mysql-1   0/2       Init:1/2   0         2s        192.168.5.192   172.16.20.10
mysql-1   0/2       PodInitializing   0         3s        192.168.5.192   172.16.20.10
mysql-1   1/2       Running   0         4s        192.168.5.192   172.16.20.10
mysql-1   2/2       Running   0         8s        192.168.5.192   172.16.20.10

mysql-1驗證數(shù)據(jù)

kubectl run mysql-client --image=172.16.18.100:5000/mysql:5.7 -i --rm --restart=Never --
mysql -h mysql-1.mysql -e "SELECT * FROM test.messages"

message
hello
參考

https://kubernetes.io/docs/ta...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/32606.html

相關(guān)文章

  • 數(shù)人云工程師手記 | 雙劍合璧,分布式部署兩步走

    摘要:今天小數(shù)給大家?guī)淼氖菙?shù)人云工程師金燁的分享,有關(guān)于自動快速部署服務相關(guān)組件的一些實踐。當與相遇,雙劍合璧,一切變得如此簡單有趣。通過將服務注冊到來做健康檢查。 今天小數(shù)給大家?guī)淼氖菙?shù)人云工程師金燁的分享,有關(guān)于自動快速部署DCOS服務相關(guān)組件的一些實踐。當Ansible與Docker相遇,雙劍合璧,一切變得如此簡單有趣。 本次分享將包括以下內(nèi)容: 云平臺部署使用的服務、組件 Do...

    Jonathan Shieber 評論0 收藏0
  • 一鍵安裝LNMP或LAMP Web環(huán)境實現(xiàn)Linux服務部署 PHP MySQL Nginx/Ap

    摘要:目前,我們看到的老蔣采用的部署的環(huán)境,在鏡像中配置,于是我們會稱作為。有沒有一件傻瓜式安裝工具腳本呢這里老蔣要推薦的來自國內(nèi)比較老牌且一直更新維護的一鍵安裝包,我們可以較為直觀且無人值守的安裝需要的網(wǎng)站服務器環(huán)境。如今我們建站較多的還是會選擇VPS云服務器,很少會去選擇虛擬主機,固然前者有很多的優(yōu)點。不過相比虛擬主機不同的是,VPS云服務器需要我們自己配置WEB環(huán)境,而且我們較多的還是會選擇...

    IntMain 評論0 收藏0
  • 優(yōu)勢+工具+實踐=DevOps&Docker的企業(yè)級落地

    摘要:的設(shè)計模式的設(shè)計模式以持續(xù)集成持續(xù)測試持續(xù)交付和持續(xù)部署為中心,自動化協(xié)作和持續(xù)監(jiān)控是中使用的一些其他設(shè)計模式。持續(xù)集成持續(xù)集成是不斷地將源代碼集成到一個新的構(gòu)建或發(fā)布的過程,源代碼可以在本地存儲中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 識別二維碼報名活動 8月19日,來自微軟、數(shù)人...

    stormjun 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<