10年的慈利網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整慈利建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“慈利網(wǎng)站設(shè)計”,“慈利網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實(shí)執(zhí)行。
一、配置:
環(huán)境:
CentOS7?
VMware
筆者配置了四臺虛擬機(jī):
K8S-Master節(jié)點(diǎn): 3GB內(nèi)存? ?2核CPU ? 20GB硬盤空間
K8S-node1節(jié)點(diǎn):? 2GB內(nèi)存? ?2核CPU ? 30GB硬盤空間
K8S-node2節(jié)點(diǎn):? 2GB內(nèi)存? ?2核CPU ? 30GB硬盤空間
鏡像倉庫節(jié)點(diǎn):? ? ? 2GB內(nèi)存? ?2核CPU ? 50GB硬盤空間
二、節(jié)點(diǎn)規(guī)劃:
使用三臺虛擬機(jī)搭建K8S集群,使用一臺虛擬機(jī)搭建鏡像倉庫。
每臺虛擬機(jī)配置兩塊網(wǎng)卡,其中一塊為“NAT模式”,用于拉取鏡像等功能。
另外一塊網(wǎng)卡為“僅主機(jī)模式”,用于集群節(jié)點(diǎn)間的通信。歸劃如下:
K8s-master節(jié)點(diǎn):
僅主機(jī)模式:10.10.10.200
NAT模式: ?192.168.200.130
K8S-node1節(jié)點(diǎn):
僅主機(jī)模式:10.10.10.201
NAT模式: ?192.168.200.131
K8S-node2節(jié)點(diǎn):
僅主機(jī)模式:10.10.10.202
NAT模式: ?192.168.200.132
鏡像倉庫節(jié)點(diǎn):
僅主機(jī)模式:10.10.10.101
NAT模式: ?192.168.200.150
三、版本信息
Linux內(nèi)核版本:
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持久化存儲實(shí)驗
1. 在每個節(jié)點(diǎn)安裝nfs服務(wù)
在“鏡像倉庫”節(jié)點(diǎn),執(zhí)行以下命令:
yum install -y nfs-common nfs-utils rpcbind
在k8s集群,執(zhí)行以下命令:
yum install -y nfs-utils rpcbind
2. 在“鏡像倉庫”節(jié)點(diǎn)下,配置nfs服務(wù)器
mkdir /nfs_mysql
Chmod?777?/nfs_mysql/
(在測試環(huán)境中,為了不考慮用戶屬性,暫時賦予777權(quán)限,但在生產(chǎn)環(huán)境不推薦這樣做)
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服務(wù)是否可用
mkdir /test
showmount -e 10.10.10.101
可見/nfs_mysql *已暴露于共享目錄,接下來測試掛載是否可用:
在master節(jié)點(diǎn)下執(zhí)行:
mount -t nfs 10.10.10.101:/nfs_mysql /test/
echo "hello-world"/test/1.txt
在鏡像倉庫節(jié)點(diǎn)下查看1.txt是否存在,若存在則掛載成功:
可見nfs服務(wù)可以正常使用,接下來刪除test目錄和1.txt
在鏡像倉庫下:
[root@hub nfs_mysql]# rm -f 1.txt
在Master節(jié)點(diǎn)下:
[root@k8s-master ~]# umount /test/
[root@k8s-master ~]# rm -rf /test/
同理,依照以上步驟同時創(chuàng)建:(提供多個mysql副本進(jìn)行掛載)
nfs_mysql1
nfs_mysql2
完成后需要重啟nfs服務(wù)
systemctl restart rpcbind
systemctl restart nfs
最終效果:
4. 將nfs封裝成pv
創(chuàng)建mysql_test文件夾,將yaml文件統(tǒng)一保存在此目錄下
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
執(zhí)行命令:
kubectl create -f mysql-pv.yml
kubectl get pv
如圖所示,即為Pv創(chuàng)建成功。
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 ?
執(zhí)行以下命令,部署mysql服務(wù):
kubectl create -f mysql.yml
如圖可知,mysql按StatefulSet依次創(chuàng)建了mysql-0 mysql-1 mysql-2
查看各個Pod部在哪個節(jié)點(diǎn):
6. 通過創(chuàng)建臨時容器,使用MySQL客戶端發(fā)送測試請求給MySQL master節(jié)點(diǎn)
注意:
主機(jī)名為mysql-0.mysql;跨命名空間的話,主機(jī)名請使用mysql-0.mysql. [NAMESPACE_NAME].如果沒有指定命名空間,默認(rèn)為default,即 mysql-0.mysql. default。
這里筆者打算關(guān)閉node2節(jié)點(diǎn)來模擬node2宕機(jī),來測試是否實(shí)現(xiàn)數(shù)據(jù)的持久化存儲,
所以我們向node2上的mysql1寫入數(shù)據(jù)。
執(zhí)行以下命令,訪問mysql1:
kubectl run mysql-client --image=mysql:5.6 -it --rm --restart=Never -- mysql -h mysql-1.mysql.default -p?password
創(chuàng)建數(shù)據(jù)庫demo,并向messages表中寫入hello-world
CREATE DATABASE demo;?
CREATE TABLE demo.messages (message VARCHAR(250));?
INSERT INTO demo.messages VALUES ('hello-world');
如圖所示
接下來我們來關(guān)閉k8s-node2虛擬機(jī),模擬宕機(jī)
查看nodes的運(yùn)行狀態(tài),可知node2的狀態(tài)已轉(zhuǎn)變?yōu)镹otReady
一段時間后,k8s將Pod MySql -1遷移到節(jié)點(diǎn)k8s-node1
由于時間過長,筆者把三個Pod都刪除重啟后,驗證數(shù)據(jù):
MySQL服務(wù)恢復(fù),數(shù)據(jù)完好無損!
1、在數(shù)據(jù)庫方面,mysql是關(guān)系型數(shù)據(jù)庫主要用于存放持久化數(shù)據(jù),redis是NOSQL,即非關(guān)系型數(shù)據(jù)庫,也是緩存數(shù)據(jù)庫,緩存的讀取速度快,能夠大大的提高運(yùn)行效率,但是保存時間有限。
2、在運(yùn)行機(jī)制方面,mysql作為持久化存儲的關(guān)系型數(shù)據(jù)庫,相對薄弱的地方在于每次請求訪問數(shù)據(jù)庫時,都存在著I/O操作,如果反復(fù)頻繁的訪問數(shù)據(jù)庫。
3、在作用方面,mysql是存儲數(shù)據(jù)到硬盤,功能強(qiáng)大,速度較慢,但是讀寫速度沒有Redis快,redis為較為頻繁的數(shù)據(jù)到緩存中,讀取速度快,基于內(nèi)存,讀寫速度快,也可做持久化,但是內(nèi)存空間有限,當(dāng)數(shù)據(jù)量超過內(nèi)存空間時,需擴(kuò)充內(nèi)存,但內(nèi)存價格貴。
4、在需求方面,mysql和redis因為需求的不同,一般都是配合使用。需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存儲數(shù)據(jù)在MySQL和Redis之間做同步。
1、默認(rèn)提供的是持久化到文件的方式,即activemq.xml文件中的:
2. 步驟
本文重點(diǎn)接收的是持久化到MySQL中的配置方式:
2.1 添加MySQL驅(qū)動
首先需要把MySql的驅(qū)動放到ActiveMQ的Lib目錄下,我用的文件名字是:mysql-connector-java-5.1.30-bin.jar
2.2 修改配置文件activemq.xml
將其中的這段配置:
修改為下面這段內(nèi)容:
3、另外需要在節(jié)點(diǎn)的下面定義id為mysql-ds的bean,如下:
4、 新建數(shù)據(jù)庫
從配置中可以看出數(shù)據(jù)庫的名稱是activemq,需要手動在MySql中新建一個activemq的空數(shù)據(jù)庫。
此時,重新啟動MQ,就會發(fā)現(xiàn)activemq庫中多了三張表:activemq_acks,activemq_lock,activemq_msgs,OK,說明已經(jīng)持久化成功啦!
MySQL 8.0 以前 auto_increment 無法持久化,MySQL 8.0支持 auto_increment 持久化。文檔鏈接:
MySQL5.7 重啟后 auto_increment 會重置成 max(id)+1。
pt-archiver 加了個邏輯:選擇不歸檔(刪除) max(id) 這一行數(shù)據(jù),防止重啟丟失 auto_increment 值。這個行為由 --safe-auto-increment 參數(shù)控制(默認(rèn))。如果要關(guān)閉這一邏輯,可以使用 --nosafe-auto-increment參數(shù)。這一度被認(rèn)為是個 bug。