mysql读写分离

mysql读写分离
 静态分离:直接将服务器地址写入程序
 动态分离:通过代理服务器对数据进行读写操作,由代理服务器判定读写操作,在主服务器上写数据,在
         从服务器上读数据。
 
  1、使用mysql-proxy实现读写分离
 # ./mysql-proxy --proxy-backend-addresses=10.0.5.150:3306 --proxy-read-only-backend-addresses=10.0.5.151:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=mysql --log-level=warning --log-file=/var/log/mysql-proxy.log --max-open-files=2048 --event-threads=4 --proxy-address=10.0.5.152:3306
 
 --proxy-backend-addresses            指定主服务器地址(写数据)
 --proxy-read-only-backend-addresses  指定从服务器地址(读数据)
 --proxy-lua-script                   指定用于读写分离的脚本程序
 --daemon                             指定以守护进程的方式运行
 --user=mysql                         指定运行的用户
 --log-level                          指定日志记录级别
 --log-file                           指定日志文件位置
 --max-open-files                     指定最大课打开的文件数,受操作系统限制
 --event-threads                      设置工作线程数
 --proxy-address                      设置监听的本机地址和端口
 
 
 获取mysql-proxy帮助
 # ./mysql-proxy --help         \\基本选项帮助
 # ./mysql-proxy --help-proxy   \\代理选项帮助
 
 
 在所有服务器上进行授权
 mysql> grant replication slave on *.* to ‘repuser‘@‘10.0.5.151‘ identified by ‘aixocm‘;
 mysql> flush privileges;
 (2)使用amoeba实现读写分离
  安装jdk
    # tar xf jdk-7u51-linux-x64.tar.gz -C /usr/local/
    # mv jdk1.7.0_51 java
   
  编辑/etc/profile文件,设置java环境变量
    # vim /etc/profile
      JAVA_HOME="/usr/local/java"
      CLASS_PATH="/usr/local/java/jre:/usr/local/java/lib"
      export JAVA_HOME CLASS_PATH
      PATH="$PATH:/usr/local/mysql/bin:/usr/local/java/bin"
    # source /etc/profile
   
  查看和调整java的默认版本
    # java -version
    # alternatives --install /usr/local/java/bin/java java /usr/local/java/bin/java 100  \\在系统中登记java版本和设置优先级
    # alternatives --display java   \\显示java信息
    # alternatives --config java    \\设置java的默认版本
 安装和配置amoeba实现读写分离
    # unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
    # mv amoeba-mysql-3.0.5-RC amoeba
   
    # vim dbServers.xml    \\定义后端服务器信息
     <property name="sendBufferSize">256</property>    \\设置发送缓冲区大小
     <property name="receiveBufferSize">256</property> \\设置接收缓冲区大小
     <property name="port">3306</property>       \\设置后端服务器端口
     <property name="schema">sxjy</property>     \\设置代理默认连接的数据库
     <property name="user">root</property>
     <property name="password">aixocm</property>  \\设置连接后端服务器的密码
     
     <dbServer name="master1"  parent="abstractServer">  \\定义后端服务器
       <factoryConfig>
          <property name="ipAddress">10.0.5.150</property>
       </factoryConfig>
     </dbServer>

<dbServer name="slave1"  parent="abstractServer">  \\定义后端服务器
       <factoryConfig>
          <property name="ipAddress">10.0.5.151</property>
       </factoryConfig>
     </dbServer>

<dbServer name="master" virtual="true">   \\定义服务器池
      <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
       <property name="loadbalance">1</property>  \\定义负载均衡算法
      <property name="poolNames">master1</property> \\添加服务器,多个用逗号隔开
      </poolConfig>
     </dbServer>

<dbServer name="slave" virtual="true">  \\定义服务器池
       <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
          <property name="loadbalance">1</property>
          <property name="poolNames">slave1</property>
       </poolConfig>
    </dbServer>
    # vim amoeba.xml       \\定义代理信息
    <property name="port">3306</property>   \\设置代理服务器监听的端口
    <property name="ipAddress">10.0.5.152</property> \\设置代理监听的地址
    <property name="user">root</property>  \\设置代理服务器使用的用户名
    <property name="password">aixocm</property>  \\设置代理服务器使用的密码
    <property name="defaultPool">master</property>  \\设置默认的服务器池,一般除
       select,insert,update,delete等的其它操作都在默认的服务器进行

