Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

Node.js Mysql实现读写分离

$
0
0

什么是读写分离为了实现高可用,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 如下 untitled2.png需要注意的是server-id不能相同,一般都配置为本机IP的最后一段。 3、重启两台服务器mysql

service mysqld restart

4、使用Navicat for MySQL工具分别联接上两个数据库 untitled3.png 5、配置master数据库 创建一个用户 untitled4.pnguntitled5.png打开命令行窗口 untitled6.png 6、配置slave数据库 打开slave命令行窗口,执行 untitled7.png 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库中创建测试表 untitled8.png 2、使用Lei框架生成resetfull格式的web项目 lei框架使用介绍请查看我另一篇文章: 整合Express + Mysql + mocha,自动生成代码 - 邹振兴的文章 - 知乎专栏生成代码如下图: untitled9.png 3、修改config.json配置 untitled10.png 4、修改util.js文件 由于mysql库自带了poolCluster,可以很方面实现读写分离的配置。 untitled11.pnguntitled12.png 5、修改userService.js文件 untitled13.png 6、修改user.test.js文件 untitled14.pnguntitled15.png 7、运行服务器

node index.js

执行测试文件
npm test

8、查看结果 untitled16.png总结 1、使用Node.js实现读写分离是很容易的,因为mysql库已经支持了集群。

2、Master/Slave这种模式下,slave数据可能会产生一定的延时,如果对查询的要求是实时的,就需要从Master库中读取。

3、如果Slave服务器宕机,重启后会自动读取Master数据库的日志,并保存数据一至。

4、如果存储数据时需要事务,建议不要读写分离。


Viewing all articles
Browse latest Browse all 14821

Trending Articles