搭建mysql主从复制及读写分离高可用基础架构(上)

2018-9-16 杰克 HA高可用高并发

      手上有一个网站客户,使用mysql作为后端数据库。因为特殊的业务模式导致mysql的资源占用很大,于是一直都想搭建部署一套基于mysql的主从复制架构来实现数据库读写分离,缓解目前仅一台mysql造成的资源压力。

      逻辑拓扑很简单,三台服务器。一台作为主服务器负责web端写入数据,一台作为从服务器负责数据同步及web程序读取数据。另外一台作为web程序端。要实现读写分离,首先要搭建mysql主从复制环境来确保读写服务器的数据一致。

主从读写.jpg

      linux操作系统及mysql安装过程就不再赘述,记得关闭防火墙。这里主要列出配置过程。我的mysql版本是5.6.41 首先作为从服务器要从主服务器上读取数据并同步复制到本地需要一个专门用来同步复制数据的mysql账户,即需要创建一个专门用于同步复制数据的账户。mysql用于主从数据同步复制的功能叫 replication 所以在使用grant命令进行账户创建授权时需跟上这个命令。这里我在主mysql创建了一个用户名“sync01”密码“sync123456”的用于同步复制的账户,为了安全配置只允许从服务器的IP 192.168.1.232 登录

sync01.png

       mysql数据库的主从复制功能是复制执行主服务器数据库的binlog二进制日志来具体实现的,主服务器对数据库的任何改动语句都会记录到binlog文件当中。简单的说就是把一个服务器上执行过的sql语句在别的服务器上也重复执行一遍,从而实现数据的同步复制。而复制模式又有语句、行、混合(语句方式容易出错,基本不用。行模式产生日志文件较大。混合模式综合以上二者优点)等三种方式。在这里使用的是混合方式。无论采用哪种方式,都要在主mysql服务器打开my.cnf文件配置binlog_format项,这里使用混合模式(mixed)   binlog-ignore-db 表示排除不复制的库,server-id 是服务器的唯一ID号和从服务器不能相同。 read-only = 0 表示数据库可读写,设置为1 表示只读,从数据库可设置为1  注意:以上配置项均要在my.cnf里的 [mysqld] 下

master-conf.png

       配置完主服务器my.cnf文件后保存并重启主服务器数据库,然后登录mysql执行 show master status\G 命令,得到以下内容可以看到排除的数据库(第四行)。记录下第一行和第二行内容:File 和 Position  后面配置从服务器会用到。至此,主服务器mysql配置完成。

master-status.png

       从服务器的配置跟主服务器一样,打开my.cnf 配置排除数据库及中继日志名称。server-id 必须跟主服务器不一样,这里为2  设置 read-only = 1 表示从服务器可以同步主服务器数据但不能写入数据,只做数据读取。配置完成后保存并重启mysql

slave-conf.png

       从服务器重启mysql后登录mysql 依次执行以下命令并回车,最后二行即在主服务器上执行 show master status\G 命令 所显示的第一行和第二行内容

slave-MASTER.png

       完成后在从服务器mysql执行 show slave status\G 命令,发现已成功连接主服务器mysql  下面红框内二项显示为 Yes 即为连接成功

slave-status.png

       从服务器连接同步复制成功后,在主服务器使用 netstat -tlnap 命令查看连接。发现从服务器已经连接到主服务器mysql数据库

netstat.png

       后面测试同步效果,在主服务器上创建一个名为test的数据库,然后登陆从数据库发现test库已经同步过来

cp.png

       至此,mysql的主从复制配置已完成。这里只是一个简单的单向的主从复制配置,实际生产环境可能会有一主多从、双主互备、级联复制等各种复杂环境,要配置的参数远比这种简单环境多很多。大家可以自行测试。下一篇将配置mysql读写分离的实现

标签: 主从复制 MySQL 高可用 读写分离

发表评论:

Powered by emlog 京ICP备17037512-1 e-mail:jackhkyin@163.com QQ:393147796