MYSQL主从搭建
一、试验环境
新搭建两台机器(从71上链接克隆过去)
MYSQL主:jx-mysql-master-36(10.10.10.36/24)
MySQL备:jx-mysql-slave-37(10.10.10.37/24)
二、搭建环境
安装数据库
|
|
修改密码
|
|
主数据库开启binlog
|
|
修改完之后需要重启数据库
|
|
binlog工作过程:
开启binlog后无论做什么操作,binlog都会增加,Position会一直增加。
举例说明
进入数据库,查看binlog状态,重启binlog并记录下此时binlog状态。创建jx_cms数据库,查看binlog状态,删除jx_cms数据库再次查看binlog状态。
|
|
最后会发现开启binlog后无论做什么操作,binlog都会增加,Position会一直增加。
现在重置恢复初始状态。
|
|
binglog文件存储在`/var/lib/mysql/`目录内
|
|
从服务器上更改配置,
|
|
主库MASTER节点上创建从数据库用于同步事件的用户:
|
|
注意:上面SQL的作用是创建一个jxslave用户,密码为123456,并且给jxsalve用户授予replication salve权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
从库slave节点上告知从数据库同步参数
|
|
登录到从服务器上开启从服务器
|
|
注意:如果slave是connecting状态那么,测试从服务器到主服务器的3306端口通不通。放开防火墙。放开之后从服务器上重启io进程(stop slave; start slave)。
下面做个测试:主创建数据库,查看从上有没有同步过来。
master:
|
|
slave:
|
|
把之前的表导入主数据库
|
|
从数据库同步成功:
|
|
MYSQL主从同步原理
MYSQL读写分离
三、所需环境
使用上次试验的36、37主从
代理服务器(从71上克隆一台叫做jx-mysql-proxy-31,ip:10.10.10.31/24)
软件:amoeba
四、搭建过程
使用amoeba软件实现mysql读写分离:
总结:
写操作(Write) 是指对数据库数据的修改,包括插入、更新和删除。
读操作(Read) 是指从数据库中查询数据,不做修改。
在读写分离架构中,写操作发生在主数据库,读操作通常分配给从数据库。
把`amoeba-mysql-binary-2.1.0-RC5.tar.gz`通过网关服务器(254)上传到代理服务器(31)上,创建目录并解压到该目录。
|
|
master(36)上创建一个数据库用户jxadmin,密码123456。现在数据库使用了主从模式,我们只需在主上创建用户,从上会自动同步。
|
|
读写分离的原理是:
用户从客户端访问进来,先到代理服务器(amoeba),如果是写动作,代理会将动作传递到master(36)上,master(36)写入后binlog中记录了这次写入,同步给slave。如果是读动作,代理会将动作随机分配到master(36)或者slave(37)上。这样相当于写都是由master处理,读是由master和slave共同承担,减轻了master负担。
开始配置代理(amoeba):
首先需要配置两个组(读组 readGroup、写组 writeGroup),master同时属于读组 readGroup和写组 writeGroup,而slave只属于读组 readGroup。
下面看代理软件配置:
conf/dbServers.xml
|
|
conf/amoeba.xml
|
|
bin/amoeba
|
|
xss参数需要大于128k才能启动。
启动amoeba。
|
|
下面开始测试。开启运维服务器(81)安装mysql客户端向代理(31)请求数据。
由于我们代理软件默认设置的算法是轮询(robin),所以查询请求通过代理软件会轮流发送给master(36)和slave(37)。这个算法可以选择1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA。在conf/dbServer.conf中配置。
|
|
运维服务器连接代理软件。注意此时代理软件监听端口是3306
|
|
使用查询功能,同时在代理软件(31)上开启抓包,抓3306端口。多次查询观察数据包走向。
|
|
|
|
测试写入,多次插入数据,观察数据包走向。
|
|
第一次插入数据:
|
|
第二次插入数据
|
|
为了验证读写分离是否生效,我们将master上mysql服务停止,然后从运维服务器(81)上连接代理(31)进行写操作。
|
|
此时代理软件报错信息如下:
|
|