MySQL数据库优化(八)——MySQL负载均衡 & 读写分离
2016-06-12 11:26
477 查看
在庞大的数据量应用系统中,除了使用复制策略实现数据库高可用之外,还可结合业务功能,将数据也以模块划分,存入不同的db服务器中。
在高并发负载均衡(一)——企业架构分析和DNS中提高对应网站高并发的主要集中在两处,web服务的高并发和数据库高并发;应对web服务的高并发在前面系列博文中有所介绍,使用各种负载方式均发访问量到不同的服务器不失为良好的策略。数据库高并发同样可通过负载均衡得以缓解。
一、负载均衡基本思路
在一个服务器集群中,尽可能的平均负载量。通常做法是在服务器前端设置一个负载均衡器(专门的硬件设备),mysql的负载均衡,通常都离不开数据分片(把数据分割成小块,存储到不同的db节点中)、复制等操作。
负载均衡的主要贡献,除了均发数据库请求,还可提供管理读/写策略。在分发请求时则确定那些节点可写,可读,随即将请求发送到指定节点上执行操作。
二、实现负载均衡的方式:
1、mysql读写分离:
mysql复制时,产生了多个数据副本(备库),为减少服务器压力,备库用于处理读操作,主库可同时处理读写是mysql集群实现读写分离的常用策略。
由于备库的复制是异步的,无法实时同步,读写分离的主要难点也在于备库上的脏数据。通常如果使用备库进行读,一般对数据的实时性要求不能太高。对此,mysql提供了几种常见的读写分离方式,例如基于查询的读写分离、基于脏数据、基于会话等,有兴趣可继续研究。
mysql设置的读写分离,减少了主库的请求量,将大量读的操作发送给备库,实现负载均衡。
2、修改DNS
在高并发负载均衡(一)——企业架构分析和DNS中详细介绍了DNS以及DNS如何实现负载,简言之,通过n个服务器IP指定到一个域名,根据请求的不同标识特征,将请求发送给不同的IP服务器进行处理。
3、引入中间件
mysql官方提供了一个mysql负载的中间件,mysql_proxy,也需要在服务器上进行安装,修改配置文件(mysql的服务器IP),实质与nginx类似,也是一个代理服务器。
三、负载均衡实战
下面以mysql_proxy为例,演示通过mysql_proxy的读写分离配置实现负载均衡。
1、官网下载安装mysql_proxy:
mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
2、解压后, 该目录包含已经编译好的二进制文件
(1)执行以下语句,配置后台目标服务器IP端口号。
在高并发负载均衡(一)——企业架构分析和DNS中提高对应网站高并发的主要集中在两处,web服务的高并发和数据库高并发;应对web服务的高并发在前面系列博文中有所介绍,使用各种负载方式均发访问量到不同的服务器不失为良好的策略。数据库高并发同样可通过负载均衡得以缓解。
一、负载均衡基本思路
在一个服务器集群中,尽可能的平均负载量。通常做法是在服务器前端设置一个负载均衡器(专门的硬件设备),mysql的负载均衡,通常都离不开数据分片(把数据分割成小块,存储到不同的db节点中)、复制等操作。
负载均衡的主要贡献,除了均发数据库请求,还可提供管理读/写策略。在分发请求时则确定那些节点可写,可读,随即将请求发送到指定节点上执行操作。
二、实现负载均衡的方式:
1、mysql读写分离:
mysql复制时,产生了多个数据副本(备库),为减少服务器压力,备库用于处理读操作,主库可同时处理读写是mysql集群实现读写分离的常用策略。
由于备库的复制是异步的,无法实时同步,读写分离的主要难点也在于备库上的脏数据。通常如果使用备库进行读,一般对数据的实时性要求不能太高。对此,mysql提供了几种常见的读写分离方式,例如基于查询的读写分离、基于脏数据、基于会话等,有兴趣可继续研究。
mysql设置的读写分离,减少了主库的请求量,将大量读的操作发送给备库,实现负载均衡。
2、修改DNS
在高并发负载均衡(一)——企业架构分析和DNS中详细介绍了DNS以及DNS如何实现负载,简言之,通过n个服务器IP指定到一个域名,根据请求的不同标识特征,将请求发送给不同的IP服务器进行处理。
3、引入中间件
mysql官方提供了一个mysql负载的中间件,mysql_proxy,也需要在服务器上进行安装,修改配置文件(mysql的服务器IP),实质与nginx类似,也是一个代理服务器。
三、负载均衡实战
下面以mysql_proxy为例,演示通过mysql_proxy的读写分离配置实现负载均衡。
1、官网下载安装mysql_proxy:
mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
2、解压后, 该目录包含已经编译好的二进制文件
(1)执行以下语句,配置后台目标服务器IP端口号。
mysql_proxy ./mysql-proxy-path/bin/mysql-proxy \ --proxy-backend-addresses=192.168.171.199:3306 \ //DB服务器1 --proxy-backend-addresses=192.168.171.200:3306 //DB服务器2(2)使用mysql客户端连接mysql_proxy,端口4040即可。
mysql -h “192.168.171.48” -P 4040 -u root -p 123456 //192.168.171.48 为安装mysql_proxy的代理服务器IP也可在配置时,直接指定服务器处理的请求类型:
./bin/mysql-proxy \ --proxy-backend-addresses=192.168.1.199:3306 \ --proxy-read-only-backend-addresses=192.168.1.200:3306 \ //200数据库服务器仅用于读 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
相关文章推荐
- sphinx检索mysql问题
- Ubuntu下忘记MySQL密码重设方法
- mysql 基础操作
- windows下启动mysql服务的命令行启动和手动启动方法
- mysql的innodb中事务日志(redo log)ib_logfile
- MySQL5.6的my.ini配置
- Mysql字段类型——字符类型
- mysql 数据库备份方案及策略
- 【译】MySQL – The Error Log
- MySQL数据库优化(七)——MySQL主从复制
- 我的第一个extjs desktop + jsp +mysql实战练习项目
- mysql优化实战(explain&&索引)
- MySQL分表自增ID解决方案
- mysql字符集和校对规则(Mysql校对集)
- mysql 卸载及安装
- mysql教程
- mysql从csv文件导入数据时提示int类型出现' '(空字符串)
- mysql从csv文件导入数据时提示int类型出现' '(空字符串)
- mysql从csv文件导入数据时提示int类型出现' '(空字符串)
- mysql从csv文件导入数据时提示int类型出现' '(空字符串)