Docker环境描述

主机名 部署服务 备注
MySQL Route MySQL Route 部署在宿主机上的MySQL Route服务
MySQL Master1 MySQL 5.7.16 Docker环境与MySQL Master2互为主从
MySQL Master2 MySQL 5.7.16 Docker环境与MySQL Master1互为主从
MySQL Slave1 MySQL 5.7.16 Docker环境是MySQL Master1的从服务器
MySQL Slave2 MySQL 5.7.16 Docker环境是MySQL Master2的从服务器

宿主机服务部署

下载安装MySQL Route软件包

wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.11-1.el7.x86_64.rpm

rpm -ivh mysql-router-8.0.11-1.el7.x86_64.rpm

下载MySQL镜像

docker search mysql5.7

  1. INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  2. docker.io docker.io/acdaic4v/mysql5.7-k2 Mysql 5.7 for use with joomla extension k2... 1 [OK]
  3. docker.io docker.io/bingozhou/mysql5.7 mysql5.7 1
  4. docker.io docker.io/eruma/java8-mysql5.7 1
  5. docker.io docker.io/nidorpi/rpi-mysql5.7 MySQL for Raspberry Pi 1
  6. docker.io docker.io/ymnoor21/mysql5.7 Dockerize MySQL 5.7 on a Ubuntu 14.04 setup. 1
  7. docker.io docker.io/alanpeng/mysql5.7-replication-docker https://github.com/alanpeng/mysql5.7-repli... 0 [OK]
  8. docker.io docker.io/balewski/mysql5.7 0
  9. docker.io docker.io/bob69xxx/mysql5.7 0
  10. docker.io docker.io/bunchjesse/mysql5.7 MySQL 5.7 0 [OK]
  11. docker.io docker.io/codecloud/mysql5.7 0
  12. docker.io docker.io/gbyoung/mysql5.7 0
  13. docker.io docker.io/georgel/mysql5.7 0
  14. docker.io docker.io/glwang88/mysql5.7 0
  15. docker.io docker.io/guojicheng114/mysql5.7-replication-docker for minsheng test 0 [OK]
  16. docker.io docker.io/hexwit/mysql5.7mb4 Based on official mysql image, but added f... 0
  17. docker.io docker.io/javiersolis/mysql5.7 0
  18. docker.io docker.io/naturadocker/mysql5.7 0
  19. docker.io docker.io/pengfeifan/mysql5.7.16 0
  20. docker.io docker.io/phungquocphu/mysql5.7 0
  21. docker.io docker.io/shenrrow/mysql5.7 0
  22. docker.io docker.io/shepard/mysql5.7 0
  23. docker.io docker.io/showrisego/mysql5.7 0
  24. docker.io docker.io/sixgod/mysql5.7 0
  25. docker.io docker.io/vinodapplift/centos-mysql5.7 Cent OS 6.7 with Mysql 5.7 latest version 0
  26. docker.io docker.io/yangguohai/mysql5.7

docker pull docker.io/acdaic4v/mysql5.7-k2

创建MySQL服务容器,并映射宿主机端口

docker run -it --name MySQL_Master1 -e MYSQL_ROOT_PASSWORD='123456' -p 3000:3306 docker.io/acdaic4v/mysql5.7-k2

docker run -it --name MySQL_Master2 -e MYSQL_ROOT_PASSWORD='123456' -p 3001:3306 docker.io/acdaic4v/mysql5.7-k2

docker run -it --name MySQL_Slave1 -e MYSQL_ROOT_PASSWORD='123456' -p 3002:3306 docker.io/acdaic4v/mysql5.7-k2

docker run -it --name MySQL_Slave2 -e MYSQL_ROOT_PASSWORD='123456' -p 3003:3306 docker.io/acdaic4v/mysql5.7-k2

授权MySQL数据库连接,并测试是否可以从宿主机直连

  • 授权用户可以登录MySQL

docker exec -it MySQL_Master1 /bin/bash

mysql -uroot -p123456

grant all privileges on *.* to 'federico'@'%' identified by '123456';

  • 测试宿主机是否可以连接至MySQL容器

mysql -h 192.168.1.205 -ufederico -P3000 -p123456

  1. Welcome to the MariaDB monitor. Commands end with ; or \g.
  2. Your MySQL connection id is 3
  3. Server version: 5.7.16 MySQL Community Server (GPL)
  4. Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
  5. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  6. MySQL [(none)]> select version();
  7. +-----------+
  8. | version() |
  9. +-----------+
  10. | 5.7.16 |
  11. +-----------+
  12. 1 row in set (0.00 sec)
  13. MySQL [(none)]>

配置当前MySQL服务的主主复制以及主从复制

  • 查看容器IP地址信息

docker inspect --format '{{ .NetworkSettings.IPAddress }}' MySQL_Master1

172.16.86.2

docker inspect --format '{{ .NetworkSettings.IPAddress }}' MySQL_Master2

172.16.86.3

docker inspect --format '{{ .NetworkSettings.IPAddress }}' MySQL_Slave1

172.16.86.4

docker inspect --format '{{ .NetworkSettings.IPAddress }}' MySQL_Slave2

172.16.86.5

  • 配置主主复制与主从复制

1.主主复制

docker exec -it MySQL_Master1 /bin/bash

安装vim用于后续修改MySQL配置文件

apt-get update && apt-get install vim

修改MySQL配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

  1. [mysqld]
  2. server-id=1
  3. log-bin=mysql-bin

重启MySQL容器,让修改的配置文件生效,注意此配置需要在另外几台服务器做相同操作

