暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

UDP_mysql主备模式(docker编排)

loulou分享 2017-10-11
255

一、Docker安装

根据操作系统,根据docker官方要求,安装docker环境。

二、镜像重构

   docker pull hub.c.163.com/library/mysql:latest

本地持久化:D:\docker\servers\mysql\data:/var/lib/mysql

D:\docker\servers\mysql\etc\my-master.cnf etc/mysql/my.cnf(主)

D:\docker\servers\mysql\etc\my-slave.cnf etc/mysql/my.cnf(备)

Docker tag hub.c.163.com/library/mysql localhost:5000/mysql

Docker push localhost:5000/mysql

docker run -p 3306:3306  -v D:\docker\servers\mysql\data:/var/lib/mysql --name mysql -e MYSQL_ROOT_PASSWORD=loulou -e MYSQL_DATABASE=sdb -d localhost:5000/mysql

docker exec -it -u mysql  mysql /bin/bash  //密码loulou

 

三、compose编排

在需要编排的组合的compost的yml文件中,增加mysql的容器配置。若需要增加主备模式,参考附录

  mysql:

    image: localhost:5000/mysql

    ports:

      - "3306:3306"

    environment:

      - MYSQL_ROOT_PASSWORD=loulou

      - MYSQL_DATABASE=sdb

    volumes:  

      - D:\docker\servers\mysql\data:/var/lib/mysql

    cap_add:

      - NET_ADMIN

    hostname: mysql

    restart: always

 

四、高可用模式

  常见的mysql的高可用模式,可分为以下几种:

  1. 互备模式 :资源紧张时可考虑

  2. 一主一备模式 :常用模式

  3. 一主多备模式 :读性能扩展

  4. 备份传递 :多中心模式

  5. 集群模式 :高性能需求

      备份模式的相关案例,可通过下图docker部署案例实现,供日常环境验证:

           

五、高可用构建

  1. 复制参数梳理

参考各个节点的cnf文件,内容上在mysqld服务端模块:

server-id=200  #服务器ID,节点不能重复

log-bin=mysql-bin  #binlog日志文件名,不需要修改

innodb_flush_log_at_trx_commit=2  #[复制上游]保证一致性 性能

sync_binlog=1   #[复制上游]保证一致性 性能

log_slave_updates=1   #[多级复制]多级复制中中间节点通过该选项进行操作日志传输

replicate-wild-do-table=udp.%  #[复制上游] 复制范围-白名单

replicate-wild-do-table=oup.%  #[复制上游] 复制范围-白名单

#replicate-wild-ignore-table=mysql.% #[复制上游] 复制范围-黑名单

 

  1. Compose编排

构建目录以及mysql配置,并构建启动配置,依据第四章节图初始化如下:


D:\docker\compose\docker-compose-mysql.yml

注:在其中一个节点需要挂载D:\docker\servers\mysql\conf:/conf 方便自动化挂载主备模式。

  1. 初始化主备关系

登录挂载mysql容器的/conf目录节点的数据库,然后执行以下脚本初始化主备节点。

/mysql-rep-list.sh  #包含主备节点注册清单,首次全量安装使用。

/mysql-m-s.sh $1 $2 #单个主备链条增加时,一句话快速挂载。

注意:1、$1为上游节点  $2为下游备份节点。

      2、详细的上游节点和下游备份节点操作,参考脚本(附录也可以)

      3、由于不能挂载附件,sh脚本的内容若有需要,加我微信。

 

  1. 测试验证

   0-master:新增udp,然后建表,增加数据。验证1-master、0-slave1、0-slave2、1-slave1

  1-master:新增oup,然后建表,增加数据。验证0-master、0-slave1、0-slave2、1-slave1

 

六、操作命令-全部

Compost.bat mysql up -d  [restart/stop/rm]

Docker exec -it compose_mysql_1 /bin/bash

/conf/mysql-rep-list.sh

七、附录

  1. 主备关系清单--手工脚本

1-master-->0-master:(由0-master的cnf文件决定复制库oup) 【注意根据上游节点,调整bin文件和pos数值】

1-master:【关注File/Position】

GRANT FILE ON *.* TO 'root'@'0-master' IDENTIFIED BY 'loulou';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'0-master' IDENTIFIED BY 'loulou';

FLUSH PRIVILEGES;

show master status;

0-master:[调整master_log_file/master_log_pos]

stop slave;

change master to master_host='1-master',master_port=3306,master_user='root',master_password='loulou',master_log_file='mysql-bin.000003', master_log_pos=873;

commit;

start slave;

show slave status\G;

 

 

 

 

0-master-->1-master(由1-master的cnf文件决定复制库udp) 【注意根据上游节点,调整bin文件和pos数值】

