基于amoeba实现mysql数据库的读写分离/负载均衡
一、Amoeba的简述:[来自百度百科]


| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 解压JDK软件到/usr/local目录下[root@centostmp]# tar -xf jdk-7u15-linux-x64.tar.gz  -C /usr/local/# 进入相应目录,并建立java目录[root@centostmp]# cd /usr/local/[root@centoslocal]# mkdir java# 将解压出来的内容移到java目录[root@centoslocal]# mv jdk1.7.0_15/*  java# 设置java环境变量[root@centoslocal]# echo 'export JAVA_HOME=/usr/local/java' >> ~/.bashrc[root@centoslocal]# . ~/.bashrc# 测试jdk是否正确安装[root@centoslocal]#  java -version# *******************************# 以下这个方法设置JDK[在下面设置amoeba时,会覆盖,所以这里的配置文件,以最下面amoeba的配置为准][root@centosjava]# echo $JAVA_HOME[root@centosjava]# vim /etc/profile# 在末尾添加export JAVA_HOME=/usr/locla/javaexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH[root@centosjava]# source /etc/profile# ******************************* | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | [root@centos java]# cd /tmp/# 建立相应amoeba目录[root@centos tmp]# mkdir /usr/local/amoeba# 将压缩包解压到指定目录[root@centos tmp]# tar -xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba[root@centos tmp]# cd /usr/local/amoeba/[root@centos amoeba]# cd conf/# 准备修改配置文件#/*  以下部分为注解#/*  Amoeba总共有7个配置文件,分别如下:#/*  Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。#/*  数据库服务器配置文件($AMOEBA_HOME/conf/dbServers.xml),用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。#/*  切分规则配置文件($AMOEBA_HOME/conf/rule.xml),用来配置切分规则。#/*  数据库函数配置文件($AMOEBA_HOME/conf/functionMap.xml),用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。#/*  切分规则函数配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用来配置切分规则中使用的用户自定义函数的处理方法。#/*  访问规则配置文件($AMOEBA_HOME/conf/access_list.conf),用来授权或禁止某些服务器IP访问Amoeba。#/*  日志规格配置文件($AMOEBA_HOME/conf/log4j.xml),用来配置Amoeba输出日志的级别和方式。# 配置后端mysql 服务器连接[dbServer.xml][root@centos conf]# vim dbServers.xml.........................(省略)        <dbServer name="abstractServer"abstractive="true">                <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">                        <property name="manager">${defaultManager}</property>                        <property name="sendBufferSize">64</property>                        <property name="receiveBufferSize">128</property># 设置 mysql 数据库的端口                        <!-- mysql port -->                        <property name="port">3306</property># 设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,# 不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver                        <!-- mysql schema -->                        <property name="schema">kongzhong</property> # 设置amoeba连接后端数据库服务器的账号和密码,需在后端数据库器上创建该用户,并授权amoeba连接                        <!-- mysql user -->                        <property name="user">kongzhong123</property>                        <!--  mysql password -->                        <property name="password">kongzhong123</property>                </factoryConfig>                <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool"> # 最大连接数[默认]                        <property name="maxActive">500</property> # 最大空闲连接数[默认]                        <property name="maxIdle">500</property>                        <property name="minIdle">10</property>                        <property name="minEvictableIdleTimeMillis">600000</property>                        <property name="timeBetweenEvictionRunsMillis">600000</property>                        <property name="testOnBorrow">true</property>                        <property name="testOnReturn">true</property>                        <property name="testWhileIdle">true</property>                </poolConfig>        </dbServer> # 设置一个后端的dbServer,名为master ,这个可以随便取,但是为了明确其含义,最好给予特殊含义的单词,这里是主DB SERVER        <dbServer name="master"parent="abstractServer">                <factoryConfig> # 设置这台DB server 的ip地址                        <!-- mysql ip -->                        <property name="ipAddress">192.168.1.102</property>                </factoryConfig>        </dbServer># 再设置一台后端mysql数据库,这里叫slave,名字需要唯一[这里可以创建N个后端数据库,只要复制下面<dbServer>...</dbServer>]        <dbServer name="slave"parent="abstractServer">                <factoryConfig># 设置这台DB server 的ip地址                        <!-- mysql ip -->                        <property name="ipAddress">192.168.1.100</property>                </factoryConfig>        </dbServer># 指定一个虚拟的dbServer,将上面定义的dbserver加入这个虚拟的dbserver,相当于组成一个组[这里我们将读的数据库组成一个组]# 这里 需要将 name="mul..." 改成自己想要取的名字,这个名字也需要有含义,后面会用到        <dbServer name="ReadPool"virtual="true">                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">                        <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--># 选择调度算法 1 是轮询 2 是权重 3 是HA 这里选择1 轮询                        <property name="loadbalance">1</property>                        <!-- Separated by commas,such as: server1,server2,server1 --># 负载均衡,slave1,slave2当成2个服务器进行调度,这模拟量加权的调度算法。# 注意这里使用的dbserver必须是已经定义了的,可以写多个,如slave1,slave2                        <property name="poolNames">slave</property>                </poolConfig>        </dbServer></amoeba:dbServers> | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | [root@centosconf]# vim amoeba.xml.........................(省略)        <proxy>                <!-- service class must implements com.meidusa.amoeba.service.Service -->                <service name="Amoeba for Mysql"class="com.meidusa.amoeba.net.ServerableConnectionManager">                        <!-- port --> # 设置amoeba监听的端口(这里如果默认,后面测试需要指定端口,就是这里的端口)                        <property name="port">3306</property>                        <!-- bindipAddress -->                        <!-- # 设置监听的接口,如果不设置,则监听所有的IP[选择默认]                        <property name="ipAddress">127.0.0.1</property>                         -->.........................(省略)                        <property name="authenticator">                                <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"># 提供客户端连接amoeba时需要使用这里设定的账号 (这里的账号密码和amoeba连接后端数据库服务器的密码无关)                                        <property name="user">kongzhong</property># 提供客户端连接amoeba时需要使用这里设定的密码                                        <property name="password">kongzhong</property>                                        <property name="filter">                                                <bean class="com.meidusa.amoeba.server.IPAccessController">                                                        <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>                                                </bean>                                        </property>                                </bean>                        </property>                </service>.........................(省略)        <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">                <property name="ruleLoader">                        <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">                                <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>                                <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>                        </bean>                </property>                <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>                <property name="LRUMapSize">1500</property>                <property name="defaultPool">master</property>                <!--                 --># 把默认注释掉的读写分离选项,把注释去掉并readpool修改成ReadPool(这个名字,我们前面在dbServer.xml里设置一个读数据库组,这里是作为只读池)                <property name="writePool">master</property>                <property name="readPool">ReadPool</property>                <property name="needParse">true</property>        </queryRouter> | 
| 1 2 3 4 5 | [root@centosconf]# vim /etc/profileJAVA_HOME=/usr/locla/javaAMOEBA_HOME=/usr/local/amoebaexport PATH=$PATH:$AMOEBA_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin[root@centosconf]# source /etc/profile | 
| 1 2 3 4 5 6 | # 如果确认能够正常启动,就加>>/dev/null 否则还是看一下提示信息[root@centosconf]# amoeba start & >>/dev/null# 检测启动情况[root@centosconf]# netstat -tulnp |grep java# 停止amoeba测试指令是否可用[root@centosconf]# amoeba stop | 
| 1 2 3 4 5 6 7 8 9 10 | # 建立配置文件指定的数据库mysql> create database kongzhong;mysql> usekongzhong# 创建用于测试的表mysql> create table t1(name varchar(10));# 插入测试数据mysql> insert into t1 values('102');# 授予amoeba用户连接数据库的权限mysql> grant all privileges on kongzhong.* to 'kongzhong123'@'192.168.1.104'identified by 'kongzhong123';mysql> flush privileges; | 
| 1 2 3 4 5 6 7 8 9 10 | # 建立配置文件指定的数据库mysql> create database kongzhong;mysql> usekongzhong# 创建用于测试的表mysql> create table t1(name varchar(10));# 插入测试数据mysql> insert into t1 values('100');# 授予amoeba用户连接数据库的权限mysql> grant all privileges on kongzhong.* to 'kongzhong123'@'192.168.1.104'identified by 'kongzhong123';mysql> flush privileges; | 
| 1 2 3 4 | # 登陆相应数据库,查询当前所在数据库(相应大家都应该懂的,就不详细演示了)[root@client102~]# mysql -ukongzhong -p -h192.168.1.104[root@client100~]# mysql -ukongzhong -p -h192.168.1.104[root@client104~]# mysql -ukongzhong -p -h192.168.1.104 | 
| 1 2 3 4 5 6 7 8 9 10 11 | The stack size specified is too small, Specify at least 160kError: Could not create the Java Virtual Machine.Error: A fatal exception hasoccurred. Program will exit.解决方法:[root@centosbin]# cd /usr/local/amoeba/# 修改配置文件[root@centosamoeba]# vim bin/amoeba将下面这行DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss128k"修改为:DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k" | 
| 1 2 3 4 | Error: JAVA_HOME environment variable is not set.解决方法:[root@centoslocal]# echo 'export JAVA_HOME=/usr/local/java' >> ~/.bashrc[root@centoslocal]# . ~/.bashrc | 
| 1 2 3 4 5 | [root@centosconf]# vim log4j.xml [此文件在amoeba目录下的conf目录下]修改log4j.xml 取消日志文件生成(太大了,磁盘很容易满)<param name="file"value="${amoeba.home}/logs/project.log"/>改成<param name="file"value="<![CDATA[${amoeba.home}/logs/project.log>/dev/null]]>"/> | 
| 1 2 3 4 | [root@centosamoeba]# vim bin/amoebaDEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"改成DEFAULT_OPTS="-server -Xms512m -Xmx512m -Xmn100m -Xss1204k" | 
基于amoeba实现mysql数据库的读写分离/负载均衡的更多相关文章
- 利用oneproxy部署mysql数据库的读写分离
		实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ... 
