简介 kubedb mysql 生命周期及特性 Supported MySQL FeaturesFeatures AvailabilityClustering ✓Persistent Volume ✓Instant Backup ✓Scheduled Backup ✓Initialize using Snapshot ✓Initialize using Script (*.sql, *sql.gz and/or *.sh
简介
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编写配置文件
mode: GroupReplicationgroup.name可以使用这个网站生成: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集群详细信息
[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从以上输出可以看到,集群部署完毕。
验证数据库
1、获取root用户名密码
[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(wVGGRfF4iQq1Zt2、查看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 43m3、现在可以使用获取到的信息连接数据库
[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、检查集群状态
[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、故障测试我现在把PRIMARY的mysql-group-test-0 pod删除,然后再查看集群信息,mysql-group-test-1会提升为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 | +---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+ 等待一段时间 mysql-group-test-0起来以后,角色就变成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 | +---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+注意:因为本文部署是使用的是GroupReplication模式(目前kubed只支持这种模式),只能从PRIMARY节点写入数据,所有节点都可以读取数据;如下图所示。如果想使用集群模式,参见以前的文章