主从复制
流程图
所用到的软件
Docker+haproxy(负载均衡)+MySQL
启动三台MySQL服务器
拉取 MySQL 镜像:
1 | docker pull mysql:5.7 |
启动三个容器,并同时修改它们的MySQL配置文件,修改配置文件中的四项:
- –server-id:设置一个唯一的id(正整数就行,集群中id不能重复)
- –log-bin:启动二进制日志并设置二进制日志文件的名字
- –character-set-server:设置编码
- –collation-server:设置效验规则
1
2
3
4
5docker run --name mysql13306 -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.7.24 --server-id=1 --log-bin=mysql-bin --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run --name mysql13307 --link mysql13306:mysqlmaster -d -p 13307:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.7.24 --server-id=2 --log-bin=mysql-bin --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run --name mysql13308 --link mysql13306:mysqlmaster -d -p 13308:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.7.24 --server-id=3 --log-bin=mysql-bin --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci设置主服务器
创建好服务器之后,我们需要首先连接主服务器并做以下设置:
1、创建复制用的账号
我们需要在主服务器上创建一个账号,然后从服务器就可以使用这个账号连接到主服务器并读取二进制文件实现数据同步。
在主服务器上执行以下 SQL 语句
1 | GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '111111'; |
2、查看主服务器状态
创建好账号之后,我们还需要查看一下当前主服务器上二进制日志的状态,在后面配置从服务器时需要使用。
执行以下 SQL 语句查看:
1 | show master status |
注意 : 得到这两个值之后,不要再对主服务器有任何 SQL 的写操作(否则这两个值还会变)直到从服务器配置成功。
到此主服务器配置完成,接下来我们需要配置两个从服务器。
设置从服务器
在两个从服务器上执行以下三条 SQL 语句:
1 | stop slave; # 先停止复制功能 |
查看主从状态
到此已经配置成功了,我们需要在两个从服务器上执行以下 SQL 查看是否成功
1 | show slave status; |
成功时以下两项都为 Yes :
到此就配置完成了,现在我们向主服务器上的所有写操作都会自动同步到从服务器上。
测试
配置完之后,在主服务器上新建数据库
1 | create database test_master_slave |
然后到两个从服务器上查看会发现同样都有这个数据库:
负载均衡
接下来我们需要安装并配置一个负载均衡服务器,对两台从服务器进行请求的转发。
拉取haproxy镜像
首先我们要下载 haproxy 的镜像:
1 | docker pull haproxy:1.5.19-alpine |
运行容器
创建负载均衡容器
1 | docker run --name haproxy -d -p 13333:3306 --link mysql13307:mysql1 --link mysql13308:mysql2 haproxy:1.5.19-alpine |
创建之后,发现该容器无法启动,这是因为我们还没有为它编写好配置文件,所以我们需要编写负载均衡配置文件。
配置
先在本机中创建一个配置文件,文件名为 haproxy.cfg 。
1、编写配置文件
haproxy.cfg
1 | global |
2、复制配置文件到容器中
编写好配置文件之后,我们需要把配置文件复制到容器中:
1 | docker cp 本地路径/haproxy.cfg haproxy:/usr/local/etc/haproxy/haproxy.cfg |
3、启动容器
有了配置文件之后,我们就可以启动负载均衡的容器了。
1 | docker start haproxy |
现在就可以通过 127.0.0.1:13333
端口连接负载均衡了。
Laravel 中配置主从
接下来,我们将京西商城的 api 接口项目和数据库集群结合实现程序上的 读、写分离
。
1、导入商城数据库
在主服务器上创建 jxshop 商城,并将项目中的 jxshop.sql 到主服务器执行一遍以导入商城数据库结构。
2、修改 Laravel 中的配置文件
在 mysql 中添加 read 和 write 两个数组,在这两个数组中分别设置读、写服务器的账号信息,相同的配置项可以写到数组的外面。
config/database.php
1 | 'mysql' => [ |
[mark] (参考自我的上课讲义) 未完待续!