先下載?k8s實踐之mysql集群搭建資料
主從模式簡介:
當master主服務(wù)器上的數(shù)據(jù)發(fā)生改變時,則將其改變寫入二進制(binlog)事件日志文件中;
slave從服務(wù)器會在一定時間間隔內(nèi)對master主服務(wù)器上的二進制日志進行探測,探測其是否發(fā)生過改變(通過二進制文件的大小是否不同來進行判斷,日志文件改變了的大小也可以叫作偏移),如果探測到master主服務(wù)器的二進制事件日志發(fā)生了改變,則開始一個I/O Thread請求master二進制事件日志;
同時master主服務(wù)器為每個I/O Thread啟動一個dump thread,用于向其發(fā)送二進制事件日志;
slave從服務(wù)器將接收到的二進制事件日志寫到自己本地的(relay日志)中繼日志文件中;
slave從服務(wù)器將啟動SQL Thread從中繼日志中讀取二進制日志,在本地重放,使得其數(shù)據(jù)和主服務(wù)器保持一致;
最后I/O Thread和SQL Thread將進入睡眠狀態(tài),等待下一次喚醒;
主從復(fù)制的過程會有很小的延遲,基本沒有影響。
1.local pv的搭建
假設(shè)我們的k8s集群有hostname為node-1,node-2,node-3的三臺主機。首先,在宿主機上創(chuàng)建一個掛載點,比如/mnt/disks,然后用 RAM Disk 來模擬本地磁盤,在node-1上執(zhí)行:
$ mkdir /mnt/disks
$ mkdir /mnt/disks/vol1
$ mount -t tmpfs vol1 /mnt/disks/vol1
在其余兩臺主機執(zhí)行時,將路徑替換為vol2、vol3以作區(qū)分。
然后為這些本地磁盤定義對應(yīng)的 PV,pv-1.yaml、pv-2.yaml、pv-3.yaml,注釋的地方為需要替換的地方
2.mysql配置文件ConfigMap
Master 節(jié)點和 Slave 節(jié)點需要有不同的配置文件:我們只需要給主從節(jié)點分別準備兩份不同的 MySQL 配置文件,然后根據(jù) Pod 的序號(Index)掛載進去即可。這樣的配置文件信息,應(yīng)該保存在 ConfigMap 里供 Pod 使用。
3.Service的定義
這兩個 Service 都代理了所有攜帶 app=mysql 標簽的 Pod,也就是所有的 MySQL Pod。端口映射都是用 Service 的 3306 端口對應(yīng) Pod 的 3306 端口。
所有用戶的讀請求,都必須訪問第二個 Service 被自動分配的 DNS 記錄,即mysql-read。這樣,讀請求就可以被轉(zhuǎn)發(fā)到任意一個 MySQL 的主節(jié)點或者從節(jié)點上。而所有用戶的寫請求,則必須直接以 DNS 記錄的方式訪問到 MySQL 的主節(jié)點,即mysql-0.mysql這條 DNS 記錄。
4.StatefulSet的定義
init-mysql從 ConfigMap 中,獲取 MySQL 的 Pod 對應(yīng)的配置文件,根據(jù)節(jié)點的角色是 Master 還是 Slave 節(jié)點,為 Pod 分配對應(yīng)的配置文件。此外,MySQL 還要求集群里的每個節(jié)點都有一個唯一的 ID 文件,名叫 server-id.cnf。
clone-mysql在 Slave Pod 啟動前,從 Master 或者其他 Slave Pod 里拷貝數(shù)據(jù)庫數(shù)據(jù)到自己的目錄下。
xtrabackup在 Slave 節(jié)點的 MySQL 容器第一次啟動之前,執(zhí)行初始化 SQL。
mysql是集群里Mysql容器的定義。
5.集群操作
查看集群狀態(tài):
kubectl get pod -l app=mysql
向這個 MySQL 集群發(fā)起寫請求:
$ kubectl run mysql-client --image=mysql:5.7 -i --
rm --restart=Never --\
? mysql -h mysql-0.mysql <<
EOF
CREATE DATABASE test;
CREATE TABLE test.messages (message VARCHAR(250));
INSERT INTO test.messages VALUES ('hello');
EOF
向這個 MySQL 集群發(fā)起讀請求:文章來源:http://www.zghlxwxcb.cn/news/detail-621280.html
$ kubectl run mysql-client --image=mysql:5.7 -i -t --
rm --restart=Never --\
mysql -h mysql-read -e
"SELECT * FROM test.messages"
Waiting
for pod default/mysql-client to be running, status is Pending, pod ready:
false
+---------+
| message |
+---------+
| hello?? |
+---------+
pod
"mysql-client" deleted
集群的伸縮:文章來源地址http://www.zghlxwxcb.cn/news/detail-621280.html
$ kubectl scale statefulset mysql? --replicas=2
到了這里,關(guān)于k8s實踐之mysql集群搭建(十五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!