国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql MySQL數(shù)據(jù)庫(kù)之日志管理

這篇具有很好參考價(jià)值的文章主要介紹了k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql MySQL數(shù)據(jù)庫(kù)之日志管理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?本文使用的是本機(jī)掛載數(shù)據(jù),這樣存在一個(gè)弊端沒(méi)有pvc掛載好?

重點(diǎn)來(lái)了:這種共享宿主機(jī)存儲(chǔ)的方法似乎可以解決Mysql數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)的場(chǎng)景,我們似乎可以萬(wàn)事大吉了!But,有的老鐵會(huì)問(wèn):如果我得宿主機(jī)掛了怎么辦?或者Pod沒(méi)有在上一次節(jié)點(diǎn)上拉起,而是在新的節(jié)點(diǎn)上拉起,那數(shù)據(jù)都不在一個(gè)宿主機(jī)上,還恢復(fù)個(gè)錘子!?聽(tīng)起來(lái)有點(diǎn)兒道理啊,確實(shí)存在這個(gè)問(wèn)題那怎么解決呢?還是那句話 :總有”好事者”替我們解決了這個(gè)問(wèn)題!

既然Host類型的持久化存儲(chǔ)無(wú)法解決節(jié)點(diǎn)宕機(jī)或者pod在另外的機(jī)器上拉起導(dǎo)致數(shù)據(jù)無(wú)法恢復(fù)的Bug,那我們就應(yīng)該思考一個(gè)問(wèn)題:既然我無(wú)法在宿主機(jī)持久化,那我在集群之外的服務(wù)器上存儲(chǔ)數(shù)據(jù),讓我的Pod關(guān)聯(lián)到這個(gè)數(shù)據(jù)存儲(chǔ)服務(wù)器上,同時(shí)我對(duì)這個(gè)數(shù)據(jù)存儲(chǔ)服務(wù)器做高可用,豈不美哉??此處應(yīng)該有掌聲,三分鐘!
想法很好,那我們來(lái)介紹一下K8S給我們的解決方案:?PersistentVolumes?簡(jiǎn)稱PV
PV?是什么?它是一種插件,它能夠支持多種數(shù)據(jù)存儲(chǔ)服務(wù)器,通過(guò)PV,我們能在K8S集群中,把我們的數(shù)據(jù)持久化到外部的服務(wù)器中。下圖是PV能夠支持的數(shù)據(jù)存儲(chǔ)服務(wù)類型

k8s分為有狀態(tài)和無(wú)狀態(tài)兩種創(chuàng)建pod方式,?有狀態(tài)保證了數(shù)據(jù)的持久化適合mysql,不會(huì)像無(wú)狀態(tài)那樣滾動(dòng)升級(jí),而是關(guān)閉舊的pod在新啟動(dòng)一個(gè)pod,保證了數(shù)據(jù)持久化

背景
K8S 中,由于ReplicaSet、ReplicationController、Deployment等這些控制器都是無(wú)狀態(tài)的,但是想要使用k8s來(lái)編排有狀態(tài)的服務(wù)如數(shù)據(jù)庫(kù)等,k8s 推出了面向有狀態(tài)服務(wù)的工作負(fù)載 StatefulSet。網(wǎng)絡(luò)持久化、存儲(chǔ)持久化,部署持久化有狀態(tài)服務(wù) 

定義 
無(wú)狀態(tài)服務(wù)(stateless service)對(duì)單次請(qǐng)求的處理,不依賴其他請(qǐng)求,也就是說(shuō),處理一次請(qǐng)求所需的全部信息,要么都包含在這個(gè)請(qǐng)求里,要么可以從外部獲取到(比如說(shuō)數(shù)據(jù)庫(kù)),服務(wù)器本身不存儲(chǔ)任何信息。

有狀態(tài)服務(wù)(stateful service)則相反,它會(huì)在自身保存一些數(shù)據(jù),先后的請(qǐng)求是有關(guān)聯(lián)的。

電商購(gòu)物為例,在商城里購(gòu)買一件商品。需要經(jīng)過(guò)放入購(gòu)物車、確認(rèn)訂單、付款等多個(gè)步驟。由于HTTP協(xié)議本身是無(wú)狀態(tài)的,所以為了實(shí)現(xiàn)有狀態(tài)服務(wù),就需要通過(guò)一些額外的方案。比如最常見(jiàn)的session,將用戶挑選的商品(購(gòu)物車),保存到session中,當(dāng)付款的時(shí)候,再?gòu)馁?gòu)物車?yán)锶〕錾唐沸畔ⅰ?
二、無(wú)狀態(tài)服務(wù) 和 有狀態(tài)服務(wù) 
無(wú)狀態(tài)服務(wù)特點(diǎn) 
1、數(shù)據(jù)方面:無(wú)狀態(tài)服務(wù)不會(huì)在本地存儲(chǔ)持久化數(shù)據(jù).多個(gè)實(shí)例可以共享相同的持久化數(shù)據(jù)

2、結(jié)果方面:多個(gè)服務(wù)實(shí)例對(duì)于同一個(gè)用戶請(qǐng)求的響應(yīng)結(jié)果是完全一致的

3、關(guān)系方面:這種多服務(wù)實(shí)例之間是沒(méi)有依賴關(guān)系

4、影響方面:在k8s控制器 中動(dòng)態(tài)啟停無(wú)狀態(tài)服務(wù)的pod并不會(huì)對(duì)其它的pod產(chǎn)生影響

5、示例方面:nginx實(shí)例,tomcat實(shí)例,web應(yīng)用

6、資源方面:相關(guān)的k8s資源有:ReplicaSet、ReplicationController、Deployment

7、創(chuàng)建方式:Deployment被設(shè)計(jì)用來(lái)管理無(wú)狀態(tài)服務(wù)的pod

每個(gè) pod完全一致,原因如下:

無(wú)狀態(tài)服務(wù)內(nèi)的多個(gè) Pod創(chuàng)建的順序是沒(méi)有順序的

無(wú)狀態(tài)服務(wù)內(nèi)的多個(gè)Pod的名稱是隨機(jī)的.pod被重新啟動(dòng)調(diào)度后,它的名稱與IP都會(huì)發(fā)生變化

無(wú)狀態(tài)服務(wù)內(nèi)的多個(gè)Pod背后是共享存儲(chǔ)的

