MySQL集群(三)mysql-proxy搭建负载均衡与读写分离

前言php

前面学习了主从复制和主主复制,接下来给你们分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离。mysql

注意:这里比较坑的就是mysql-proxy一直没有更新致使版本太落后了,我在MySQL5.7.19中搭建玩负载均衡后有bug,因此这里我在windows中搭建了两个MySQL(好像是5.6或5.6如下的均可以搭建成功)服务器linux

   还有就是可使用mysql-proxy的替代品mysql-Router功能更强大!废话很少说,咱们直接干起来。程序员

1、mysq-proxy简介与安装

1.一、mysql-proxy简介

  mysql-proxy是官方提供的mysql中间件产品能够实现负载平衡,读写分离,failover等web

  MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个链接池,负责将前台应用的链接请求转发给后台的数据库,而且经过使用lua脚本,能够实现复杂的链接控制和过滤,sql

  从而实现读写分离和负载平衡。对于应用来讲,MySQL Proxy是彻底透明的,应用则只须要链接到MySQL Proxy的监听端口便可数据库

  固然,这样proxy机器可能成为单点失效,但彻底可使用多个proxy机器作为冗余,在应用服务器的链接池配置中配置到多 个proxy的链接参数便可ubuntu

1.二、实例描述做用

  1)咱们在进行web开发的时候,每每一台MySQL服务器是不够用的,可能须要多台,web到底链接哪一个数据库?windows

    这个要程序员本身写的代码来决定的,如今是二台mysql服务器,若是有多台或者是N台呢,靠用php代码来管理链接数据库,就很尴尬了。缓存

    

  2)mysql proxy就很好解决了这个问题,对于程序端而言,web端的请求,只要到mysql proxy的链接池就OK了,剩下的工做就交给mysql proxy了。对于程序代码管理来讲就简单多了。我的以为这一点最值得借用的了。

      

1.三、mysql-proxy的安装

  其实这个也有windows的版本,可是我推荐在linux中去使用,由于在开发中大部分服务器都是安装在linux中的。个人就是安装在ubuntu17.04版本的server版中。

  1)首先你须要有这个安装包:mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz(须要的话私聊我)

  2)通常咱们把这个第三方的软件安装在/opt目录下

   解压mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz到/opt/目录并建立软连接。    

    tar  zxvf  mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz  –C  /opt/
    ln  –snf  /opt/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit  /opt/mysql-proxy(建立软连接不懂的看前面的博文)

    

  3)配置环境变量

    这里的话,通常配置在.bashrc下,由于每一个用户有每一个用户不一样的功能,你也能够配置在全局环境变量当中(/etc/profile)

    我在.baserc下的配置:

      sudo vi .bashrc 在最后面添加:

      

      完成以后注意要更新:source .bashrc若是配置在全局变量中也要更新

  4)查看是否安装成功

    其实当你输入mysql-p的时候,按tab键可以联想出来,说明你已经配置成功了。咱们能够经过mysql-proxy -V查看是否配置成功。  

    

2、使用mysql-proxy实现负载均衡

  那咱们该怎么去配置负载均衡呢?咱们能够经过mysql-proxy --help来查看参数的意思

  搭建步骤:

   个人mysql-proxy安装在ubuntu中,两个mysql服务器安装在windows当中。

  1)在你的已经安装了mysql-proxy的主机上建立一个脚本:mysql-proxy-replication.sh  

#!/bin/bash
/opt/mysql-proxy/bin/mysql-proxy \
--proxy-address=1.0.0.3:4040 \   #这个是安装mysql-proxy的主机上的ip,这个4040端口是mysql-proxy的默认端口
--proxy-backend-addresses=192.168.2.45:3125 \ #这个是mysql服务器安装主机的ip和mysql的端口
--proxy-backend-addresses=192.168.2.45:3126 \
--log-level=info \
--log-file=/opt/mysql-proxy/logs/mysql-proxy-12.log \ #存放日志文件的位置
--daemon

  2)而后咱们执行这个脚本,我把脚本放在了家目录上面

    建立好了,能够修改一下文件的权限sudo chmod u+x  mysql-proxy-replication.sh

    还要建立一下存放日志文件的目录与文件sudo mkdir -r /opt/mysql-proxy/logs与touch mysql-proxy-12.log

    执行sudo ./mysql-proxy-replication.sh

    注意:这里我为了给你们演示我把mysql-proxy先关闭:使用ps -ef查看进程号,在使用sudo kill -9 进程号或者sudo killall mysql-proxy

  3)咱们查看一下日志,看是否脚本运行成功

    sudo vi /opt/mysql-proxy/logs/mysql-proxy-12.log    

    

    从日志文件能够清楚的看到,插件proxy正在监听着4040端口,它还添加了两个MySQL服务器(主主复制)。

  4)获取mysql-proxy中管理的两个服务器的链接

    

      获取链接:mysql -uroot -p123456 -h1.0.0.3 -P4040

      分析:咱们的用户名和密码是使用的是MySQL服务器的用户名和密码,由于是要从他们两个当中获取链接,ip和端口都是使用代理的ip和端口。      

  5)结果

        

        咱们在这里执行建立一个数据库:create database db_test_1

        使用mysql -uroot -p123456 -h1.0.0.3 -P4040获取的链接

        

        而后在查看mysql两台服务器有没有建立成功

        使用mysql -uroot -p -h192.168.2.45 -P3125和mysql -uroot -p -h192.168.2.45 -P3126登陆

        两个都是同样的,说明主主复制的两个集群,使用mysql-proxy管理成功!

 

