zoukankan      html  css  js  c++  java
  • 使用amoeba实现mysql读写分离

    使用amoeba实现mysql读写分离

    1.什么是amoeba?

    Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。

    优点:

    • 降低数据切分带来的复杂多数据库结构

    • 提供切分规则并降低 数据切分规则 给应用带来的影响

    • 降低db与客户端的连接数

    • 读写分离

    2.amoeba的部署安装
    准备:
    主机 IP地址
    master(主数据库):负责写入操作 10.0.0.201
    slave(从数据库):负责读取操作 10.0.0.202
    amoeba 10.0.0.41
    client(客户端) 10.0.0.31

    系统:CentOS7

    JDK:版本1.5以上,实验用的是jdk1.8

    MySQL:版本5.7

    Amoeba:amoeba-mysql-3.0.5-RC

    (1)安装JDK(amoeba主机)

    #下载jdk包
    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
    
    #安装jdk并配置环境变量
    rpm -ivh jdk-8u131-linux-x64.rpm
    #vim /etc/profile
    #底部添加:
    export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
    export PATH="$JAVA_HOME/bin:$PATH"
    
    source /etc/profile #(使环境变量立即生效)
    

    (2)安装amoeba

    #下载软件包
    wget https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
    
    #安装
    yum install unzip zip -y #已安装请忽略
    unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/amoeba #解压软件包到/usr/local下
    
    #配置环境变量
    #vim /etc/profile
    #底部添加:
    export AMOEBA_HOME=/usr/local/amoeba/amoeba-mysql-3.0.5-RC
    export PATH=$PATH:$AMOEBA_HOME/bin
    
    source /etc/profile #立即生效
    
    #给amoeba授权mysql远程账户
    #实验中使用的是root用户,实际工作中根据需要配置
    
    4.配置文件

    (1)conf/dbServers.xml

    #设置amoeba要连接mysql数据库的端口,默认3306
    <property name="port">3306</property>
    #设置缺省的数据库
    <property name="schema">test_1</property>
    #设置amoeba连接后端数据库服务器的账户密码
     <property name="user">root</property>
     <property name="password">123456</property>
    #设置后端可写的数据库
     <dbServer name="writedb"  parent="abstractServer">
    	factoryConfig>
    		<!-- mysql ip -->
     		<property name="ipAddress">10.0.0.201</property>  
    	</factoryConfig>
    </dbServer>
    #设置后端可读的数据库
    <dbServer name="slave"  parent="abstractServer">
    	<factoryConfig>
    		<!-- mysql ip -->
    		<property name="ipAddress">10.0.0.202</property> 
    	</factoryConfig>
    </dbServer>
    #定义一个虚拟的dbserver,相当于一个dbserver组,将可读的数据库ip统一放到一个组内
    <dbServer name="myslave" virtual="true">
    	<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
    		<property name="loadbalance">1</property> #选择调度算法,1表示复制均衡,2表示权重,3表示HA
    		<property name="poolNames">slave</property> #myslave组成员
    	</poolConfig>
    </dbServer>
    

    (2)conf/amoeba.xml

    #设置amoeba监听的端口,默认8066
    <property name="port">8066</property>
    #配置客户端连接amoeba时的账号,与后端服务器密码无关
       <property name="user">root</property>
       <property name="password">123456</property>
       
    #设置amoeba默认的池   
    <property name="defaultPool">writedb</property>
    #取消注释,这里用来指定前面定义好的两个读写池
    <property name="writePool">writedb</property>
    <property name="readPool">myslave</property>
    

    (3)./jvm.properties

    #占用内存配置文件,Xss必须大于228才能启动JVM
    JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
    
    5.启动amoeba
    /bin/launcher
    
    6.测试amoeba(client)
    #在客户端登录amoeba
    mysql -h10.0.0.41 -uroot -p123456 -P8066
    
    use test_1;
    select * from dept;
    #在amoeba上插入数据
    insert into dept values(2,2);
    #在master和slave上分别查看表中的数据
    select * from dept;
    #将master上的mysql服务停止,继续插入数据会发现插入不成功,但是能够查询
    #将master上的msyql服务开启,停止slave上的mysql,发现插入成功,但是不能够查询
    
    作者:ccku
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    【名称解释】#001 IIS名词解释
    【C#】#102 发送邮件
    【C#】#101 导入导出Excel
    【C#】#100 调用摄像头
    【转】【Flex】#010 操作XML文件(E4X)
    【Flex教程】#009 As/typeof /instanceof /is的作用
    4 权限组件、频率、3组件总结
    1 request模块
    4 saltstack ssh
    03 深入远程执行:target目标、模块modules、返回returns
  • 原文地址:https://www.cnblogs.com/ccku/p/13417692.html
Copyright © 2011-2022 走看看