0-master: 【关注File/Position】

GRANT FILE ON *.* TO 'root'@'1-master' IDENTIFIED BY 'loulou';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'1-master' IDENTIFIED BY 'loulou';

FLUSH PRIVILEGES;

commit;

show master status;

1-master: [调整master_log_file/master_log_pos]

stop slave;

change master to master_host='0-master',master_user='root',master_password='loulou',master_log_file='mysql-bin.000004', master_log_pos=6336;

start slave;

show slave status\G;

0-master-->0-slave1(udp/oup) 【注意根据上游节点,调整bin文件和pos数值】

0-master: 【关注File/Position】

GRANT FILE ON *.* TO 'root'@'0-slave1' IDENTIFIED BY 'loulou';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'0-slave1' IDENTIFIED BY 'loulou';

FLUSH PRIVILEGES;

show master status;

0-slave1: [调整master_log_file/master_log_pos]

stop slave;

change master to master_host='0-master',master_user='root',master_password='loulou',master_log_file='mysql-bin.000005', master_log_pos=6187;

start slave;

show slave status\G;

 

0-master-->1-slave1【注意根据上游节点,调整bin文件和pos数值】

0-master: 【关注File/Position】

GRANT FILE ON *.* TO 'root'@'1-slave1' IDENTIFIED BY 'loulou';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'1-slave1' IDENTIFIED BY 'loulou';

FLUSH PRIVILEGES;

show master status;

1-slave1: [调整master_log_file/master_log_pos]

stop slave;

change master to master_host='0-master',master_user='root',master_password='loulou',master_log_file='mysql-bin.000005', master_log_pos=6938;

start slave;

show slave status\G;

 

 

 

0-slave1-->0-slave2【注意根据上游节点,调整bin文件和pos数值】

0-slave1: 【关注File/Position】

GRANT FILE ON *.* TO 'root'@'0-slave2' IDENTIFIED BY 'loulou';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'0-slave2' IDENTIFIED BY 'loulou';

FLUSH PRIVILEGES;

show master status;

0-slave2: [调整master_log_file/master_log_pos]

stop slave;

change master to master_host='0-slave1',master_user='root',master_password='loulou',master_log_file='mysql-bin.000005', master_log_pos=2717;

start slave;

show slave status\G;

  1. 主备关系清单--自动脚本

 

Mysql-rep-list.sh

#!/bin/bash                         

                                    

/conf/mysql-m-s.sh 1-master 0-master

/conf/mysql-m-s.sh 0-master 1-master

/conf/mysql-m-s.sh 0-master 0-slave1

/conf/mysql-m-s.sh 0-master 1-slave1

/conf/mysql-m-s.sh 0-slave1 0-slave2

mysql-m-s.sh

#!/bin/bash

 

MASTER_NODE=$1

SLAVE_NODE=$2

ROOT_PASSWD=loulou

 

LOGFILE=/conf/$MASTER_NODE----$SLAVE_NODE.log

 

echo "mysql $MASTER_NODE init start!!!"

mysql -h $MASTER_NODE -uroot -p$ROOT_PASSWD<< EOF

GRANT FILE ON *.* TO 'root'@'$SLAVE_NODE' IDENTIFIED BY '$ROOT_PASSWD';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'$SLAVE_NODE' IDENTIFIED BY '$ROOT_PASSWD';

FLUSH PRIVILEGES;

show master status;

EOF

mysql -h $MASTER_NODE -uroot -p$ROOT_PASSWD -e "show master status">>$LOGFILE

 

mysql -h $MASTER_NODE -uroot -p$ROOT_PASSWD -e "show master status">$LOGFILE.txt

FILENAME=`grep mysql-bin $LOGFILE.txt | cut  -f1`

POSITION=`grep mysql-bin $LOGFILE.txt | cut  -f2`

 

rm -f $LOGFILE.txt

echo "FILENAME:$FILENAME">>$LOGFILE

echo "POSITION:$POSITION">>$LOGFILE

 

echo "mysql $MASTER_NODE init end!!!">>$LOGFILE

 

echo "mysql $SLAVE_NODE init start!!!">>$LOGFILE

mysql -h $SLAVE_NODE -uroot -p$ROOT_PASSWD<< EOF

stop slave;

change master to master_host='$MASTER_NODE',master_user='root',master_password='$ROOT_PASSWD',master_log_file='$FILENAME', master_log_pos=$POSITION;

start slave;

show slave status\G;

EOF

 

mysql -h $SLAVE_NODE -uroot -p$ROOT_PASSWD -e "show slave status\G">>$LOGFILE

echo "mysql SLAVE_NODE init end!!!">>$LOGFILE


文章转载自loulou分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论