在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是安全性,高可用性,还是高并发性等各个方面都是不能满足实际需求,因此,一般来说都是通过主从复制的方式来同步诗句,再通过读写分离来提升数据库的并发负载能力这样的方案来实施和部署。
MYSQL主从复制的原理
MYSQL的主从复制和MYSQL的读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。
MYSQL读写分离原理
读写分离就是只在主服务器上写,只能在从服务器上读。基本原理就是让主数据库处理事务性查询,从而数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到群集分钟的从数据库。
基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器建立到客户端请求通过判断后转发到后端数据库。这里我们用的是Amoeba。
实验所需用到的包和整理的脚本链接: https://pan.baidu.com/s/1papoUzo9sIVWs2QaIpdOWg 密码: qm2g
主服务器IP:192.168.175.128
从服务器IP1:192.168.175.141
从服务器IP2:192.168.175.142
代理服务器地址:192.168.175.133
实验如下:
实验开始前首先把所有服务器的防火墙关掉
首先我们需要时主从服务器的时间进行同步
在主服务器上的etc下ntp.conf这个文件的最后进行插入插入服务器的地址段,但这里使用127来指明不要用真实地址段。退出文件后开启ntp服务
在两台从服务器上指定主服务器的地址进行同步。
下面要进行的操作的是主从复制
首先回到主服务器上在etc下面的my.cnf文件下进行修改,如文件里没有的自行添加
下面对住服务器的数据库进行操作
首先创建个用户给权限,在刷新使数据库立即生效,在显示主从同步状态
下面回到从服务器上操作
在两台从服务器上etc下面的my.cnf文件下进行修改,如文件里没有的自行添加
进入数据库指定主服务器地址和二进制日志和节点,在这里要注意的是主服务器的节点经常会改变,所有在进行操作前要确认主服务器的节点和二进制日志。开启主从同步,显示主从同步状态,这里需要看到两个yes。
为了验证主从同步是否成功可以在主服务器上创建一个数据库来验证
下面要进行的代理服务器上的操作
安装java环境
在etc下面的profile文件最下面这段话,在使用source刷新这个文件,这个文件会改变系统的环境变量
在这里我们需要开放权限给amoeba,所以回到主服务器和从服务器上开放权限
创建一个amoeba文件来放一会我们解压的文件
修改amoeba两个配置文件
首先设置一个用户来使客户端能访问服务器
指定写是主读是从
编辑下个文件
设置一个代理访问服务器的用户
指定主服务器的地址
指定两台从服务器地址
因为之前修改了从服务器的名字文slave所以下面要更改过来
使用/usr/local/amoeba/bin/amoeba start&来开启amoeba代理服务
可以使用netstat -ntap | grep java来查看监听地址和端口
这里所有的服务就算完成了,在客户端的数据库可以使用mysql -u amoeba -p123456 -h 192.168.175.133 -P 8066
这里指定登录用户问amoeba 密码为123456 地址为代理服务器地址 -P指定端口
为了验证读写是否分离,可以现在三代服务器上创建一个表,在每个表里各写一段不同的数据,之后再两台从服务器上使用 stop slave; 来关闭主从
之后再客户端查看表里的内容若只能显示从服务器的信息。在客户端插入一条信息只有主服务器才能开到。这样实验就算完成了就算完成了。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。