- 如何轻松实现MySQL数据库的读写分离和负载均衡?
		配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡.读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着 ... 
- 利用mysql-proxy进行mysql数据库的读写分离
		实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 mysql-proxy-0 ... 
- Mysql数据库的读写分离
		读写分离,即在主数据库中进行写操作(也可以进行增.删.改操作),在从数据库中进行读操作.在正常情况下,我们对主数据库进行的是增.删.改.查操作,数据库的写入时间比较长,而查询时间短,所以为了提高数据库 ... 
- mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
		mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ... 
- MyCat 读写分离,负载均衡
		docker mysql 主从复制 配合Spring 事务 注意事项 配置好JRE,安装好MYCAT 在mysql主库创建表,会同步到从库 CREATE TABLE `user` ( `id` ) N ... 
- MySQL搭建Amoeba_读写分离
		一.背景知识 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关 ... 
- MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)
		Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELE ... 
- docker-compose.yml样例(mysql主从+mycat读写分离)
		Docker-compose.yml文件示例 1.mysql主从复制的docker-compose.yml文件 # cat docker-compose.yml version: '2' # 这个ve ... 
随机推荐
- java printf与println的区别
			Java中的println和printf的区别在于:println是用于输出参数内容,然后换行,其参数个数固定为一个.printf是用于输出带各种数据类型的占位符的参数,其参数个数是不定的. 
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
			// Only override drawRect: if you perform custom drawing. // An empty implementation adversely affec ... 