8、擴(kuò)縮容方式:隨機(jī)縮容

由于是無(wú)狀態(tài)服務(wù),所以這些控制器創(chuàng)建的pod序號(hào)都是隨機(jī)值。并且在縮容也是隨機(jī),并不會(huì)明確縮容某一個(gè)pod。因?yàn)樗袑?shí)例得到的返回值都是一樣,所以縮容任何一個(gè)pod都可以。

有狀態(tài)服務(wù)介紹
1、數(shù)據(jù)方面:有狀態(tài)服務(wù)需要在本地存儲(chǔ)持久化數(shù)據(jù),典型的是分布式數(shù)據(jù)庫(kù)的應(yīng)

2、結(jié)果方面:實(shí)例之間,請(qǐng)求結(jié)果可能存在不一致

3、關(guān)系方面:分布式節(jié)點(diǎn)實(shí)例之間有依賴的拓?fù)潢P(guān)系.比如,主從關(guān)系.

4、影響方面:如果K8S停止分布式集群中任 一實(shí)例pod,就可能會(huì)導(dǎo)致數(shù)據(jù)丟失或者集群的crash

5、示例方面:mysql數(shù)據(jù)庫(kù)、kafka、zookeeper、Redis主從架構(gòu)

6、資源方面:statefulSet

7、創(chuàng)建方式:statefulSet管理

Stateful管理有狀態(tài)的應(yīng)用,Pod有如下特征:

唯一性:每個(gè)Pod會(huì)被分配一個(gè)唯一序號(hào).
順序性:Pod啟動(dòng),更新,銷毀是按順序進(jìn)行.
穩(wěn)定的網(wǎng)絡(luò)標(biāo)識(shí):Pod主機(jī)名,DNS地址不會(huì)隨著Pod被重新調(diào)度而發(fā)生變化.
穩(wěn)定的持久化存儲(chǔ):Pod被重新調(diào)度后,仍然能掛載原有的PV,從而保證了數(shù)據(jù)的完整性和一致性


有狀態(tài)的 pod是用來(lái)運(yùn)行有狀態(tài)應(yīng)用的,所以其在數(shù)據(jù)卷上存儲(chǔ)的數(shù)據(jù)非常重要,在 Statefulset 縮容時(shí)刪除這個(gè)聲明將是災(zāi)難性的,特別是對(duì)于 Statefulset 來(lái)說(shuō),縮容就像減少其 replicas 數(shù)值一樣簡(jiǎn)單?;谶@個(gè)原因,當(dāng)需要釋放特定的持久卷時(shí),需要手動(dòng)刪除對(duì)應(yīng)的持久卷聲明。
無(wú)狀態(tài)服務(wù)(Stateless Service):?
是指該服務(wù)運(yùn)行的實(shí)例不會(huì)在本地存儲(chǔ)需要持久化的數(shù)據(jù),并且多個(gè)實(shí)例對(duì)于同一個(gè)請(qǐng)求響應(yīng)的結(jié)果是完全一致的。這類服務(wù)在網(wǎng)易蜂巢云平臺(tái)創(chuàng)建后,借助k8s內(nèi)部的負(fù)載均衡,當(dāng)訪問(wèn)該服務(wù)的請(qǐng)求到達(dá)服務(wù)一端后,負(fù)載均衡會(huì)隨機(jī)找到一個(gè)實(shí)例來(lái)完成該請(qǐng)求的響應(yīng)(目前為輪詢)。這類服務(wù)的實(shí)例可能會(huì)因?yàn)橐恍┰蛲V够蛘咧匦聞?chuàng)建(如擴(kuò)容時(shí)),這時(shí),這些停止的實(shí)例里的所有信息(除日志和監(jiān)控?cái)?shù)據(jù)外)都將丟失(重啟容器即會(huì)丟失)。因此如果您的容器實(shí)例里需要保留重要的信息,并希望隨時(shí)可以備份以便于以后可以恢復(fù)的話,那么建議您創(chuàng)建有狀態(tài)服務(wù)。

有狀態(tài)服務(wù)(Stateful Service):?
是指該服務(wù)的實(shí)例可以將一部分?jǐn)?shù)據(jù)隨時(shí)進(jìn)行備份,并且在創(chuàng)建一個(gè)新的有狀態(tài)服務(wù)時(shí),可以通過(guò)備份恢復(fù)這些數(shù)據(jù),以達(dá)到數(shù)據(jù)持久化的目的。有狀態(tài)服務(wù)只能有一個(gè)實(shí)例,因此不支持“自動(dòng)服務(wù)容量調(diào)節(jié)”。一般來(lái)說(shuō),數(shù)據(jù)庫(kù)服務(wù)或者需要在本地文件系統(tǒng)存儲(chǔ)配置文件或其它永久數(shù)據(jù)的應(yīng)用程序可以創(chuàng)建使用有狀態(tài)服務(wù)。要想創(chuàng)建有狀態(tài)服務(wù),必須滿足幾個(gè)前提:

待創(chuàng)建的服務(wù)鏡像(image)的Dockerfile中必須定義了存儲(chǔ)卷(Volume),因?yàn)橹挥写鎯?chǔ)卷所在目錄里的數(shù)據(jù)可以被備份?
創(chuàng)建服務(wù)時(shí),必須指定給該存儲(chǔ)卷分配的磁盤空間大小?
如果創(chuàng)建服務(wù)的同時(shí)需要從之前的一個(gè)備份里恢復(fù)數(shù)據(jù),那么還要指明該存儲(chǔ)卷用哪個(gè)備份恢復(fù)。