总结:在这个负载均衡当中,其实就是使用mysql-proxy均衡两个MySQL服务器的链接数。这里无论这个链接里面的链接处理的数据量有多大,处理时间有多长。

   好比主机A有5个链接,处理时间只须要10分钟。二主机B有2个链接,处理时间须要1个小时。当有第8个链接时,更有可能获取的是主机B的链接。    

   mysql_proxy会把链接mysql服务器的tcp/IP链接缓存进链接池,以提升性能. 在缓存池里, 缓存的链接大体是平均分配在每台mysql服务器上. 但具体的每个链接,始终连某台服务器.

3、使用mysql-proxy实现读写分离

3.一、概述

  Mysql做为目前世界上使用最普遍的免费数据库,相信全部从事系统运维的工程师都必定接触过。但在实际的生产环境中,由单台Mysql做为独立的数据库是彻底不能知足实际需求的,不管是在安全性,高可用性以及高并发等各个方面。

  所以,通常来讲都是经过 主从复制(Master-Slave)的方式来同步数据,再经过读写分离(MySQL-Proxy)来提高数据库的并发负载能力 这样的方案来进行部署与实施的。

  

3.二、配置读写分离

  在这里我只是配置的是主主复制。

    

  1)怎么配置在两台MySQL服务器中的主主复制我就不介绍了,前面一篇博客已经介绍了。

  2)在你的已经安装了mysql-proxy的主机上建立一个脚本:mysql-proxy-rw-splitting.sh,并运行 

    首先咱们在前面当中已经运行了mysql-proxy咱们须要先杀死这个进程:sudo killall mysql-proxy

#!bash/bin
/opt/mysql-proxy/bin/mysql-proxy \ --proxy-address=1.0.0.3:4040 \ --proxy-backend-addresses=17.16.15.112:3125 \ #在3125端口的服务器中配置可读可写 --proxy-read-only-backend-addresses=172.16.15.112:3126 \ #在3126端口的服务器中配置只读 --proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua \ #用这个lua脚原本实现读写分离 --log-level=info \ --log-file=/opt/mysql-proxy/logs/mysql-proxy-12.log \ #这是它的日志 --daemon

 

  3)咱们查看一下日志,看是否脚本运行成功

    sudo vi /opt/mysql-proxy/logs/mysql-proxy-12.log 

2017-09-20 03:03:58: (critical) plugin proxy 0.8.5 started
2017-09-20 03:03:58: (message) proxy listening on port 1.0.0.3:4040
2017-09-20 03:03:58: (message) added read/write backend: 17.16.15.112:3125
2017-09-20 03:03:58: (message) added read-only backend: 172.16.15.112:3126

 

  4)获取链接:mysql -uroot -p123456 -h1.0.0.3 -P4040

    分析:咱们的用户名和密码是使用的是MySQL服务器的用户名和密码,由于是要从他们两个当中获取链接,ip和端口都是使用代理的ip和端口。 

4、Mysql-proxy 中间件的使用

4.一、在mysql 客户端经过中间件链接mysql集群  

  mysql –uroot –p –h 192.168.41.201 –P 4040(注意修改my.conf中绑定ip后才能远程登陆mysql,且有远程登陆帐号 GRANT ALL PRIVILEGES ON *.* TO ‘root’@‘%’ IDENTIFIED BY ‘’ WITH GRANT OPTION;)

  若是远程链接很卡,或者很慢,能够关闭mysql节点 地址反向解析功能 在my.cnf 中添加 skip-name-resolve。

4.二、在mysql 客户端经过中间件链接mysql集群

  能够经过 JDBC 访问mysql-proxy进而访问mysql集群 Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://192.168.41.201:4040/test?user=briup&password=briup";

 

不错就点个“推荐”哦!

相关文章
相关标签/搜索