成都創新互聯專注于網站建設,為客戶提供成都做網站、成都網站設計、成都外貿網站建設、網頁設計開發服務,多年建網站服務經驗,各類網站都可以開發,成都品牌網站建設,公司官網,公司展示網站,網站設計,建網站費用,建網站多少錢,價格優惠,收費合理。
一、配置:
環境:
CentOS7?
VMware
筆者配置了四臺虛擬機:
K8S-Master節點: 3GB內存? ?2核CPU ? 20GB硬盤空間
K8S-node1節點:? 2GB內存? ?2核CPU ? 30GB硬盤空間
K8S-node2節點:? 2GB內存? ?2核CPU ? 30GB硬盤空間
鏡像倉庫節點:? ? ? 2GB內存? ?2核CPU ? 50GB硬盤空間
二、節點規劃:
使用三臺虛擬機搭建K8S集群,使用一臺虛擬機搭建鏡像倉庫。
每臺虛擬機配置兩塊網卡,其中一塊為“NAT模式”,用于拉取鏡像等功能。
另外一塊網卡為“僅主機模式”,用于集群節點間的通信。歸劃如下:
K8s-master節點:
僅主機模式:10.10.10.200
NAT模式: ?192.168.200.130
K8S-node1節點:
僅主機模式:10.10.10.201
NAT模式: ?192.168.200.131
K8S-node2節點:
僅主機模式:10.10.10.202
NAT模式: ?192.168.200.132
鏡像倉庫節點:
僅主機模式:10.10.10.101
NAT模式: ?192.168.200.150
三、版本信息
Linux內核版本:
Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org)
(gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) )
#1 SMP Fri Apr 20 16:44:24 UTC 2018
K8s集群版本為1.15.0版本:
四、基于StatefulSet與PV/PVC的MySql持久化存儲實驗
1. 在每個節點安裝nfs服務
在“鏡像倉庫”節點,執行以下命令:
yum install -y nfs-common nfs-utils rpcbind
在k8s集群,執行以下命令:
yum install -y nfs-utils rpcbind
2. 在“鏡像倉庫”節點下,配置nfs服務器
mkdir /nfs_mysql
Chmod?777?/nfs_mysql/
(在測試環境中,為了不考慮用戶屬性,暫時賦予777權限,但在生產環境不推薦這樣做)
Chown?nfsnobody?/nfs_mysql/
echo “/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)”? /etc/exports
cat /etc/exports
/nfs_mysql?*(rw,no_root_squash,no_all_squash,sync)
systemctl start rpcbind
systemctl start nfs
3. 測試nfs服務是否可用
mkdir /test
showmount -e 10.10.10.101
可見/nfs_mysql *已暴露于共享目錄,接下來測試掛載是否可用:
在master節點下執行:
mount -t nfs 10.10.10.101:/nfs_mysql /test/
echo "hello-world"/test/1.txt
在鏡像倉庫節點下查看1.txt是否存在,若存在則掛載成功:
可見nfs服務可以正常使用,接下來刪除test目錄和1.txt
在鏡像倉庫下:
[root@hub nfs_mysql]# rm -f 1.txt
在Master節點下:
[root@k8s-master ~]# umount /test/
[root@k8s-master ~]# rm -rf /test/
同理,依照以上步驟同時創建:(提供多個mysql副本進行掛載)
nfs_mysql1
nfs_mysql2
完成后需要重啟nfs服務
systemctl restart rpcbind
systemctl restart nfs
最終效果:
4. 將nfs封裝成pv
創建mysql_test文件夾,將yaml文件統一保存在此目錄下
mkdir mysql_test
cd mysql_test
vim mysql-pv.yml
mysql-pv.yml配置如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ?ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs_mysql
server: 10.10.10.101
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv1
spec:
capacity:
storage: 5Gi
accessModes:
- ?ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs_mysql1
server: 10.10.10.101
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv2
spec:
capacity:
storage: 5Gi
accessModes:
- ?ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs_mysql2
server: 10.10.10.101
注意:
在k8s集群15版本中recycle回收策略已被刪除,只能用retain策略或者Delete策略。這里我們使用 persistentVolumeReclaimPolicy: Retain
執行命令:
kubectl create -f mysql-pv.yml
kubectl get pv
如圖所示,即為Pv創建成功。
5. 部署MySQL,在mysql_test目錄下編寫mysql.yml,配置文件如下
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- port: 3306
name: mysql
clusterIP: None
selector:
app: mysql
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql"
replicas: 3
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "nfs"
resources:
requests:
storage: 1Gi ?
執行以下命令,部署mysql服務:
kubectl create -f mysql.yml
如圖可知,mysql按StatefulSet依次創建了mysql-0 mysql-1 mysql-2
查看各個Pod部在哪個節點:
6. 通過創建臨時容器,使用MySQL客戶端發送測試請求給MySQL master節點
注意:
主機名為mysql-0.mysql;跨命名空間的話,主機名請使用mysql-0.mysql. [NAMESPACE_NAME].如果沒有指定命名空間,默認為default,即 mysql-0.mysql. default。
這里筆者打算關閉node2節點來模擬node2宕機,來測試是否實現數據的持久化存儲,
所以我們向node2上的mysql1寫入數據。
執行以下命令,訪問mysql1:
kubectl run mysql-client --image=mysql:5.6 -it --rm --restart=Never -- mysql -h mysql-1.mysql.default -p?password
創建數據庫demo,并向messages表中寫入hello-world
CREATE DATABASE demo;?
CREATE TABLE demo.messages (message VARCHAR(250));?
INSERT INTO demo.messages VALUES ('hello-world');
如圖所示
接下來我們來關閉k8s-node2虛擬機,模擬宕機
查看nodes的運行狀態,可知node2的狀態已轉變為NotReady
一段時間后,k8s將Pod MySql -1遷移到節點k8s-node1
由于時間過長,筆者把三個Pod都刪除重啟后,驗證數據:
MySQL服務恢復,數據完好無損!
MySQL 8.0 以前 auto_increment 無法持久化,MySQL 8.0支持 auto_increment 持久化。文檔鏈接:
MySQL5.7 重啟后 auto_increment 會重置成 max(id)+1。
pt-archiver 加了個邏輯:選擇不歸檔(刪除) max(id) 這一行數據,防止重啟丟失 auto_increment 值。這個行為由 --safe-auto-increment 參數控制(默認)。如果要關閉這一邏輯,可以使用 --nosafe-auto-increment參數。這一度被認為是個 bug。
1、原子性:在整個操作的事務中,要么全部成功,要么全部失敗。
2、隔離性:所謂隔離性,就是每個事務執行的時候,相互之間不會受到影響,都是單獨的事務。
3、一致性:也就是說事務在執行之后,必須和之前的數據保持一致。
4、持久性:事務一旦提交,就會持久化到數據庫中,不能回滾。
分享標題:mysql持久性怎么辦,mysql持久化過程
網頁鏈接:http://vcdvsql.cn/article26/hsoccg.html
成都網站建設公司_創新互聯,為您提供虛擬主機、營銷型網站建設、網頁設計公司、網站設計公司、響應式網站、微信小程序
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