前言
上篇我们主要研究了把server和mysql部署成两个服务的情况,但是我们没有考虑mysql的冗余机制,如果mysql的pod挂掉了,K8S会重新拉起它,但是这期间业务会中断。本篇我们将讨论一下如何解决这个问题。
一、多pod方法
首先想到的是mysql的多pod部署方法,把mysql.yaml文件中mysql的pod期望值由1改成2,如下图所示:
如果其中一个pod挂了,server应用可以访问另一个pod,但是这样做有问题:这种方式相当于负载均衡模式,当server应用修改mysql数据的时候,只会选择其中的一个mysql pod修改,而由于两个mysql pod的数据是独立存储的,那么另一个mysql pod中的数据就没有修改到。大家可以自己部署验证一下。也就是说,在多pod方法下是没法实现两个mysql pod之间的数据同步。
二、多Service方法
既然多pod方法行不通,那我们不妨试一下mysql的主备冗余并实现双向数据同步,即多Service部署实现mysql主从。
1.mysql主从部署
mysql-redun.yaml文件如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-init-config
data:
init.sql: |
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS table1(column1 varchar(20),column2 varchar(20));
INSERT INTO table1(column1,column2) VALUES('abcd','1234');
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-master-config
data:
my.cnf: