MySQL Route负载均衡与读写分离Docker环境使用
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
INDEX       NAME                                                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/acdaic4v/mysql5.7-k2                        Mysql 5.7 for use with joomla extension k2...   1                    [OK]
docker.io   docker.io/bingozhou/mysql5.7                          mysql5.7                                        1
docker.io   docker.io/eruma/java8-mysql5.7                                                                        1
docker.io   docker.io/nidorpi/rpi-mysql5.7                        MySQL for Raspberry Pi                          1
docker.io   docker.io/ymnoor21/mysql5.7                           Dockerize MySQL 5.7 on a Ubuntu 14.04 setup.    1
docker.io   docker.io/alanpeng/mysql5.7-replication-docker        https://github.com/alanpeng/mysql5.7-repli...   0                    [OK]
docker.io   docker.io/balewski/mysql5.7                                                                           0
docker.io   docker.io/bob69xxx/mysql5.7                                                                           0
docker.io   docker.io/bunchjesse/mysql5.7                         MySQL 5.7                                       0                    [OK]
docker.io   docker.io/codecloud/mysql5.7                                                                          0
docker.io   docker.io/gbyoung/mysql5.7                                                                            0
docker.io   docker.io/georgel/mysql5.7                                                                            0
docker.io   docker.io/glwang88/mysql5.7                                                                           0
docker.io   docker.io/guojicheng114/mysql5.7-replication-docker   for minsheng test                               0                    [OK]
docker.io   docker.io/hexwit/mysql5.7mb4                          Based on official mysql image, but added f...   0
docker.io   docker.io/javiersolis/mysql5.7                                                                        0
docker.io   docker.io/naturadocker/mysql5.7                                                                       0
docker.io   docker.io/pengfeifan/mysql5.7.16                                                                      0
docker.io   docker.io/phungquocphu/mysql5.7                                                                       0
docker.io   docker.io/shenrrow/mysql5.7                                                                           0
docker.io   docker.io/shepard/mysql5.7                                                                            0
docker.io   docker.io/showrisego/mysql5.7                                                                         0
docker.io   docker.io/sixgod/mysql5.7                                                                             0
docker.io   docker.io/vinodapplift/centos-mysql5.7                Cent OS 6.7 with Mysql 5.7 latest version       0
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
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> select version();
 +-----------+
 | version() |
 +-----------+
 | 5.7.16    |
 +-----------+
 1 row in set (0.00 sec)
 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[mysqld]
server-id=1
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. row ***************************
File: mysql-bin.000001
Position: 582
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
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\GSlave_IO_Running: Yes
Slave_SQL_Running: Yes
配置启动MySQL Route
vim /etc/mysqlroute
# 默认的日志插件等相关配置路径
[DEFAULT]
logging_folder = /var/log/mysqlrouter/
plugin_folder = /usr/lib64/mysqlrouter
runtime_folder = /var/run/mysqlrouter
config_folder = /etc/mysqlrouter
# 日志显示级别
[logger]
level = INFO
[keepalive]
interval = 60
# 配置主服务器的高可用,当主节点down机后自动由第二节点接手服务
[routing:failover]
bind_address = 192.168.1.205
bind_port = 10000
connect_timeout = 3
max_connections = 1024
destinations = 192.168.1.205:3000,192.168.1.205:3001
mode = read-write
# 设置从服务器的负载均衡
[routing:balancing]
bind_address = 192.168.1.205
bind_port = 10001
connect_timeout = 3
max_connections = 1024
mode = read-only
destinations = 192.168.1.205:3002,192.168.1.205:3003
systemctl start mysqlroute
测试负载均衡与读写分离

以上测试我们可以实现读操作的负载均衡,读写分离是通过我们连接MySQL Route不同的端口来实现的。
MySQL Route负载均衡与读写分离Docker环境使用的更多相关文章
- 2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离
		
技巧提示:mysql读写分离搭建好之后,配合nginx的负载均衡,可以高效的mysql的集群性能,同时免去麻烦的query分流.比如,sever1收到的请求就专门链接slave1从mysql读取数据, ...
 - 利用中间件 mysql_proxy 完成 mysql 的负载均衡和读写分离
		
安装 mysql_proxy cd /usr/local/src wget http://mysql.cdpa.nsysu.edu.tw.Downloads/MySQL - ...
 - Mycat搭建负载均衡,读写分离的Mysql集群
		
Mycat搭建负载均衡,读写分离的Mysql集群 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.Mycat-server-1.6.7.4-te ...
 - MySQL集群(三)mysql-proxy搭建负载均衡与读写分离
		
前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离. 注意:这里比较坑的就是mysql-proxy一直没有更新 ...
 - SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)
		
SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...
 - Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离
		
Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...
 - Mysql主从配置,实现读写分离
		
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
 - 黄聪:Mysql主从配置,实现读写分离
		
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
 - 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离
		
实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...
 
随机推荐
- ReentrantLock  synchronized
			
关于互斥锁: 所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们通常使用synchronized机制控制多个线程对共享资源的访问. 而现在, Lock提供了比synchr ...
 - html中的innerHTML
			
首先看个例子 <html> <head> <script type="text/javascript"> function getInnerHT ...
 - java.lang.IllegalArgumentException: Service not registered
			
java.lang.IllegalArgumentException: Service not registered 首先检查一下,Service是否在AndroidManifest文件中注册.格式如 ...
 - 网络基础相关的知识    socket模块
			
1.架构 1.C/S架构:client客户端和server服务器端 优势:能充分发挥pc机的性能 2.B/S架构:browser浏览器和server服务器 隶属于C/S架构 B/S架构 统一了 ...
 - Java按值传递、按引用传递
			
一般我们会说Java基本类型采用值传递,对象以及数组采用引用传递.但事实上这只是表面上的现象.实质上,Java都是按值传递引用.(Java中“引用”的概念相当于C++中的指针,可以不断改变值) 一,对 ...
 - TZOJ 4865 统计单词数(模拟字符串)
			
描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的 ...
 - 什么是Shell、Shell脚本
			
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...
 - Windows下Python IDLE设置
			
Windows下安装Python 2.7.5,发现IDLE是个不错的IDE,可以编辑.运行, 希望与.py文件关联起来,作为编辑器使用,经过尝试,找到了一个方法. 打开注册表,找到\KEY_CLA ...
 - linux下添加用户并赋予root权限
			
1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户#passwd tommy //修改密码Changing pass ...
 - [Selenium]当DOM结构里面有iFrame,iFrame里面是html,怎么send keys to 里面的body,怎么用Assert进行验证?
			
我在测试的过程中遇到一个这样的问题,我无法通过CssSelector找到iFrame下边的html: <div id="mailEditorDiv" style=" ...