kubernetes搭建mysql5.7主从复制

用Dockerfile手动创建mysql5.7主从镜像

一、mysql master

replication controller 和 service 的 yaml 文件如下,文件名分别为 mysql-master-rc.yaml 和 mysql-master-service.yaml 。

# vim mysql-master-rc.yaml
# cat mysql-master-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql5-7-master
  labels:
    name: mysql5-7-master
spec:
  replicas: 1
  selector:
    name: mysql5-7-master
  template:
    metadata:
      labels:
        name: mysql5-7-master
    spec:
      containers:
      - name: master
        image: tigerfive/mysql5.7-master:2.1
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "1234567"
        - name: MYSQL_REPLICATION_USER
          value: "repl"
        - name: MYSQL_REPLICATION_PASSWORD
          value: "1234567"

可以看到在env中添加了mysql需要的环境变量。


# vim mysql-master-service.yaml
# cat mysql-master-service.yaml
cat mysql-master-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql-master
  labels:
    name: mysql-master
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    name: mysql5-7-master


部署mysql master服务
# kubectl create -f mysql-master-rc.yaml
# kubectl create -f mysql-master-service.yaml

二、mysql slave

replication controller 和 service 的 yaml 文件如下,文件名分别为 mysql-slave-rc.yaml 和 mysql-slave-service.yaml 。

# vim mysql-slave-rc.yaml 
# cat mysql-slave-rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql5-7-slave
  labels:
    name: mysql5-7-slave
spec:
  replicas: 1
  selector:
    name: mysql5-7-slave
  template:
    metadata:
      labels:
        name: mysql5-7-slave
    spec:
      containers:
      - name: slave
        image: tigerfive/mysql5.7-slave2:2.3
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "1234567"
        - name: MYSQL_REPLICATION_USER
          value: "repl"
        - name: MYSQL_REPLICATION_PASSWORD
          value: "1234567"


# vim mysql-slave-service.yaml 
# cat mysql-slave-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql5-7-slave
  labels:
    name: mysql5-7-slave
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    name: mysql5-7-slave


部署mysql slave服务
kubectl create -f mysql-slave-rc.yaml
kubectl create -f mysql-slave-service.yaml

三、测试mysql的主从复制

到目前为止,mysql的一主一从均运行在k8s的pod中。由于上面service创建并没有使用type: NodePort方式,所以service只能在kubernetes的pods中引用,外界是无法使用的。

1. 查看运行状态

执行命令,查看k8s各资源的运行情况: kubectl get pods,service,rc


image.png

2. mysql master上的操作

通过如下命令连接到pods中的容器,其中mysql-master-pe18a为pod名称。
# kubectl exec -it mysql-master-pe18a /bin/bash

此处无法如果连接
可以通过kubectl get no -o wide|grep mysql5-7 查找到对应node ip
然后再对应node上,找到container_id,
然后docker exec -it container_id bash 进入容器


接着连接本地mysql master服务器:
# mysql -uroot -p


至此进入到mysql命令模式。 执行命令show master status;查看状态。 执行下面的命令创建数据库以及表,以测试数据同步:
create database tiger_test_sync_db;
use tiger_test_sync_db;
create table test_tb(id int(3),name char(10)); insert into test_tb values(001,'ok');

3. mysql slave上的操作

按照上面相同的方式进入到mysql slave的命令行,执行以下命令:
show slave status\G;

通过该命令可以查看主从同步的情况,通常利用该命令来检查主从配置是否有问题。 


执行以下命令,可以看到刚才在master上创建的库表已经同步过来了:
show databases; use paul_test_sync_db; select * from test_tb;
image.png

四、集群伸缩

上面仅仅是一主一从,那接下来看看如何利用k8s对从服务器进行扩展。

此处将原先的1台从服务器扩展为3台,执行命令:
# kubectl scale rc mysql-slave --replicas=3 

上面命令的意思是将名称为mysql-slave的rc控制的pod副本数量变更为3。


执行命令可以看到扩展后的结果。
# kubectl get pods

五、总结

本文基于你已经对kubernetes有一定了解,因此并没有对一些命令、文件进行解释。 本文搭建的mysql一主多从集群环境,并没有考虑外部卷的挂载,因此当集群服务重启后,在mysql中创建的数据库、添加的数据会全部丢失。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352