日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

k8s mysql数据同步_K8s——MySQL实现数据持久化

發(fā)布時(shí)間:2023/12/4 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s mysql数据同步_K8s——MySQL实现数据持久化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、搭建nfs存儲(chǔ)

[root@docker-k8s01 ~]# yum -y install nfs-utils

[root@docker-k8s01 ~]# mkdir /nfsdata/mysql -p

[root@docker-k8s01 ~]# cat /etc/exports

/nfsdata *(rw,sync,no_root_squash)

[root@docker-k8s01 ~]# systemctl restart nfs-server

[root@docker-k8s01 ~]# systemctl enable rpcbind

[root@docker-k8s01 ~]# systemctl enable nfs-server

[root@docker-k8s01 ~]# showmount -e

Export list for docker-k8s01:

/nfsdata *

2、創(chuàng)建PV

//編寫(xiě)pv的yaml文件

kind: PersistenVolume

apiVersion: v1

metadata:

name: mysql-pv

spec:

accessModes:

- ReadWriteOnce

capacity:

storage: 1Gi

persistentVolumeReclaimPolicy: Retain

storageClassName: nfs

nfs:

path: /nfsdata/mysql

server: 192.168.171.151

//執(zhí)行yaml文件

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pv.yaml

3、創(chuàng)建PVC

//編寫(xiě)PVC的yaml文件

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: mysql-pvc

spec:

accessModes:

- ReadWriteOnce //訪問(wèn)模式定義為只能以讀寫(xiě)的方式掛載到單個(gè)節(jié)點(diǎn)

resources:

requests:

storage: 1Gi

storageClassName: nfs //這里指定關(guān)聯(lián)的PV名稱

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pvc.yaml

4、確認(rèn)pv及pvc的狀態(tài)

//可以看到pv及pvc的狀態(tài)都是Bound

[root@docker-k8s01 mysql]# kubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

mysql-pv 1Gi RWO Retain Bound default/mysql-pvc nfs 6m21s

[root@docker-k8s01 mysql]# kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

mysql-pvc Bound mysql-pv 1Gi RWO nfs 2m4s

5、創(chuàng)建pod+svc(service)

這個(gè)pod是提供的MySQL服務(wù),并將其映射到宿主機(jī),可以做和client端通信

//編寫(xiě)deployment及service的yaml文件

---

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: mysql

spec:

selector:

matchLabels:

app: mysql

template:

metadata:

labels:

app: mysql

spec:

containers:

- name: mysql

image: mysql:5.7

env: //配置變量,設(shè)置mysql的密碼

- name: MYSQL_ROOT_PASSWORD

value: 123.com

ports:

- containerPort: 3306

volumeMounts:

- name: mysql-persistent-storage

mountPath: /var/lib/mysql //MySQL容器的數(shù)據(jù)都是存在這個(gè)目錄的,要對(duì)這個(gè)目錄做數(shù)據(jù)持久化

volumes:

- name: mysql-persistent-storage

persistentVolumeClaim:

claimName: mysql-pvc //指定pvc名稱

---

apiVersion: v1

kind: Service

metadata:

name: mysql

spec:

type: NodePort

ports:

- port: 3306

targetPort: 31111

selector:

app: mysql

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pod.yaml

//確定pod運(yùn)行正常

[root@docker-k8s01 mysql]# kubectl get pod -w

NAME READY STATUS RESTARTS AGE

mysql-6d898f8bcb-fc7bb 1/1 Running 0 60s

6、進(jìn)入MySQL數(shù)據(jù)庫(kù),添加測(cè)試數(shù)據(jù)

mysql> create database test;

mysql> use test

mysql> create table my_id(id int(11));

mysql> insert my_id values(1234);

mysql> select * from test.my_id; //確定數(shù)據(jù)添加成功

+------+

| id |

+------+

| 1234 |

+------+

7、手動(dòng)刪除節(jié)點(diǎn)上的容器,驗(yàn)證數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)是否還存在

//查看Pod運(yùn)行在哪個(gè)節(jié)點(diǎn)

[root@docker-k8s01 mysql]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

mysql-6d898f8bcb-fc7bb 1/1 Running 0 7m6s 10.244.1.2 docker-k8s02

[root@docker-k8s02 ~]# docker ps // 查看mysql容器的id

//刪除mysql容器

[root@docker-k8s02 ~]# docker rm -f 7ba3f9d9ad35

//由于Deployment的保護(hù)策略,當(dāng)刪除容器后,它會(huì)根據(jù)pod的yaml文件生成一個(gè)新的容器,但新容器的ID號(hào)就變了

//回到master節(jié)點(diǎn),登錄到數(shù)據(jù)庫(kù),查看數(shù)據(jù)是否還存在

[root@docker-k8s01 mysql]# kubectl exec -it mysql-6d898f8bcb-fc7bb -- mysql -uroot -p123.com

mysql> select * from test.my_id;

+------+

| id |

+------+

| 1234 |

+------+

1 row in set (0.01 sec)

證明:當(dāng)使用PV來(lái)做數(shù)據(jù)持久化的話,容器的新陳代謝并不會(huì)造成丟失數(shù)據(jù)的。

8、模擬MySQL容器所在的節(jié)點(diǎn)宕機(jī),驗(yàn)證數(shù)據(jù)是否會(huì)丟失

//查看容器所在節(jié)點(diǎn)

[root@docker-k8s01 mysql]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

mysql-6d898f8bcb-fc7bb 1/1 Running 0 13m 10.244.1.2 docker-k8s02

//將docker-k8s02節(jié)點(diǎn)宕機(jī),動(dòng)態(tài)查看Pod的狀態(tài)

//大概node01關(guān)機(jī)五分鐘左右,可以看到pod就被轉(zhuǎn)移到node02上運(yùn)行了

[root@docker-k8s01 ~]# kubectl get pod -w

NAME READY STATUS RESTARTS AGE

mysql-6d898f8bcb-fc7bb 1/1 Running 0 22m

mysql-6d898f8bcb-fc7bb 1/1 Running 0 22m

mysql-6d898f8bcb-fc7bb 1/1 Terminating 0 27m

mysql-6d898f8bcb-2h47v 0/1 Pending 0 0s

mysql-6d898f8bcb-2h47v 0/1 Pending 0 0s

mysql-6d898f8bcb-2h47v 0/1 ContainerCreating 0 0s

mysql-6d898f8bcb-2h47v 1/1 Running 0 33s

9、client端訪問(wèn)MySQL數(shù)據(jù)庫(kù)

因?yàn)槲覀冊(cè)趧?chuàng)建pod的yaml文件中,將其svc的端口映射類型是nodeport,所以,我們是可以通過(guò)訪問(wèn)群集內(nèi)的任意主機(jī)的31111端口(yaml文件中自定義的端口)來(lái)登錄到數(shù)據(jù)庫(kù)的。

[root@docker-k8s01 ~]# mysql -uroot -p123.com -h 192.168.171.151 -P 31111

MySQL [(none)]> select * from test.my_id; #查看數(shù)據(jù)

+------+

| id |

+------+

| 1234 |

+------+

1 row in set (0.01 sec)

總結(jié)

以上是生活随笔為你收集整理的k8s mysql数据同步_K8s——MySQL实现数据持久化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。