<property name="writePool">master</property>  \\执行写操作的服务器池
    <property name="readPool">slave</property>    \\执行读操作的服务器池
    <property name="needParse">true</property>
   
    # vim jvm.properties   \\设置java内存分配信息
    JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=32m -XX:MaxPermSize=128m"
 
    # vim access_list.conf  \\定义访问控制列表
    10.0.5.100:no
    10.0.*.*:yes
   
    # vim dbServers.xml    \\定义后端服务器信息
    # vim amoeba.xml       \\定义代理信息
    # vim jvm.properties   \\设置java内存分配信息
    JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=32m -XX:MaxPermSize=128m"
 
    # vim access_list.conf
    10.0.5.100:no
    10.0.*.*:yes

(5)实现数据分割
 # vim rule.xml
   <tableRule name="stu" schema="sxjy" defaultPools="master1,master2">
               <rule name="rule1">
                       <parameters>id</parameters>
                       <expression><![CDATA[ id % 2 == 0 ]]></expression>
                       <defaultPools>master1</defaultPools>
                       <readPools>slave1</readPools>
                       <writePools>master1</writePools>
               </rule>
               
               <rule name="rule2">
                       <parameters>id</parameters>
                       <expression><![CDATA[ id % 2 == 1 ]]></expression>
                       <defaultPools>master2</defaultPools>
                       <writePools>master2</writePools>
                       <readPools>slave2</readPools>
               </rule>
   
    </tableRule>
 
   
   垂直分割
 <tableRUle name="user_info" schema="blog" defaultPools="master1" />
 <tableRUle name="user_info" schema="webchat" defaultPools="master2" />

时间: 2024-10-24 02:59:20

mysql读写分离的相关文章

mysql读写分离的三种实现方式

1 程序修改mysql操作类可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求.优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配缺点:自己维护更新,增减服务器在代码处理 2 amoeba参考官网:http://amoeba.meidusa.com/优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活 3 mysql-proxy参考 mysql-proxy

MySQL学习笔记之十:使用mysql-proxy实现MySQL读写分离

MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力. 本文使用mysql-proxy实现mysql的读写分离,mysql-proxy实际上是作为后端mysql主从服务器的代理,它直接接受客户端的请求,对SQL语句进行分析,判断出是读操作还是写操作,然后分发至对应的mysql服务器上.对于多节点slave集群,还可以起到负载均衡的效果. 一.准备实验环境 MySQL的主从复制架构搭建详见http://9124573.bl

Mysql-Proxy实现mysql读写分离、负载均衡 (转)

在mysql中实现读写分离.负载均衡,用Mysql-Proxy是很容易的事,不过大型处理对于性能方面还有待提高,主要配置步骤如下: 1.1. mysql-proxy安装 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡.对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可.当

django mysql 读写分离

最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类型的数据库),我们需要做的就是,定义不同的数据库,定义不同的路由规则.当然前提是你需要手动实现MySQL的主从同步.. 首先定义我们的主从数据库: DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',

Amoeba实现Mysql读写分离

环境规划 Amoeba读写分离器 172.16.254.144/16 Mysql服务器(master) 172.16.254.150/16 Mysql服务器(slave) 172.16.254.151/16 一.先实现mysql主从复制,在master上使用yum安装mysql [[email protected] mysql]# yum -y install mysql mysql-server 启用二进制日志,编辑/etc/my.cnf在[mysqld]下添加如下行: log-bin = /

mysql读写分离 mysql-proxy

一.介绍 MySQL代理是一个介于MySQL客户端和MySQL服务器之间的简单程序,可用来监视.分析或者传输他们之间的通讯.他的灵活性允许你最大限度的使用它,这些包括负载平衡.容错 .分析查询和修正等等: MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡.对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MyS

mysql 读写分离

mysql-proxy:简称mysql读写分离:主要目的是为了提高web站点的访问速度. 首先搭建mysql主从,参考:http://syklinux.blog.51cto.com/9631548/1737317 下载mysql-proxy: cd /usr/local/src wget http://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz tar zxvf mysq

Django中MySQL读写分离技术

最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类型的数据库),我们需要做的就是,定义不同的数据库,定义不同的路由规则. 首先定义我们的主从数据库: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': sae.const.MYSQL_DB, 'USER':

构建高性能web之路------mysql读写分离实战

一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database proxy.database proxy负责管理client实际访问database的路由策略,采用开源框架amoeba.database集群采用mysql的master-slave的replication方案.整个环境的结构图如下所示: 实战步骤与详解 一.搭建mysql的master-slave