Mysql

Mysql-Operator目前还处于alpha阶段,当前最新版本为0.3.0。本文将介绍0.3.0版本的安装。

Github上介绍的安装方法为Helm,不过为了简单起见,本文把Chart里面的Yaml文件抽了出来,直接使用Kubernetes的命令进行安装。

环境信息如下:

  • kubernetes: v1.14.0

  • docker-ce: 18.06

创建CRD

$ kubectl apply crd.yaml

crd.yaml文件如下

创建命名空间

$ kubectl create namespace mysql-operator

RBAC

$ kubectl apply -f rbac.yaml

rbac.yaml文件的内容如下:

安装Operator

首先,使用以下的yaml文件安装mysql-operator

创建MysqlCluster

接下来我们在default命名空间中创建一个Mysql集群。首先要在default命名空间中创建如下的ServiceAccountRoleBinding

然后,我们就可以创建一个一主两从的Mysql集群了(注意这里使用了rbd分布式存储,所以k8s集群要对接好ceph-rbd)

此时,在集群中我们会看到一个StatefulsetHeadless Service以及PersistentVolumeClaim

$ kubectl get statefulset
NAME                 READY   AGE
mysql-test-cluster   3/3     177m

$ kubectl get pod 
NAME                   READY   STATUS    RESTARTS   AGE
mysql-test-cluster-0   2/2     Running   0          178m
mysql-test-cluster-1   2/2     Running   0          177m
mysql-test-cluster-2   2/2     Running   0          154m

$ kubectl get service
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   
mysql-test-cluster   ClusterIP   None         <none>        3306/TCP   172m

$ kubectl get pvc
NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-mysql-test-cluster-0   Bound    pvc-a2414ffc-8cdc-11e9-9eb0-000c29a3131e   1Gi        RWO            rbd            8m25s
data-mysql-test-cluster-1   Bound    pvc-c9c89485-8cdc-11e9-9eb0-000c29a3131e   1Gi        RWO            rbd            7m19s
data-mysql-test-cluster-2   Bound    pvc-f9d27bac-8cdc-11e9-9eb0-000c29a3131e   1Gi        RWO            rbd            5m58s

连接Mysql

首先获取root密码

$ kubectl get secret mysql-test-cluster-root-password -o jsonpath="{.data.password}" | base64 --decode
VaVfYsV76v19Zh68

然后创建一个Pod

进入到Pod里面,连接mysql集群的主节点

$ kubectl exec -it mysql-client bash
root@mysql-client:/# mysql -h mysql-test-cluster-0.mysql-test-cluster -uroot -pVaVfYsV76v19Zh68

然后创建一个database

mysql> create database peng;
Query OK, 1 row affected (0.06 sec)

mysql> show database;
+-------------------------------+
| Database                      |
+-------------------------------+
| information_schema            |
| mysql                         |
| mysql_innodb_cluster_metadata |
| peng                          |
| performance_schema            |
| sys                           |
+-------------------------------+
6 rows in set (0.01 sec)

接下来,我们从mysql-client连接mysql集群的一个从节点mysql-test-cluster-1

$ kubectl exec -it mysql-client bash
root@mysql-client:/# mysql -h mysql-test-cluster-1.mysql-test-cluster -uroot -pVaVfYsV76v19Zh68

然后查看里面的database,发现有了peng这个database(即已经同步了主节点的数据)

mysql > show databases;
+-------------------------------+
| Database                      |
+-------------------------------+
| information_schema            |
| mysql                         |
| mysql_innodb_cluster_metadata |
| peng                          |
| performance_schema            |
| sys                           |
+-------------------------------+
6 rows in set (0.01 sec)

接下来我们尝试在该从节点上创建一个database试试,发现报如下的错

mysql> create database test;
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

Reference

  • https://github.com/oracle/mysql-operator

  • https://github.com/oracle/mysql-operator/blob/master/docs/tutorial.md

  • https://github.com/oracle/mysql-operator/blob/master/docs/user/clusters.md#clusters

Last updated

Was this helpful?