docker stop MySQL_Master1 && docker start MySQL_Master1

mysql -u root -p123456

Master上的SQL操作(以此为例其余都需要正确配置)

grant replication slave on *.* to 'slave'@'%' identified by '123456';

flush privileges;

show master status\G

  1. *************************** 1. row ***************************
  2. File: mysql-bin.000001
  3. Position: 582
  4. Binlog_Do_DB:
  5. Binlog_Ignore_DB:
  6. Executed_Gtid_Set:
  7. 1 row in set (0.00 sec)

Slave上的操作

stop slave;

change master to master_host='172.16.86.2',master_user='slave',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=582;

start slave;

show slave status\G

  1. Slave_IO_Running: Yes
  2. Slave_SQL_Running: Yes

配置启动MySQL Route

vim /etc/mysqlroute

  1. # 默认的日志插件等相关配置路径
  2. [DEFAULT]
  3. logging_folder = /var/log/mysqlrouter/
  4. plugin_folder = /usr/lib64/mysqlrouter
  5. runtime_folder = /var/run/mysqlrouter
  6. config_folder = /etc/mysqlrouter
  7. # 日志显示级别
  8. [logger]
  9. level = INFO
  10. [keepalive]
  11. interval = 60
  12. # 配置主服务器的高可用,当主节点down机后自动由第二节点接手服务
  13. [routing:failover]
  14. bind_address = 192.168.1.205
  15. bind_port = 10000
  16. connect_timeout = 3
  17. max_connections = 1024
  18. destinations = 192.168.1.205:3000,192.168.1.205:3001
  19. mode = read-write
  20. # 设置从服务器的负载均衡
  21. [routing:balancing]
  22. bind_address = 192.168.1.205
  23. bind_port = 10001
  24. connect_timeout = 3
  25. max_connections = 1024
  26. mode = read-only
  27. destinations = 192.168.1.205:3002,192.168.1.205:3003

systemctl start mysqlroute

测试负载均衡与读写分离

  以上测试我们可以实现读操作的负载均衡,读写分离是通过我们连接MySQL Route不同的端口来实现的。

MySQL Route负载均衡与读写分离Docker环境使用的更多相关文章

  1. 2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离

    技巧提示:mysql读写分离搭建好之后,配合nginx的负载均衡,可以高效的mysql的集群性能,同时免去麻烦的query分流.比如,sever1收到的请求就专门链接slave1从mysql读取数据, ...

  2. 利用中间件 mysql_proxy 完成 mysql 的负载均衡和读写分离

      安装 mysql_proxy       cd /usr/local/src       wget http://mysql.cdpa.nsysu.edu.tw.Downloads/MySQL - ...

  3. Mycat搭建负载均衡,读写分离的Mysql集群

    Mycat搭建负载均衡,读写分离的Mysql集群 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.Mycat-server-1.6.7.4-te ...

  4. MySQL集群(三)mysql-proxy搭建负载均衡与读写分离

    前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离. 注意:这里比较坑的就是mysql-proxy一直没有更新 ...

  5. SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)

    SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...

  6. Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离

    Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...

  7. Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  8. 黄聪:Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  9. 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

    实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...

随机推荐

  1. cf-Round542-Div2-B(贪心)

    题目链接:http://codeforces.com/contest/1130/problem/B 思路: 贪心题.定义结构体数组a,a[i].x[0],a[i].x[1]分别表示i出现的第一个下标和 ...

  2. STL容器的常用用法

    STL: 1.vector: vector<int> v;vector<int> v(10);//定义大小为10的int型向量容器.vector<int> v(10 ...

  3. Maven项目的拆分与聚合

    ---------------------siwuxie095                                     Maven 项目的拆分与聚合         1.对已有的 Ma ...

  4. spring框架之依赖注入(DI)

    1. IOC和DI的概念 * IOC -- Inverse of Control,控制反转,将对象的创建权反转给Spring!! * DI -- Dependency Injection,依赖注入,在 ...

  5. 相机拍摄时最重要的三个参数——光圈、快门、ISO

    注:这篇文章我四年前发布在其他地方,现在移过来. 如果你对相机只有很少了解,那么看这篇文章再好不过啦,我结合很多资料,力图用最通俗易懂的方式进行讲解. 相机拍摄时最重要的3个参数就是——光圈.快门.I ...

  6. MVC FormCollection 无法获取值的问题

     把action定义为[HttpPost],并且ajax.beginform中ajaxoption中定义为Post,在提交表单时就可以获取FormCollection的值了.httpGet或者后台不定 ...

  7. HDFS高可用性及其分布式系统思想基础

    源自单点失效问题,也就是当NameNode不可用的时候,用什么办法可以平滑过渡? 最直接的办法是再添加一个备用的NN,这就产生了Active NameNode和Standby NameNode的设计思 ...

  8. JMeter Ant Task 生成的*.jtl打开之后request和response data是空的,怎样让其不是空的呢?

    JMeter Ant Task 生成的*.jtl打开之后request和response data是空的,怎样让其不是空的呢?修改JMeter.properties,将jmeter.save.save ...

  9. filter 死循环(tomcat 启动完成 ,自动执行filter.dofilter,导致tomcat 启动超时) , tomcat 启动和 servers 启动 不同

    package com.diancai.interceptor; import java.io.IOException; import javax.servlet.Filter; import jav ...

  10. 向文件写入一个数据块---write

    函数原型:ssize_t write(int fd,const void *buf,size_t count); 参数说明:fd:文件描述符,buf:写入数据的缓冲区,count:写入数据的最大长度. ...