在一个系统中,如果只使用一个mysql数据库,难以承受大并发量,系统的高可用性差。搭建mysql集群,分为主节点和从节点,通过主从复制实现数据备份、故障转移、MySQL集群、高可用、读写分离。而在平时的正常运行中,对数据库的读操作比写操作多得多,实现读写分离可以有效地减轻单台数据库的压力
下面介绍主从复制步骤
1.分别在主从节点上 vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=36 //[必须]服务器唯一ID
2.授权主节点允许远程访问
GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by 'root';
flush privileges;
show master status;
记住File以及Position
3.配置从节点供主节点访问
change master to master_host='192.168.1.36',master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=786;
flush privileges;
start slave;
show slave status;
看Slave_IO_Running、Slave_SQL_Running状态,为Yes则表明设置成功
这样主从复制就已经配置成功了。
测试可知,在master新建一个数据库,slave会进行同步。
下面介绍读写分离步骤
1.安装Mycat(系统要预先装好jdk)
wget http://dl.mycat.io/1.6.6/Mycat-server-1.6.6.1-test-20180729105217-linux.tar.gz
tar -zxvf Mycat* -C /usr/local
2.配置环境变量
vim /etc/profile
export MYCAT_HOME=/usr/local/mycat
export PATH=${JAVA_HOME}/bin:${MYCAT_HOME}/bin:${PATH}
3.配置用户
vim /usr/local/mycat/conf/server.xml
设置用户名、密码、数据库名
4.配置读写分离
vim /usr/local/mycat/conf/schema.xml
<dataNode name="dn4" dataHost="slave" database="glo-index"/>
<dataHost name="slave" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100" maxRetryCount="4">
<heartbeat>show slave status</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.1.36:3306" user="root"
password="root">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.1.60:3306" user="root" password="root" />
</writeHost>
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
注意两个参数:
balance:负载均衡类型
- balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡
- balance="2",所有读操作都随机的在writeHost、readhost上分发。
- balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
switchType:切换模式
- switchType='-1' 表示不自动切换
- switchType='1' 默认值,表示自动切换
- switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
- switchType='3' 基于MySQL galary cluster的切换机制(适合集群
因此,该配置文件中的balance="1"意味着作为stand by writeHost的hostS1和hostS2将参与select语句的负载均衡,这就实现了主从的读写分离,switchType='-1'意味着当主挂掉的时候,不进行自动切换,即hostS1和hostS2并不会被提升为主,仍只提供读的功能。这就避免了将数据写进slave的可能性,毕竟,单纯的MySQL主从集群并不允许将数据读进slave中,除非配置的是双master。
测试一下:
在slave数据库中写入数据id为14的数据,master不会同步
slave
master
在master数据库中写入数据id为15的数据,slave同步
master
slave
至此,mysql的主从复制+读写分离就实现了。
参考:https://segmentfault.com/a/1190000016507131
https://www.cnblogs.com/cxyyh/p/10815393.html
网友评论