主機名 | 部署服務 | 備註 |
---|---|---|
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的從服務器 |
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
java
docker search mysql5.7
mysql
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
git
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
github
受權用戶能夠登陸MySQLsql
docker exec -it MySQL_Master1 /bin/bash
mysql -uroot -p123456
grant all privileges on *.* to 'federico'@'%' identified by '123456';
docker
測試宿主機是否能夠鏈接至MySQL容器數據庫
mysql -h 192.168.1.205 -ufederico -P3000 -p123456
vim
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)]>
查看容器IP地址信息centos
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.5bash
配置主主複製與主從複製
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\G
Slave_IO_Running: Yes Slave_SQL_Running: Yes
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不一樣的端口來實現的。