無(wú)狀態(tài)服務(wù)和有狀態(tài)服務(wù)主要有以下幾點(diǎn)區(qū)別:?
實(shí)例數(shù)量:無(wú)狀態(tài)服務(wù)可以有一個(gè)或多個(gè)實(shí)例,因此支持兩種服務(wù)容量調(diào)節(jié)模式;有狀態(tài)服務(wù)只能有一個(gè)實(shí)例,不允許創(chuàng)建多個(gè)實(shí)例,因此也不支持服務(wù)容量調(diào)節(jié)模式。?
存儲(chǔ)卷:無(wú)狀態(tài)服務(wù)可以有存儲(chǔ)卷,也可以沒(méi)有,即使有也無(wú)法備份存儲(chǔ)卷里面的數(shù)據(jù);有狀態(tài)服務(wù)必須要有存儲(chǔ)卷,并且在創(chuàng)建服務(wù)時(shí),必須指定給該存儲(chǔ)卷分配的磁盤空間大小。?
數(shù)據(jù)存儲(chǔ):無(wú)狀態(tài)服務(wù)運(yùn)行過(guò)程中的所有數(shù)據(jù)(除日志和監(jiān)控?cái)?shù)據(jù))都存在容器實(shí)例里的文件系統(tǒng)中,如果實(shí)例停止或者刪除,則這些數(shù)據(jù)都將丟失,無(wú)法找回;而對(duì)于有狀態(tài)服務(wù),凡是已經(jīng)掛載了存儲(chǔ)卷的目錄下的文件內(nèi)容都可以隨時(shí)進(jìn)行備份,備份的數(shù)據(jù)可以下載,也可以用于恢復(fù)新的服務(wù)。但對(duì)于沒(méi)有掛載卷的目錄下的數(shù)據(jù),仍然是無(wú)法備份和保存的,如果實(shí)例停止或者刪除,這些非掛載卷里的文件內(nèi)容同樣會(huì)丟失

https://help.aliyun.com/document_detail/163545.html?? ? ?
在邊緣托管集群創(chuàng)建過(guò)程中,平臺(tái)會(huì)默認(rèn)為您創(chuàng)建至少一個(gè)ECS實(shí)例,并接入到集群管控。該實(shí)例主要用來(lái)部署云端管控應(yīng)用,也支持您自定義的云端管控應(yīng)用部署。通過(guò)默認(rèn)自帶node-role.alib
abacloud.com/addon: Effect: NoSchedule污點(diǎn)(Taints),來(lái)保證邊緣業(yè)務(wù)不會(huì)部署在云端管控節(jié)點(diǎn)。截止1.14.8-aliyunedge.1版本,中心管控節(jié)點(diǎn)上默認(rèn)安裝的管控應(yīng)用有:

? ? ?...
? ? ? nodeSelector:
? ? ? ? alibabacloud.com/is-edge-worker: 'false'
? ? ? ? beta.kubernetes.io/arch: amd64
? ? ? ? beta.kubernetes.io/os: linux
? ? ? tolerations:
? ? ? ? - effect: NoSchedule
? ? ? ? ? key: node-role.alibabacloud.com/addon
? ? ? ? ? operator: Exists
? ? ? ...

還可以去除污點(diǎn)然后在加上污點(diǎn),這樣期間部署的pod也不會(huì)被驅(qū)逐

批量添加污點(diǎn)

  1. 登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄中選擇集群。
  2. 在集群列表頁(yè)面中,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄中,選擇節(jié)點(diǎn)管理?>?節(jié)點(diǎn)。
  3. 在節(jié)點(diǎn)頁(yè)面右上角單擊標(biāo)簽與污點(diǎn)管理。
  4. 單擊污點(diǎn)頁(yè)簽,批量選擇節(jié)點(diǎn),單擊添加污點(diǎn)。
  5. 在彈出的對(duì)話框中設(shè)置名稱、值和Effect。

    Effect參數(shù)的說(shuō)明如下,更多信息,請(qǐng)參見(jiàn)污點(diǎn)和容忍度。

參數(shù)名稱	參數(shù)說(shuō)明
NoSchedule	如果污點(diǎn)中存在至少一個(gè)Effect值為NoSchedule的污點(diǎn), 則系統(tǒng)不會(huì)將Pod分配到該節(jié)點(diǎn)。
NoExecute	任何不能忍受這個(gè)污點(diǎn)的Pod都會(huì)被驅(qū)逐,任何可以忍受這個(gè)污點(diǎn)的Pod都不會(huì)被驅(qū)逐。
PreferNoSchedule	系統(tǒng)會(huì)盡量避免將Pod調(diào)度到存在其不能容忍污點(diǎn)的節(jié)點(diǎn)上, 但這不是強(qiáng)制的。
node-role.alibabacloud.com/addon: effect: NoSchedule

?k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

例如追加這段話就是說(shuō)只運(yùn)行在管控節(jié)點(diǎn),不需要另外指定ip了

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
      nodeSelector:
        alibabacloud.com/is-edge-worker: 'false'
        beta.kubernetes.io/arch: amd64
        beta.kubernetes.io/os: linux
      tolerations:
        - effect: NoSchedule
          key: node-role.alibabacloud.com/addon
          operator: Exists

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

?在第一個(gè)spec后面加入一個(gè)serviceName可直接指定service

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis-cm
  namespace: database
spec:
  serviceName: redisdemo2
  replicas: 1
  selector:
    matchLabels:
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    configMap:
      name: myconfigmap

? ? configMap:
? ? ? ? name: myconfigmap? ? 名稱一定要比上面那個(gè)少兩格否則只能掛成臨時(shí)目錄

掛載格式

       volumeMounts:
        # 從configmap獲取的配置文件,掛載到指定文件中
        - name: conf
          mountPath: /conf/redis.conf
          subPath: redis.conf
        - name: data
          mountPath: /data/redis
        - name: logs
          mountPath: /logs
        # 時(shí)區(qū)設(shè)置
        - name: timezone
          mountPath: /etc/localtime              
      volumes:
      - name: conf
        # 配置文件采用configMap
        configMap:
          name: redis
          defaultMode: 0755
        # 日志采用hostPath卷
      - name: logs
        hostPath:
          type: DirectoryOrCreate 
          path: /logs
        # 時(shí)區(qū)定義
      - name: timezone                             
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
      - name: data
        hostPath:
          type: DirectoryOrCreate 
          path: /home

掛載nasPVC?

        volumeMounts:
          - name: pvc-nas
            mountPath: /data
      volumes:
        - name: pvc-nas
          persistentVolumeClaim:
            claimName: static-nas-pvc

?掛載云盤非vpc

    volumeMounts:
    - mountPath: /cache-test
      name: cache-volume
  volumes:
  - name: cache-volume
    csi:
      driver: diskplugin.csi.alibabacloud.com
      fsType: ext4
      volumeAttributes:
        volumeSize: "20"
        tags: "test:eci"

參考配置1

[root@k8s-master1 ~]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql #為該Deployment設(shè)置key為app,value為mysql的標(biāo)簽
  name: mysql
  namespace: test