- Spring3+MyBatis3整合log4j无法输出SQL语句问题的解决
			今天遇到了跟下面文章一模一样的问题,下面文章的解决方案很好,在这里记录保存一下. Spring3+MyBatis3整合无法输出SQL语句问题的解决 
- javascript学习代码--点击按钮显示内容
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- 如何使用 Python 创建一个 NBA 得分图?
			本文意在创建一个得分图,该图同时描绘了从场上不同位置投篮得分的百分比和投篮次数,这和 Austin Clemen 个人网站上的帖子 http://www.austinclemens.com/shotc ... 
- Children's Day
			hdu4706:http://acm.hdu.edu.cn/showproblem.php?pid=4706 题意:让你打出3--10的N,这个N是由连续的小写字母组成的. 题解:直接模拟啊,水题啊. ... 
- MySQL协议简单分析
			tcpdump -i eth0 -s0 -l -w - port 3306|strings|grep -i -E 'select|update|insert|delete|set' 
- 基本数据类型的常量池与String类型常量池解析
			抛出样例: Integer a1 = new Integer(123); Integer a2 = new Integer(123); System.out.print ... 
- 如何对一个不断更新的HashMap进行排序
			如何对一个不断更新的HashMap进行排序? 解答:等到HashMap更新稳定后,用ArrayList包装进行排序.或者自己写一个可以类似HashMap的有序Map,每次更新的时候都进行排序,构建自己 ... 
- MapReduce生成HFile入库到HBase及源码分析
			http://blog.pureisle.net/archives/1950.html 
