什么是读写分离为了实现高可用,mysql数据库一般都会搭建Master/Slave;即然有两台服务器,我可以将一些数据库查询放到Slave服务器上执行,这样会减少Master服务器的压力。读写分享是数据库Master/Slave附带的一个能力。
配置Master/Slave
mysql Master/Slave 模式实现的原理是二进制日志,简单的说就是数据操作记录在日志中,然后分发给Slave服务器执行。具体原理,我不是DBA也说不太清。下面开始配置: 1、假设现在我有两台服务器,并且都安装好了mysql数据库(版本一至)。master服务器地址为192.168.199.108,slave服务器地址为192.168.199.166。 2、修改两台服务器/etc/my.cnf 如下 需要注意的是server-id不能相同,一般都配置为本机IP的最后一段。 3、重启两台服务器mysql
service mysqld restart
4、使用Navicat for MySQL工具分别联接上两个数据库 5、配置master数据库 创建一个用户 打开命令行窗口 6、配置slave数据库 打开slave命令行窗口,执行 change master是配置主服务器地址,其中master_log_file和master_log_pos是show master status 中的结果。注意:714是不要引号的。 再输入
show slave status\G;
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
如果这两项为Yes,则表示配置成功
编写Node.js程序 1、在master库中创建测试表 2、使用Lei框架生成resetfull格式的web项目 lei框架使用介绍请查看我另一篇文章: 整合Express + Mysql + mocha,自动生成代码 - 邹振兴的文章 - 知乎专栏生成代码如下图: 3、修改config.json配置 4、修改util.js文件 由于mysql库自带了poolCluster,可以很方面实现读写分离的配置。 5、修改userService.js文件 6、修改user.test.js文件 7、运行服务器
node index.js
执行测试文件
npm test
8、查看结果 总结 1、使用Node.js实现读写分离是很容易的,因为mysql库已经支持了集群。
2、Master/Slave这种模式下,slave数据可能会产生一定的延时,如果对查询的要求是实时的,就需要从Master库中读取。
3、如果Slave服务器宕机,重启后会自动读取Master数据库的日志,并保存数据一至。
4、如果存储数据时需要事务,建议不要读写分离。