spec:
  replicas: 1 #副本數(shù)量
  selector: #標(biāo)簽選擇器,與上面的標(biāo)簽共同作用
    matchLabels: #選擇包含標(biāo)簽app:nginx的資源
      app: mysql
  template: #這是選擇或創(chuàng)建的Pod的模板
    metadata: #Pod的元數(shù)據(jù)
      labels: #Pod的標(biāo)簽,上面的selector即選擇包含標(biāo)簽app:nginx的Pod
        app: mysql
    spec: #期望Pod實(shí)現(xiàn)的功能(即在pod中部署)
      containers: #生成container,與docker中的container是同一種
      - name: mysql
        image: mysql:5.7 #使用鏡像mysql: 創(chuàng)建container,該container默認(rèn)3306端口可訪問(wèn)
        ports:
        - containerPort: 3306  # 開(kāi)啟本容器的3306端口可訪問(wèn)
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: hjj123456   
        volumeMounts: #掛載持久存儲(chǔ)卷
        - name: mysql-data  #掛載設(shè)備的名字,與volumes[*].name 需要對(duì)應(yīng)
          mountPath: /var/lib/mysql  #掛載到容器的某個(gè)路徑下
        - name: mysql-dev-conf
          mountPath: /etc/mysql   
          
      volumes:
      - name: mysql-data  #和上面保持一致 這是本地的文件路徑,上面是容器內(nèi)部的路徑
        nfs:
          server: 10.0.19.129  #nfs的ip地址
          path: /opt/data/mysql/data  #此路徑需要實(shí)現(xiàn)創(chuàng)建
      - name: mysql-dev-conf
        nfs:
          server: 10.0.19.129
          name: /opt/data/mysql/cnf   #此路徑需要實(shí)現(xiàn)創(chuàng)建

參考配置2

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: plugins
  labels:
    app: mysql
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    lower_case_table_names = 1
    log-error=/var/lib/mysql/mysql_error.log
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql-svc
  namespace: plugins
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30021
      protocol: TCP
      targetPort: 3306
  selector:
    app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: plugins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - args:
            - --datadir
            - /var/lib/mysql/datadir
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: root
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: user
          image: mysql:5.7
          name: mysql-container
          ports:
            - containerPort: 3306
              name: dbapi
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: mysql-storage
            - name: config
              mountPath: /etc/mysql/conf.d/my.cnf
              subPath: my.cnf
      volumes:
        - name: mysql-storage
          persistentVolumeClaim:
            claimName: nfs-plugins
        - name: config
          configMap:
            name: mysql-config
        - name: localtime
          hostPath:
            type: File
            path: /etc/localtime

自己配置 ,???nodeName: gem-yxyw-t-c02,分配主機(jī)的時(shí)候需要查看主機(jī)名

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

需要說(shuō)明的是strategy部分,用于定義deployment的升級(jí)策略。
spec.strategy:用于定義升級(jí)的策略
spec.strategy.type:定義使用何種方式升級(jí)。一種是RollingUpdate,即滾動(dòng)升級(jí)。另一種方式為Recreate。即先將所有舊的Pod停止,然后再啟動(dòng)新的pod。默認(rèn)策略即為RollingUpdate

#這個(gè)升級(jí)策略很重要,之前沒(méi)有指定用的是默認(rèn)的滾動(dòng)升級(jí)RollingUpdate,會(huì)導(dǎo)致更新的pod無(wú)法啟動(dòng),因?yàn)檫@種模式之前的容器沒(méi)有停止還占用了掛載的宿主機(jī)目錄,改成將Recreate模式會(huì)將之前的容器停止,在新啟動(dòng)一個(gè)宿主機(jī)掛載目錄就沒(méi)有被占用會(huì)直接成功,這也導(dǎo)致重啟的時(shí)候會(huì)有一段停止時(shí)間

但是如果定義為無(wú)狀態(tài)就不需要指定升級(jí)策略

kind: StatefulSet? ? ?#有狀態(tài)

kind: Deployment? ?#無(wú)狀態(tài)

實(shí)際配置1?

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysqldb01-config
  labels:
    app: gem-sale-t-db01
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    lower_case_table_names = 1
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: gem-sale-t-db01
  name: gem-sale-t-db01
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30001
      protocol: TCP
      targetPort: 3306
  selector:
    app: gem-sale-t-db01

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: gem-sale-t-db01 
  name: gem-sale-t-db01
spec:
  serviceName: gem-sale-t-db01
  replicas: 1
  selector:
    matchLabels:
      app: gem-sale-t-db01
  strategy: #更新策略
    type: Recreate # 策略類型 .spec.strategy.type 可以是 “Recreate” 或 “RollingUpdate”?!癛ollingUpdate” 是默認(rèn)值。
    Recreate: #.spec.strategy 策略指定用于用新 Pod 替換舊 Pod 的策略。 .spec.strategy.type 可以是 “Recreate” 或 “RollingUpdate”。“RollingUpdate” 是默認(rèn)值。
      maxSurge: 25% #最大峰值
      maxUnavailable: 25% #最大不可用
  template:
    metadata:
      labels:
        app: gem-sale-t-db01
    spec:
      containers:
      - name: gem-sale-t-db01
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: 3!y5cD&%2OWz 
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:  
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
      volumes:
        - name: config
          configMap:
            name: mysqldb01-config
      nodeName: gem-yxyw-t-c02

?實(shí)際配置2? ?mysql需要持久化推薦使用這個(gè)配置,這個(gè)不要加升級(jí)測(cè)略

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: gem-nacos-t-db
  labels:
    app: gem-nacos-t-db
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    log-error=/var/lib/mysql/mysql_error.log
    lower_case_table_names = 1
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: gem-nacos-t-db
  name: gem-nacos-t-db
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30005
      protocol: TCP
      targetPort: 3306
  selector:
    app: gem-nacos-t-db
 
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: gem-nacos-t-db 
  name: gem-nacos-t-db
