资料内容:
2、读写分离配置
我们要注意,目前我们的这个MySQL主从集群是单向的,也就是只能从主服务同
步到从服务,而从服务的数据表更是无法同步到主服务的。
所以,在这种架构下,为了保证数据一致,通常会需要保证数据只在主服务上
写,而从服务只进行数据读取。这个功能,就是大名鼎鼎的读写分离。但是这里要
注意下,mysql主从本身是无法提供读写分离的服务的,需要由业务自己来实现。
这也是我们后面要学的ShardingSphere的一个重要功能。
到这里可以看到,在MySQL主从架构中,是需要严格限制从服务的数据
写入的,一旦从服务有数据写入,就会造成数据不一致。并且从服务在
执行事务期间还很容易造成数据同步失败。
如果需要限制用户写数据,我们可以在从服务中将read_only参数的值设
为1( set global read_only=1; )。这样就可以限制用户写入数据。
但是这个属性有两个需要注意的地方:
1、read_only=1设置的只读模式,不会影响slave同步复制的功能。 所
以在MySQL slave库中设定了read_only=1后,通过 "show slave
status\G" 命令查看salve状态,可以看到salve仍然会读取master上的日
志,并且在slave库中应用日志,保证主从数据库同步一致;
2、read_only=1设置的只读模式, 限定的是普通用户进行数据修改的操
作,但不会限定具有super权限的用户的数据修改操作。 在MySQL中设
置read_only=1后,普通的应用用户进行insert、update、delete等会
产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数
据变化的错误,但具有super权限的用户,例如在本地或远程通过root用
户登录到数据库,还是可以进行数据变化的DML操作; 如果需要限定
super权限的用户写数据,可以设置super_read_only=0。另外 如果要
想连super权限用户的写操作也禁止,就使用"flush tables with read
lock;",这样设置也会阻止主从同步复制!
3、其他集群方式
我们到这里搭建出了一个一主一从的MySQL主从同步集群,具有了数据同步的基
础功能。而在生产环境中,通常会以此为基础,根据业务情况以及负载情况,搭建
更大更复杂的集群。
例如为了进一步提高整个集群的读能力,可以扩展出一主多从。而为了减轻主节
点进行数据同步的压力,可以继续扩展出多级从的主从集群。
为了提高整个集群的高可用能力,可以扩展出多主的集群。
我们也可以扩展出互为主从的互主集群甚至是环形的主从集群,实现MySQL多活
部署。
搭建互主集群只需要按照上面的方式,在主服务上打开一个slave进程,并且指向
slave节点的binlog当前文件地址和位置。