簡(jiǎn)介
kubedb mysql 生命周期及特性
Supported MySQL Features
Features Availability
Clustering ?
Persistent Volume ?
Instant Backup ?
Scheduled Backup ?
Initialize using Snapshot ?
Initialize using Script (*.sql, *sql.gz and/or *.sh) ?
Custom Configuration ?
Using Custom docker image ?
Builtin Prometheus Discovery ?
Using Prometheus operator ?
查看kubedb支持的mysql版本
[root@qd01-stop-k8s-master001 mysql]# kubectl get mysqlversions
NAME VERSION DB_IMAGE DEPRECATED AGE
5.7.25-v1 5.7.25 kubedb/mysql:5.7.25-v1 17h
5.7.29 5.7.29 kubedb/mysql:5.7.29 17h
5.7.31 5.7.31 kubedb/mysql:5.7.31 17h
8.0.14-v1 8.0.14 kubedb/mysql:8.0.14-v1 17h
8.0.20 8.0.20 kubedb/mysql:8.0.20 17h
8.0.21 8.0.21 kubedb/mysql:8.0.21 17h
8.0.3-v1 8.0.3 kubedb/mysql:8.0.3-v1 17h
編寫(xiě)配置文件
mode: GroupReplication
group.name可以使用這個(gè)網(wǎng)站生成:https://www.uuidgenerator.net/version4
apiVersion: kubedb.com/v1alpha2
kind: MySQL
metadata:
name: mysql-group-test
namespace: op
spec:
version: "8.0.21"
replicas: 3
topology:
mode: GroupReplication
group:
name: "d7f38430-d9ee-464b-af43-da9efa26fe02"
baseServerID: 100
storageType: Durable
storage:
storageClassName: "rbd"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
terminationPolicy: Halt
安裝Mysql
[root@qd01-stop-k8s-master001 mysql]# kubectl apply -f mysql-cluster-install.yaml
mysql.kubedb.com/mysql-group-test created
[root@qd01-stop-k8s-master001 mysql]# kubectl get po,ep,svc -n op
NAME READY STATUS RESTARTS AGE
pod/mysql-group-test-0 2/2 Running 0 14m
pod/mysql-group-test-1 2/2 Running 0 9m41s
pod/mysql-group-test-2 2/2 Running 0 4m19s
NAME ENDPOINTS AGE
endpoints/mysql-group-test 100.64.147.157:3306 14m
endpoints/mysql-group-test-pods 100.64.122.198:3306,100.64.147.157:3306,100.98.174.219:3306 14m
endpoints/mysql-group-test-standby 100.98.174.219:3306 14m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysql-group-test ClusterIP 10.108.25.179 <none> 3306/TCP 14m
service/mysql-group-test-pods ClusterIP None <none> 3306/TCP 14m
service/mysql-group-test-standby ClusterIP 10.101.164.49 <none> 3306/TCP 14m
可以使用kubectl describe查看mysql集群詳細(xì)信息
[root@qd01-stop-k8s-master001 mysql]# kubectl describe mysql mysql-group-test -n op
Name: mysql-group-test
Namespace: op
Labels: <none>
Annotations: <none>
API Version: kubedb.com/v1alpha2
Kind: MySQL
Metadata:
Creation Timestamp: 2021-03-11T02:03:38Z
Finalizers:
kubedb.com
Generation: 2
Managed Fields:
API Version: kubedb.com/v1alpha2
Fields Type: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.:
f:kubectl.kubernetes.io/last-applied-configuration:
f:spec:
.:
f:replicas:
f:storage:
.:
f:accessModes:
f:resources:
.:
f:requests:
.:
f:storage:
f:storageClassName:
f:storageType:
f:terminationPolicy:
f:topology:
.:
f:group:
.:
f:baseServerID:
f:name:
f:mode:
f:version:
Manager: kubectl-client-side-apply
Operation: Update
Time: 2021-03-11T02:03:38Z
API Version: kubedb.com/v1alpha2
Fields Type: FieldsV1
fieldsV1:
f:metadata:
f:finalizers:
f:spec:
f:authSecret:
.:
f:name:
f:status:
.:
f:conditions:
f:observedGeneration:
f:phase:
Manager: operator
Operation: Update
Time: 2021-03-11T02:03:39Z
Resource Version: 7283091
UID: 38d0b2c8-2d56-4fcf-ba3b-dff211d8a63d
Spec:
Auth Secret:
Name: mysql-group-test-auth
Pod Template:
Controller:
Metadata:
Spec:
Affinity:
Pod Anti Affinity:
Preferred During Scheduling Ignored During Execution:
Pod Affinity Term:
Label Selector:
Match Labels:
app.kubernetes.io/instance: mysql-group-test
app.kubernetes.io/managed-by: kubedb.com
app.kubernetes.io/name: mysqls.kubedb.com
Namespaces:
op
Topology Key: kubernetes.io/hostname
Weight: 100
Pod Affinity Term:
Label Selector:
Match Labels:
app.kubernetes.io/instance: mysql-group-test
app.kubernetes.io/managed-by: kubedb.com
app.kubernetes.io/name: mysqls.kubedb.com
Namespaces:
op
Topology Key: failure-domain.beta.kubernetes.io/zone
Weight: 50
Resources:
Limits:
Cpu: 500m
Memory: 1Gi
Requests:
Cpu: 500m
Memory: 1Gi
Service Account Name: mysql-group-test
Replicas: 3
Storage:
Access Modes:
ReadWriteOnce
Resources:
Requests:
Storage: 50Gi
Storage Class Name: rbd
Storage Type: Durable
Termination Policy: Halt
Topology:
Group:
Base Server ID: 100
Name: d7f38430-d9ee-464b-af43-da9efa26fe02
Mode: GroupReplication
Version: 8.0.21
Status:
Conditions:
Last Transition Time: 2021-03-11T02:03:39Z
Message: The KubeDB operator has started the provisioning of MySQL: op/mysql-group-test
Reason: DatabaseProvisioningStartedSuccessfully
Status: True
Type: ProvisioningStarted
Last Transition Time: 2021-03-11T02:21:17Z
Message: All desired replicas are ready.
Reason: AllReplicasReady
Status: True
Type: ReplicaReady
Last Transition Time: 2021-03-11T02:03:49Z
Message: The MySQL: op/mysql-group-test is accepting client requests.
Observed Generation: 2
Reason: DatabaseAcceptingConnectionRequest
Status: True
Type: AcceptingConnection
Last Transition Time: 2021-03-11T02:21:17Z
Message: The MySQL: op/mysql-group-test is ready.
Observed Generation: 2
Reason: ReadinessCheckSucceeded
Status: True
Type: Ready
Last Transition Time: 2021-03-11T02:21:18Z
Message: The MySQL: op/mysql-group-test is successfully provisioned.
Observed Generation: 2
Reason: DatabaseSuccessfullyProvisioned
Status: True
Type: Provisioned
Observed Generation: 2
Phase: Ready
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Successful 17m KubeDB Operator Successfully created governing service
Normal Successful 17m KubeDB Operator Successfully created service for primary/standalone
Normal Successful 17m KubeDB Operator Successfully created service for secondary replicas
Normal Successful 17m KubeDB Operator Successfully created database auth secret
Normal Successful 17m KubeDB Operator Successfully created StatefulSet
Normal Successful 17m KubeDB Operator Successfully created appbinding
Normal Successful 17m KubeDB Operator Successfully patched StatefulSet
Normal Successful 17m KubeDB Operator Successfully patched StatefulSet
Normal Successful 13m KubeDB Operator Successfully patched StatefulSet
Normal Successful 11m KubeDB Operator Successfully patched StatefulSet
Normal Successful 7m39s KubeDB Operator Successfully patched StatefulSet
Normal Successful 102s KubeDB Operator Successfully patched StatefulSet
Normal Successful 16s KubeDB Operator Successfully patched StatefulSet
Normal Successful 16s KubeDB Operator Successfully patched StatefulSet
Normal Successful 16s KubeDB Operator Successfully patched StatefulSet
從以上輸出可以看到缸兔,集群部署完畢。
驗(yàn)證數(shù)據(jù)庫(kù)
1吹艇、獲取root用戶(hù)名密碼
[root@qd01-stop-k8s-master001 mysql]# kubectl get secrets -n op mysql-group-test-auth -o jsonpath='{.data.\username}' | base64 -d
root
[root@qd01-stop-k8s-master001 mysql]# kubectl get secrets -n op mysql-group-test-auth -o jsonpath='{.data.\password}' | base64 -d
8(wVGGRfF4iQq1Zt
2惰蜜、查看mysql pod 列表
[root@qd01-stop-k8s-master001 mysql]# kubectl get pods -n op -l app.kubernetes.io/instance=mysql-group-test -o jsonpath='{range.items[*]}{.metadata.name} ........... {.status.podIP} ............ {.metadata.name}.my-group-gvr.{.metadata.namespace}{"\t\n"}{end}'
mysql-group-test-0 ........... 100.64.147.157 ............ mysql-group-test-0.my-group-gvr.op
mysql-group-test-1 ........... 100.98.174.219 ............ mysql-group-test-1.my-group-gvr.op
mysql-group-test-2 ........... 100.64.122.198 ............ mysql-group-test-2.my-group-gvr.op
[root@qd01-stop-k8s-master001 mysql]# kubectl get svc -n op
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql-group-test ClusterIP 10.108.25.179 <none> 3306/TCP 43m
mysql-group-test-pods ClusterIP None <none> 3306/TCP 43m
mysql-group-test-standby ClusterIP 10.101.164.49 <none> 3306/TCP 43m
3、現(xiàn)在可以使用獲取到的信息連接數(shù)據(jù)庫(kù)
[root@qd01-stop-k8s-master001 mysql]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt" --host=10.108.25.179 -e "select 1;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---+
| 1 |
+---+
| 1 |
+---+
4受神、檢查集群狀態(tài)
[root@qd01-stop-k8s-master001 mysql]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt" --host=10.108.25.179 -e "show status like '%primary%'"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | 596744e1-820e-11eb-8425-f2f48f05462c |
+----------------------------------+--------------------------------------+
[root@qd01-stop-k8s-master001 mysql]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt" --host=10.108.25.179 -e "select * from performance_schema.replication_group_members"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 18b45cbd-820f-11eb-8060-9a70fb141a1f | mysql-group-test-1.mysql-group-test-pods.op | 3306 | ONLINE | SECONDARY | 8.0.21 |
| group_replication_applier | 1dd5699c-8210-11eb-b13a-9a07d15a7e1f | mysql-group-test-2.mysql-group-test-pods.op | 3306 | ONLINE | SECONDARY | 8.0.21 |
| group_replication_applier | 596744e1-820e-11eb-8425-f2f48f05462c | mysql-group-test-0.mysql-group-test-pods.op | 3306 | ONLINE | PRIMARY | 8.0.21 |
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
5抛猖、故障測(cè)試
我現(xiàn)在把PRIMARY的mysql-group-test-0 pod刪除,然后再查看集群信息,mysql-group-test-1會(huì)提升為PRIMARY
[root@qd01-stop-k8s-master001 ~]# kubectl delete po mysql-group-test-0 -n op
[root@qd01-stop-k8s-master001 ~]# kubectl exec -it -n op mysql-group-test-0 -n op -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt" --host=10.108.25.179 -e "select * from performance_schema.replication_group_members"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 18b45cbd-820f-11eb-8060-9a70fb141a1f | mysql-group-test-1.mysql-group-test-pods.op | 3306 | ONLINE | PRIMARY | 8.0.21 |
| group_replication_applier | 1dd5699c-8210-11eb-b13a-9a07d15a7e1f | mysql-group-test-2.mysql-group-test-pods.op | 3306 | ONLINE | SECONDARY | 8.0.21 |
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
等待一段時(shí)間 mysql-group-test-0起來(lái)以后财著,角色就變成SECONDARY
[root@qd01-stop-k8s-master001 ~]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt" --host=10.108.25.179 -e "select * from performance_schema.replication_group_members"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 18b45cbd-820f-11eb-8060-9a70fb141a1f | mysql-group-test-1.mysql-group-test-pods.op | 3306 | ONLINE | PRIMARY | 8.0.21 |
| group_replication_applier | 1dd5699c-8210-11eb-b13a-9a07d15a7e1f | mysql-group-test-2.mysql-group-test-pods.op | 3306 | ONLINE | SECONDARY | 8.0.21 |
| group_replication_applier | 596744e1-820e-11eb-8425-f2f48f05462c | mysql-group-test-0.mysql-group-test-pods.op | 3306 | ONLINE | SECONDARY | 8.0.21 |
+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+
注意:因?yàn)楸疚牟渴鹗鞘褂玫氖荊roupReplication模式(目前kubed只支持這種模式)联四,只能從PRIMARY節(jié)點(diǎn)寫(xiě)入數(shù)據(jù),所有節(jié)點(diǎn)都可以讀取數(shù)據(jù)撑教;如下圖所示朝墩。
如果想使用集群模式,參見(jiàn)以前的文章