天天看点

Kubernetes中部署MySQL高可用集群

mysql简介

mysql是一个关系型数据库管理系统,由瑞典mysql ab 公司开发,属于 oracle 旗下产品。mysql 是最流行的关系型数据库管理系统之一,在 web 应用方面,mysql是最好的 rdbms (relational database management system,关系数据库管理系统) 应用软件之一。mysql是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。mysql所使用的 sql 语言是用于访问数据库的最常用标准化语言。mysql 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 mysql 作为网站数据库。

mysql的高可用方案

下文介绍的mysql高可用方案采用主从复制+读写分离,即由单一的master和多个slave所构成。其中,客户端通过master对数据库进行写操作,通过slave端进行读操作。master出现问题后,可以将应用切换到slave端。 此方案是mysql官方提供的一种高可用解决方案,节点间的数据同步采用mysql replication技术。mysql replication从一个mysql数据库服务器(master)的数据复制到一个或多个mysql数据库服务器(slave)。在默认情况下,复制是异步的;slave不需要一直接收来自主机的更新。根据配置,可以复制数据库中的所有数据库、选定的数据库,或者特定的表。

安装部署

1.创建configmap

通过yaml文件创建名为mysql的configmap

kubectl apply -f mysql-configmap.yaml -n kube-public

通过yaml文件创建两个service,分别是mysql和mysql-read:

cat mysql-service.yaml

kubectl apply -f mysql-service.yaml -n kube-public

3.创建statefulset

通过yaml文件创建名为mysql的statefulset:

cat  mysql-statefulset.yaml

kubectl apply -f mysql-statefulset.yaml -n kube-public

通过执行如下的命令可以查看启动过程:

在启动后,应该能够看到如下的信息:

注:上面配置说明

volumeclaimtemplates:

 - metadata:

     name: data

     annotations:

       volume.beta.kubernetes.io/storage-class: "nfs"

   spec:

     accessmodes: [ "readwriteonce" ]

     resources:

       requests:

         storage: 10gi

上面这段表示动态申请pvc,存储类是由nfs创建的,前提是创建nfs的存储类,创建方法如下:

cat  class.yaml

kind: storageclass

apiversion: storage.k8s.io/v1

metadata:

 name: nfs

provisioner: example.com/nfs

kubectl apply -f class.yaml

动态pvc创建可参考:

kubernetes集群中部署efk日志管理系统

mysql部署环境验证

1)通过运行一个临时的容器(使用mysql:5.7镜像),使用mysql 客户端发送测试请求给mysql master节点(主机名为mysql-0.mysql;跨命名空间的话,主机名请使用mysql-0.mysql.kube-public)

kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=never -- mysql -h mysql-0.mysql.kube-public

在master节点上创建demo数据库,并创建一个只有message字段的demo.messages的表,并为message字段插入hello值。

Kubernetes中部署MySQL高可用集群

2)使用主机名为mysql-read来发送测试请求给服务器:

kubectl run mysql-client --image=mysql:5.7 -i -t --rm --restart=never -- mysql -h mysql-read.kube-public

Kubernetes中部署MySQL高可用集群