spec:
  serviceName: gem-nacos-t-db
  replicas: 1
  selector:
    matchLabels:
      app: gem-nacos-t-db
  template:
    metadata:
      labels:
        app: gem-nacos-t-db
    spec:
      containers:
      - name: gem-nacos-t-db
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: Gd*(53#SALE 
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:  
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
        - name: timezone
          mountPath: /etc/localtime
        - name: config 
          mountPath:  /etc/mysql/conf.d/my.cnf 
          subPath: my.cnf 		  
      volumes:
      - name: config 
        configMap: 
          name: gem-nacos-t-db
      - name: timezone                             
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
      - name: mysql-data
        hostPath:
          type: DirectoryOrCreate 
          path: /data/mysql/gem-nacos-t-db/mysql-data
      nodeName: gem-yxyw-t-c02

實(shí)際配置3,local掛載,在k8s上創(chuàng)建pv和pvc

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gem-yx-d-db1
  namespace: yx-dev
spec:
  capacity:
    storage: 50Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: gem-yx-d-db1
  local:
    path: /data/mysql/gem-yx-d-db1/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - gem-yxyw-t-c02
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gem-yx-d-db1
  namespace: yx-dev
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 50Gi
  storageClassName: gem-yx-d-db1

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: gem-yx-d-db1
  labels:
    app: gem-yx-d-db1
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    log-error=/var/lib/mysql/mysql_error.log
    lower_case_table_names = 1
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: gem-yx-d-db1
  name: gem-yx-d-db1
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30003
      protocol: TCP
      targetPort: 3306
  selector:
    app: gem-yx-d-db1
 
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: gem-yx-d-db1 
  name: gem-yx-d-db1
spec:
  serviceName: gem-yx-d-db1
  replicas: 1
  selector:
    matchLabels:
      app: gem-yx-d-db1
  template:
    metadata:
      labels:
        app: gem-yx-d-db1
    spec:
      containers:
      - name: gem-yx-d-db1
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: Gd*(53#SALE 
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:  
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
        - name: timezone
          mountPath: /etc/localtime
        - name: config 
          mountPath:  /etc/mysql/conf.d/my.cnf 
          subPath: my.cnf 		  
      volumes:
      - name: config 
        configMap: 
          name: gem-yx-d-db1
      - name: timezone                             
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
      - name: mysql-data
        persistentVolumeClaim:
          claimName: gem-yx-d-db1

?mysql8.0部署,親測(cè)試驗(yàn)證可用,跟mysql5.7配置不同

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: gem-yx-t-db2
  labels:
    app: gem-yx-t-db2
data:
  # my.cnf代表著mysql8的配置文件名稱
  my.cnf: |
    [mysql]
    # mysql客戶端默認(rèn)字符集
    default-character-set=utf8
    [mysqld]
    # 數(shù)據(jù)庫(kù)文件位置
    datadir=/var/lib/mysql
    # 允許最大連接數(shù)
    max_connections=1000
    # innodb的dml操作的行級(jí)鎖的等待時(shí)間
    innodb_lock_wait_timeout=500
    # 設(shè)置mysql服務(wù)端默認(rèn)字符集
    character-set-server=utf8mb4
    # 默認(rèn)創(chuàng)建新數(shù)據(jù)的新建排序規(guī)則
    collation-server=utf8mb4_general_ci
    # 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎
    default-storage-engine=INNODB
    # 緩存大小
    sort_buffer_size=256MB
    # 大小寫(xiě)敏感配置項(xiàng)0為敏感,1為不敏感
    lower_case_table_names = 1 #不區(qū)分大小寫(xiě)
    lower_case_table_names=1
    # 選擇正8區(qū)
    default-time-zone='+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: gem-yx-t-db2
  name: gem-yx-t-db2
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30002
      protocol: TCP
      targetPort: 3306
  selector:
    app: gem-yx-t-db2
 
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: gem-yx-t-db2 
  name: gem-yx-t-db2
spec:
  serviceName: gem-yx-t-db2
  replicas: 1
  selector:
    matchLabels:
      app: gem-yx-t-db2
  template:
    metadata:
      labels:
        app: gem-yx-t-db2
    spec:
      containers:
      - name: gem-yx-t-db2
        image: mysql:8.0.19
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: 3!y5cD&%2OWz 
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:  
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
        - name: timezone
          mountPath: /etc/localtime
        - name: config 
          mountPath:  /etc/mysql/conf.d/my.cnf 
          subPath: my.cnf 		  
      volumes:
      - name: config 
        configMap: 
          name: gem-yx-t-db2
      - name: timezone                             
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
      - name: mysql-data
        hostPath:
          type: DirectoryOrCreate 
          path: /data/mysql/gem-yx-t-db2/mysql-data
      nodeName: gem-yxyw-t-c02

?mkdir -p /data/mysql/GEM-SALE-T-DB01/mysql-data

mkdir -p /data/mysql/GEM-SALE-T-DB02/mysql-data

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

參數(shù)簡(jiǎn)介:

show variables like '%max_connections%';? ? #查數(shù)據(jù)庫(kù)最大連接數(shù)確定配置是否生效

  • ports: 配置鏡像映射端口。

  • env: 鏡像環(huán)境變量配置,其中 MYSQL_ROOT_PASSWORD 是 Mysql 鏡像用于配置 root 用戶默認(rèn)密碼變量。

  • resources: 配置 CPU、Memory 資源限制,可以通過(guò)配置該值來(lái)配置 Pod 的 QoS 級(jí)別。

  • livenessProbe: 配置存活探針,定時(shí)檢測(cè) Mysql 應(yīng)用運(yùn)行狀態(tài),如果檢測(cè)到 Mysql 掛掉將進(jìn)行重啟操作。

  • readinessProbe: 配置就緒探針,定時(shí)檢測(cè) Mysql 應(yīng)用啟動(dòng)狀態(tài),如果啟動(dòng)成功將允許流量涌入,啟動(dòng)失敗將進(jìn)行重啟操作。

  • command: 探針執(zhí)行探測(cè)時(shí)執(zhí)行的探測(cè)命令。

  • volumeMounts: 存儲(chǔ)卷掛載配置,用于鏡像內(nèi)存儲(chǔ)的掛載配置,與 volumes 中對(duì)于的 name 進(jìn)行綁定。

  • volumes: 存儲(chǔ)卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存儲(chǔ),需要配置 name 值與 VolumeMounts 進(jìn)行綁定。

  • 在鏡像內(nèi)部命令行中輸入 mysql 登錄命令,測(cè)試是否能夠正常登錄:

    $ mysql -h 10.36.21.220 -P 30336 --user=root --password=123456
    mysql -h 10.36.21.220 -P 30336 -uroot -p'123456'

導(dǎo)出導(dǎo)入數(shù)據(jù)庫(kù)

導(dǎo)出數(shù)據(jù)庫(kù)所有庫(kù)
mysqldump -h 127.0.0.1 -uroot -p"Gd*(53#SALE" -R -E --all-databases  >back.sql
導(dǎo)入數(shù)據(jù)庫(kù)所有庫(kù)
mysql -h 10.36.21.220 -P 30004 -uroot -p'3!y5cD&%2OWz' <back.sql

k8s的mysql的pod誤刪之后數(shù)據(jù)恢復(fù),

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

gem-sale-t-db04被刪除之后,掛載的數(shù)據(jù)卷還在/data/mysql/GEM-SALE-T-DB04/mysql-data,我們從新創(chuàng)建一個(gè)pod把數(shù)據(jù)拷貝到新的掛載卷,數(shù)據(jù)庫(kù)就自動(dòng)恢復(fù)了

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

cd?/data/mysql/GEM-SALE-T-DB06/mysql-data

?\cp -rf /data/mysql/GEM-SALE-T-DB04/mysql-data/* ./

數(shù)據(jù)恢復(fù)

docker容器數(shù)據(jù)恢復(fù)

恢復(fù)步驟
1. 查找數(shù)據(jù)卷位置

數(shù)據(jù)卷目錄在 /var/lib/docker/volumes 下,每個(gè)容器都會(huì)在該目錄下有一個(gè)文件夾,如果容器還存在的話,我們可以使用 docker inspect 容器ID 去查看 數(shù)據(jù)卷位置,這下容器被刪除了,可怎么辦,只能挨個(gè)去找了,一般 MySQL 容器數(shù)據(jù)卷目錄下會(huì)有一個(gè) _data 目錄,該目錄下會(huì)顯示你每個(gè)數(shù)據(jù)庫(kù)的文件夾,最終找到了

2. 創(chuàng)建新數(shù)據(jù)卷

使用 docker volume create 數(shù)據(jù)卷名字 命令新建一個(gè)數(shù)據(jù)卷,docker volume ls 查看數(shù)據(jù)卷列表

docker volume create mysqldata
docker volume ls
注意:使用數(shù)據(jù)卷進(jìn)行掛載的時(shí)候,數(shù)據(jù)卷必須是一個(gè)空的目錄,也就是說(shuō)不能有任何數(shù)據(jù)。

創(chuàng)建容器
執(zhí)行創(chuàng)建指令:
docker run -d -p 3306:3306 --name mysql -v mysqldata:/var/lib/mysql -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql:5.7
恢復(fù)數(shù)據(jù)之前需要把剛剛建立的數(shù)據(jù)卷里面關(guān)聯(lián)的內(nèi)容刪除掉,然后把之前的數(shù)據(jù)卷內(nèi)容復(fù)制到現(xiàn)在的數(shù)據(jù)卷進(jìn)行數(shù)據(jù)恢復(fù)。
cd /var/lib/docker/volumes/mysqldata/_data/
rm -f *
rm -f -R *
復(fù)制內(nèi)容到數(shù)據(jù)卷
cd /var/lib/docker/volumes/容器id/_data/
cp -R * /var/lib/docker/volumes/mysqldata/_data/
至此數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)完成,需要重啟下mysql容器,進(jìn)入恢復(fù)的容器查看

docker stop mysql
docker start mysql

因使用Deployment創(chuàng)建的pod無(wú)法掛載數(shù)據(jù)庫(kù)配置文件,所以采用使用鏡像創(chuàng)建先創(chuàng)建一個(gè)配置文件后續(xù)好掛載,原理是先用YAML方式創(chuàng)建,然后編輯這個(gè)pod,新建一個(gè)鏡像參照這個(gè)手動(dòng)創(chuàng)建一個(gè)pod,指定節(jié)點(diǎn)后面可以yaml里面加入節(jié)點(diǎn)參數(shù),

最后找到原因了,掛載配置哪里不能自己命名只能使用默認(rèn)的名稱

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

?創(chuàng)建mysql配置文件

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-t1-config
  labels:
    app: gem-yx-t-db1
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    lower_case_table_names = 1
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

?k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

?創(chuàng)建pod鏡像gem-yx-t-db1

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

mysql:5.7?

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理3306 tcp? ??

MYSQL_ROOT_PASSWORD? ? ?Gd*(53#SALE?

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

["mysqladmin","-uroot","-p${MYSQL_ROOT_PASSWORD}","ping"]

["mysqladmin","-uroot","-p${MYSQL_ROOT_PASSWORD}","ping"]

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

mysql-data ? ? /data/mysql/gem-yx-t-db1/mysql-data ? ? /var/lib/mysql
time ? ? ? ? ?/etc/localtime ? /etc/localtime
默認(rèn)配置名? ? mysql-t1-config ?/etc/mysql/conf.d? ? #自己取名無(wú)法啟動(dòng)

service創(chuàng)建k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

? ? ? nodeName: gem-yxyw-t-c02? ? #綁定節(jié)點(diǎn)

k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql
MySQL數(shù)據(jù)庫(kù)之日志管理

select now();? ? ?#查看數(shù)據(jù)庫(kù)時(shí)間是否正確

show variables like '%max_connections%';? ? #查數(shù)據(jù)庫(kù)最大連接數(shù)確定配置是否生效

在k8s集群中,service和pod都可以通過(guò)域名的形式進(jìn)行相互通信,換句話說(shuō),在k8s集群內(nèi),通過(guò)service和pod的域名,可以直接訪問(wèn)內(nèi)部應(yīng)用,不必在通過(guò)service ip地址進(jìn)行通信,一般的,我們創(chuàng)建service的時(shí)候不建議指定service的clusterIP,而是讓k8s自動(dòng)為service分配一個(gè)clusterIP,這樣,service的IP是自動(dòng)分配,但是service名字總是固定的吧,這樣在集群內(nèi)部就可以直接通過(guò)service的域名來(lái)連接即可,如前端pod應(yīng)用直接通過(guò)service域名來(lái)連接后端pod。

service的域名

<servicename>.<namespace>.svc.<clusterdomain>?其中,servicename為service名稱,namespace為service所處的命名空間,clusterdomain是k8s集群設(shè)計(jì)的域名后綴,默認(rèn)為cluster.local

mysql -h gem-yx-t-db1.yx-test.svc.cluster.local -uroot -p'Gd*(53#SALE'
mysql -h gem-yx-t-db2.yx-test.svc.cluster.local -uroot -p'3!y5cD&%2OWz'
mysql -h gem-yx-d-db1.yx-dev.svc.cluster.local -uroot -p'Gd*(53#SALE'
mysql -h gem-zs-t-db1.yx-test.svc.cluster.local -uroot -p'zs@JINDI'
mysql -h gem-nacos-t-db.nacos.svc.cluster.local -uroot -p'Gd*(53#SALE'

MySQL數(shù)據(jù)庫(kù)之日志管理

[mysqld]

log-error=/home/mysql/mysql_error.log? ?#指定錯(cuò)誤日志的保存位置

general_log=ON ?通用查詢?nèi)罩荆脕?lái)記錄MySQL的所有連接和語(yǔ)句,默認(rèn)是關(guān)閉的。

general_log_file=/home/mysql/mysql_general.log

log-bin=mysql-bin ? ? ?#也可以log_bin=mysql-bin? ?#二進(jìn)制日志

#使用相對(duì)路徑,則文件存儲(chǔ)在默認(rèn)目錄/usr/local/mysql/data/中

slow_query_log=ON
?slow_query_log_file=/home/mysql/mysql_slow_query.log?
?long_query_time=5 ???#慢查詢時(shí)間,設(shè)置超過(guò)5秒執(zhí)行的語(yǔ)句被記錄,缺省時(shí)為10秒文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-426563.html

[mysqld]
 ##錯(cuò)誤日志,用來(lái)記錄當(dāng)MySQL啟動(dòng)、停止或運(yùn)行時(shí)發(fā)生的錯(cuò)誤信息,默認(rèn)已開(kāi)啟
 log-error=/home/mysql/mysql_error.log
 ?
 ?
 ##通用查詢?nèi)罩?,用?lái)記錄MySQL的所有連接和語(yǔ)句,默認(rèn)是關(guān)閉的
 general_log=ON
 general_log_file=/home/mysql/mysql_general.log
 ?
 ?
 ##二進(jìn)制日志(binlog),用來(lái)記錄所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的語(yǔ)句,記錄了數(shù)據(jù)的更改,可用于數(shù)據(jù)恢復(fù),默認(rèn)已開(kāi)啟
 log-bin=mysql-bin      #也可以log_bin=mysql-bin
 #使用相對(duì)路徑,則文件存儲(chǔ)在默認(rèn)目錄/home/mysql/中
 ?
 ?
 ##慢查詢?nèi)罩?,用?lái)記錄所有執(zhí)行時(shí)間超過(guò)long_query_time秒的語(yǔ)句,可以找到哪些查詢語(yǔ)句執(zhí)行時(shí)間長(zhǎng),以便于優(yōu)化,默認(rèn)是關(guān)閉的
 slow_query_log=ON
 slow_query_log_file=/home/mysql/mysql_slow_query.log 
 long_query_time=5    #慢查詢時(shí)間,設(shè)置超過(guò)5秒執(zhí)行的語(yǔ)句被記錄,缺省時(shí)為10秒


mysql -u root -p[密碼]
 ?
 #查看錯(cuò)誤日志存放位置
 show variables like 'log_error';    
  
 #查看通用查詢?nèi)罩臼欠耖_(kāi)啟
 show variables like 'general%'; 
  
 #查看二進(jìn)制日志是否開(kāi)啟
 show variables like 'log_bin%';     
 ?
 #查看慢查詢?nèi)展δ苁欠耖_(kāi)啟
 show variables like '%slow%';   
 ?
 #查看慢查詢時(shí)間設(shè)置
 show variables like 'long_query_time';                      
 ?
 ?
 #在數(shù)據(jù)庫(kù)中設(shè)置開(kāi)啟慢查詢的方法,即以修改變量值的方式開(kāi)啟。但重啟服務(wù)后會(huì)失效。
 set global slow_query_log=ON;   

到了這里,關(guān)于k8s創(chuàng)建數(shù)據(jù)庫(kù)mysql MySQL數(shù)據(jù)庫(kù)之日志管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • k8s集群中部署項(xiàng)目之?dāng)?shù)據(jù)庫(kù)準(zhǔn)備

    k8s集群中部署項(xiàng)目之?dāng)?shù)據(jù)庫(kù)準(zhǔn)備

    同理 同理 同理 同理 同理

    2024年02月07日
    瀏覽(16)
  • 生產(chǎn)問(wèn)題(十四)K8S搶占CPU導(dǎo)致數(shù)據(jù)庫(kù)鏈接池打爆

    生產(chǎn)問(wèn)題(十四)K8S搶占CPU導(dǎo)致數(shù)據(jù)庫(kù)鏈接池打爆

    ????????線上一天出現(xiàn)了兩次數(shù)據(jù)庫(kù)連接失敗的大量報(bào)錯(cuò),一開(kāi)始以為是數(shù)據(jù)庫(kù)的問(wèn)題,但是想了想如果是數(shù)據(jù)庫(kù)的問(wèn)題,應(yīng)該會(huì)有大量的應(yīng)用問(wèn)題 ????????具體分析之后,發(fā)現(xiàn)其實(shí)是容器cpu出現(xiàn)了Throttled,導(dǎo)致大量線程阻塞 ? ? ? ? 既然出現(xiàn)了報(bào)錯(cuò),又沒(méi)有發(fā)布,先

    2024年01月25日
    瀏覽(92)
  • 【MySQL 】MySQL 創(chuàng)建數(shù)據(jù)庫(kù), MySQL 刪除數(shù)據(jù)庫(kù),MySQL 選擇數(shù)據(jù)庫(kù)

    【MySQL 】MySQL 創(chuàng)建數(shù)據(jù)庫(kù), MySQL 刪除數(shù)據(jù)庫(kù),MySQL 選擇數(shù)據(jù)庫(kù)

    作者簡(jiǎn)介: 辭七七,目前大一,正在學(xué)習(xí)C/C++,Java,Python等 作者主頁(yè): 七七的個(gè)人主頁(yè) 文章收錄專欄: 七七的閑談 歡迎大家點(diǎn)贊 ?? 收藏 ? 加關(guān)注哦!???? 我們可以在登陸 MySQL 服務(wù)后,使用 create 命令創(chuàng)建數(shù)據(jù)庫(kù),語(yǔ)法如下: 以下命令簡(jiǎn)單的演示了創(chuàng)建數(shù)據(jù)庫(kù)的過(guò)程,

    2024年02月13日
    瀏覽(114)
  • 使用 KubeBlocks 為 K8s 提供穩(wěn)如老狗的數(shù)據(jù)庫(kù)服務(wù)

    使用 KubeBlocks 為 K8s 提供穩(wěn)如老狗的數(shù)據(jù)庫(kù)服務(wù)

    原文鏈接:https://forum.laf.run/d/994 大家好!今天這篇文章主要向大家介紹 Sealos 的數(shù)據(jù)庫(kù)服務(wù)。在 Sealos 上數(shù)據(jù)庫(kù)后端服務(wù)由 KubeBlocks 提供,為用戶的數(shù)據(jù)庫(kù)應(yīng)用保駕護(hù)航。無(wú)論你是在公有云還是本地環(huán)境中使用,Sealos 都能為你管理關(guān)系數(shù)據(jù)庫(kù)、NoSQL、向量數(shù)據(jù)庫(kù)和流數(shù)據(jù)庫(kù)等

    2024年02月12日
    瀏覽(92)
  • Mysql數(shù)據(jù)庫(kù)(3)—架構(gòu)和日志

    Mysql數(shù)據(jù)庫(kù)(3)—架構(gòu)和日志

    Mysql的架構(gòu)設(shè)計(jì) Mysql分為 Server層和存儲(chǔ)引擎層: Server層 主要包括連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器等,涵蓋 MySQL 的大多數(shù)核心服務(wù)功能,以及所有的內(nèi)置函數(shù)(如日期、時(shí)間、數(shù)學(xué)和加密函數(shù)等),所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn),比如存儲(chǔ)過(guò)程、觸發(fā)器

    2024年02月10日
    瀏覽(129)
  • MySQL(1)
MySQL創(chuàng)建數(shù)據(jù)庫(kù)和創(chuàng)建數(shù)據(jù)表

    MySQL(1) MySQL創(chuàng)建數(shù)據(jù)庫(kù)和創(chuàng)建數(shù)據(jù)表

    創(chuàng)建數(shù)據(jù)庫(kù) 1. 連接 MySQL? ? ? mysql -u root -p? 2. 查看當(dāng)前的數(shù)據(jù)庫(kù)? show databases; 3. 創(chuàng)建數(shù)據(jù)庫(kù)? create database 數(shù)據(jù)庫(kù)名; 創(chuàng)建數(shù)據(jù)庫(kù) 4. 創(chuàng)建數(shù)據(jù)庫(kù)時(shí)設(shè)置字符編碼??create database 數(shù)據(jù)庫(kù)名 character set utf8;? 5. 查看和顯示數(shù)據(jù)庫(kù)的編碼方式? show create database 數(shù)據(jù)庫(kù)名; 顯示數(shù)據(jù)庫(kù)的

    2024年02月14日
    瀏覽(119)
  • MySQL基礎(chǔ)(三十六)其他數(shù)據(jù)庫(kù)日志

    MySQL基礎(chǔ)(三十六)其他數(shù)據(jù)庫(kù)日志

    千萬(wàn)不要小看日志 。很多看似奇怪的問(wèn)題,答案往往就藏在日志里。很多情況下,只有通過(guò)查看日志才能發(fā)現(xiàn)問(wèn)題的原因,真正解決問(wèn)題。所以,一定要學(xué)會(huì)查看日志,養(yǎng)成檢查日志的習(xí)慣,對(duì)提升你的數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)能力至關(guān)重要。 MySQL8.0 官網(wǎng)日志地址:“ https://dev.mys

    2024年02月05日
    瀏覽(95)
  • 《MySQL高級(jí)篇》十五、其他數(shù)據(jù)庫(kù)日志

    《MySQL高級(jí)篇》十五、其他數(shù)據(jù)庫(kù)日志

    我們?cè)谥v解數(shù)據(jù)庫(kù)事務(wù)時(shí),講過(guò)兩種日志: 重做日志 、 回滾日志 。 對(duì)于線上數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),突然遭遇 數(shù)據(jù)庫(kù)宕機(jī) 怎么辦?在這種情況下,定位宕機(jī)的原因就非常關(guān)鍵??梢圆榭磾?shù)據(jù)庫(kù)的錯(cuò)誤日志。因?yàn)槿罩局杏涗浟藬?shù)據(jù)庫(kù)運(yùn)行中的診斷信息,包括了錯(cuò)誤、警告和注釋等信

    2024年02月14日
    瀏覽(84)
  • MySQL數(shù)據(jù)庫(kù)——MySQL慢查詢?nèi)罩荆⊿low Query Log)

    慢查詢?nèi)罩居脕?lái)記錄在 MySQL 中執(zhí)行時(shí)間超過(guò)指定時(shí)間的查詢語(yǔ)句。通過(guò)慢查詢?nèi)罩?,可以查找出哪些查詢語(yǔ)句的執(zhí)行效率低,以便進(jìn)行優(yōu)化。 通俗的說(shuō),MySQL 慢查詢?nèi)罩臼桥挪閱?wèn)題的 SQL 語(yǔ)句,以及檢查當(dāng)前 MySQL 性能的一個(gè)重要功能。如果不是調(diào)優(yōu)需要,一般不建議啟動(dòng)該

    2024年02月06日
    瀏覽(85)
  • 【MySQL高級(jí)篇筆記-其他數(shù)據(jù)庫(kù)日志(下) 】

    【MySQL高級(jí)篇筆記-其他數(shù)據(jù)庫(kù)日志(下) 】

    此筆記為尚硅谷MySQL高級(jí)篇部分內(nèi)容 目錄 一、MySQL支持的日志 1、日志類型 2、日志的弊端 二、慢查詢?nèi)罩?slow query log) 三、通用查詢?nèi)罩?general query log) 1、問(wèn)題場(chǎng)景? 2、查看當(dāng)前狀態(tài) 3、啟動(dòng)日志 方式 1 :永久性方式 方式2:臨時(shí)性方式? 4、查看日志 5、停止日志 方式1:永

    2024年02月08日
    瀏覽(94)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包