【全网最全最详细】K8s部署Mysql 8主从复制+读写分离

您所在的位置:网站首页 mysql8读写分离 【全网最全最详细】K8s部署Mysql 8主从复制+读写分离

【全网最全最详细】K8s部署Mysql 8主从复制+读写分离

2024-07-16 13:44:41| 来源: 网络整理| 查看: 265

本文使用静态存储卷实现(非存储类),目的是比较简单易入门。 部署mysql5.7集群的请看这篇文章

软件版本mysql8.0.18xtrabackup8.0.9

0、制作xtrabackup镜像(该步可跳过,可直接使用作者现成镜像) [root@localhost ~]$ vi Dockerfile

FROM paigeeworld/centos7:latest MAINTAINER jstang RUN rpm --rebuilddb && \ yum -y install wget hostname mariadb && \ wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.9/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.9-1.el7.x86_64.rpm && \ yum -y localinstall percona-xtrabackup-80-8.0.9-1.el7.x86_64.rpm RUN rm percona-xtrabackup-80-8.0.9-1.el7.x86_64.rpm -rf EXPOSE 3307

[root@localhost ~]$ docker build -t jstang/xtrabackup:2.3 [root@localhost ~]$ docker login [root@localhost ~]$ docker push jstang/xtrabackup:2.3 这个是构建镜像和把镜像上传到作者的dockerHub的jstang账户上

1、准备NFS服务,查看NFS服务器IP为192.168.1.11,准备三个持久化磁盘(块)

[root@m-nfs~]# yum install nfs-utils [root@m-nfs~]# mkdir -p /net/mysql-0 /net/mysql-1 /net/mysql-2 [root@m-nfs~]# ifconfig | head -2| tail -1|awk '{print $2}' 192.168.1.11 # 查看nfs服务器IP [root@m-nfs~]# echo '/net/mysql-0 *(rw,no_root_squash)' >> /etc/exports [root@m-nfs~]# echo '/net/mysql-1 *(rw,no_root_squash)' >> /etc/exports [root@m-nfs~]# echo '/net/mysql-2 *(rw,no_root_squash)' >> /etc/exports [root@m-nfs~]# systemctl restart nfs-server [root@m-nfs~]# showmount -e 本机IP # 验证

2、创建三个持久卷(mysql-0、mysql-1、mysql-2)

apiVersion: v1 kind: PersistentVolume metadata: name: pv-a|pv-b|pv-c spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce - ReadOnlyMany #persistentVolumeReclaimPolicy: Retain # 当声明被释放,pv将保留(不清理和删除) persistentVolumeReclaimPolicy: Recycle # 当声明被释放,空间将回收再利用 nfs: server: 192.168.1.11 path: /net/mysql-0 | /net/mysql-1 | /net/mysql-2

3、创建configMap配置字典

apiVersion: v1 kind: ConfigMap metadata: name: mysql labels: app: mysql data: master.cnf: | # Apply this config only on the master. [mysqld] log-bin slave.cnf: | # Apply this config only on slaves. [mysqld] super-read-only

4、部署headless服务,有状态服务都需要,让服务旗下的Pod彼此发现

apiVersion: v1 kind: Service metadata: name: mysql-headless labels: app: mysql spec: ports: - name: mysql port: 3306 clusterIP: None selector: app: mysql

5. 部署SatefulSet应用

apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-ss spec: selector: matchLabels: app: mysql serviceName: mysql-headless replicas: 1 template: metadata: labels: app: mysql spec: initContainers: - name: init-mysql image: mysql:8.0.18 command: - bash - "-c" - | set ex # 从hostname中获取索引,比如(mysql-1)会获取(1) [[ `hostname` =~ -([0-9]+)$ ]] || exit 1 ordinal=${BASH_REMATCH[1]} echo [mysqld] > /mnt/conf.d/server-id.cnf # 为了不让server-id=0而增加偏移量 echo server-id=$((100 + $ordinal)) >> /mnt/conf.d/server-id.cnf # 拷贝对应的文件到/mnt/conf.d/文件夹中 if [[ $ordinal -eq 0 ]]; then cp /mnt/config-map/master.cnf /mnt/conf.d/ else cp /mnt/config-map/slave.cnf /mnt/conf.d/ fi volumeMounts: - name: conf mountPath: /mnt/conf.d - name: config-map mountPath: /mnt/config-map - name: clone-mysql image: jstang/xtrabackup:2.3 command: - bash - "-c" - | set -ex # 整体意思: # 1.如果是主mysql中的xtrabackup,就不需要克隆自己了,直接退出 # 2.如果是从mysql中的xtrabackup,先判断是否是第一次创建,因为第二次重启本地就有数据库,无需克隆。若是第一次创建(通过/var/lib/mysql/mysql文件是否存在判断),就需要克隆数据库到本地。 # 如果有数据不必克隆数据,直接退出() [[ -d /var/lib/mysql/mysql ]] && exit 0 # 如果是master数据也不必克隆 [[ `hostname` =~ -([0-9]+)$ ]] || exit 1 ordinal=${BASH_REMATCH[1]} [[ $ordinal -eq 0 ]] && exit 0 # 从序列号比自己小一的数据库克隆数据,比如mysql-2会从mysql-1处克隆数据 ncat --recv-only mysql-ss-$(($ordinal-1)).mysql-headless 3307 | xbstream -x -C /var/lib/mysql # 比较数据 xtrabackup --prepare --target-dir=/var/lib/mysql volumeMounts: - name: data mountPath: /var/lib/mysql subPath: mysql - name: conf mountPath: /etc/mysql/conf.d containers: - name: mysql image: mysql:8.0.18 args: ["--default-authentication-plugin=mysql_native_password"] env: - name: MYSQL_ALLOW_EMPTY_PASSWORD value: "1" ports: - name: mysql containerPort: 3306 volumeMounts: - name: data mountPath: /var/lib/mysql subPath: mysql - name: conf mountPath: /etc/mysql/conf.d resources: requests: cpu: 50m memory: 50Mi livenessProbe: exec: command: ["mysqladmin", "ping"] initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 readinessProbe: exec: command: ["mysql", "-h", "127.0.0.1", "-e", "SELECT 1"] initialDelaySeconds: 5 periodSeconds: 2 timeoutSeconds: 1 - name: xtrabackup image: jstang/xtrabackup:2.3 ports: - name: xtrabackup containerPort: 3307 command: - bash - "-c" - | set -ex # 确定binlog 克隆数据位置(如果binlog存在的话). cd /var/lib/mysql # 如果存在该文件,则该xrabackup是从现有的从节点克隆出来的。 if [[ -s xtrabackup_slave_info ]]; then mv xtrabackup_slave_info change_master_to.sql.in rm -f xtrabackup_binlog_info elif [[ -f xtrabackup_binlog_info ]]; then [[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1 rm xtrabackup_binlog_info echo "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\ MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.in fi if [[ -f change_master_to.sql.in ]]; then echo "Waiting for mysqld to be ready (accepting connections)" until mysql -h 127.0.0.1 -e "SELECT 1"; do sleep 1; done echo "Initializing replication from clone position" mv change_master_to.sql.in change_master_to.sql.orig mysql -h 127.0.0.1


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