MySQL负载均衡 & 读写分离

  在庞大的数据量应用系统中,除了使用复制策略实现数据库高可用之外,还可结合业务功能,将数据也以模块划分,存入不同的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端口号。

  1. mysql_proxy
  2. ./mysql-proxy-path/bin/mysql-proxy \
  3. --proxy-backend-addresses=192.168.171.199:3306 \ //DB服务器1
  4. --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
也可在配置时,直接指定服务器处理的请求类型:

  1. ./bin/mysql-proxy  \
  2. --proxy-backend-addresses=192.168.1.199:3306 \
  3. --proxy-read-only-backend-addresses=192.168.1.200:3306 \ //200数据库服务器仅用于读
  4. --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

猜你喜欢

转载自blog.csdn.net/faker_wang/article/details/80969269