kubernetes中部署mysql高可用集群
很多软件后端使用的存储都是mysql,当这些软件系统在生产环境部署时,都会面临一个严峻问题,需要在生产环境中部署一个高可用的mysql集群服务。刚好在最近一周的工作中,需要在kubernetes环境中搭建mysql高可用集群,这里记录一下。
之前的博文也讲过在非容器环境搭建MySQL Group Replication集群,现在在Kubernetes的容器环境配合kubedb,搭建更方便了,命令如下:
特别对于写操作,上层应用还得先找mysql的master实例地址后,操作才能进行下去,这样太难受了。
这里我们可以使用MySQL Router方案来处理,这个在之前的博文里也讲到。不过在MySQL官方的方案里
部署ProxySQL的过程如下:
这里在部署时遇到了一些小波折,最开始是使用k8s-proxysql-cluster部署一套proxysql集群,并到其中手动初始化MGR集群相关信息的。但后来遇到了一系列问题:
done
来源:https://jeremyxu2010.github.io/2019/08/kubernetes%E4%B8%AD%E9%83%A8%E7%BD%B2mysql%E9%AB%98%E5%8F%AF%E7%94%A8%E9%9B%86%E7%BE%A4/
搭建MySQL集群
MySQL的主从半同步复制方案、Galera集群方案以前都也实践过,感觉都不是太友好,配置比较麻烦,而且发生故障转移时经常需要人工参与。所以这里还是采用MySQL官方推荐的Group Replication集群方案。关于MySQL Group Replication集群的架构设计可以看官方文档,懒得看英文的话,也可以看我之前整理出的资料。另外kubedb网页上也有介绍MySQL几种高可用方案的构架方案,也比较有意思。之前的博文也讲过在非容器环境搭建MySQL Group Replication集群,现在在Kubernetes的容器环境配合kubedb,搭建更方便了,命令如下:
|
|
实现MySQL集群透明访问
MySQL集群搭建好了,如何访问呢?kubedb的文档上有说明:
|
|
这里我们可以使用MySQL Router方案来处理,这个在之前的博文里也讲到。不过在MySQL官方的方案里
MySQL Router
一般是作为应用的sidecar进行部署的。我这里想更集中式地部署,于是采用了业界广泛实践的ProxySQL方案。部署ProxySQL的过程如下:
|
|
- proxysql的配置信息未保存到pv中,这个导致某个proxysql实例重启后,proxysql集群中的MGR信息完全丢失。
- 某个proxysql实例pod被重新调度后,其ip地址发生变化,proxysql集群便会处于不健康状况。
proxysql_servers
中不再使用IP,而是使用固定的服务。经测试通过该方式部署的proxysql集群运行得十分稳定。业务访问MySQL
像上面那样部署了MySQL Group Replication集群和ProxySQL集群后,业务方访问MySQL服务就很轻松了:
|
|
参考
- https://kubedb.com/docs/0.12.0/guides/mysql/clustering/overview/
- https://kubedb.com/docs/0.12.0/guides/mysql/clustering/group_replication_single_primary/
- https://kubedb.com/docs/0.12.0/concepts/databases/mysql/
- https://www.xuejiayuan.net/blog/ea021ec24ac240db8665f0299dbb0667
- https://blog.frognew.com/2017/08/proxysql-1.4-and-mysql-group-replication.html
- https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-general-using-deploying.html
- https://github.com/sysown/proxysql/wiki/Configuring-ProxySQL
- http://fuxkdb.com/2018/08/25/%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9ASingle-Primary%E6%A8%A1%E5%BC%8F%E4%B8%8B%E7%9A%84MGR%E4%B8%BB%E8%8A%82%E7%82%B9/
评论