一、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
@centos
tmp]
# tar -xf jdk-7u15-linux-x64.tar.gz -C /usr/local/
# 进入相应目录,并建立java目录
[root
@centos
tmp]
# cd /usr/local/
[root
@centos
local
]
# mkdir java
# 将解压出来的内容移到java目录
[root
@centos
local
]
# mv jdk1.7.0_15/* java
# 设置java环境变量
[root
@centos
local
]
# echo 'export JAVA_HOME=/usr/local/java' >> ~/.bashrc
[root
@centos
local
]
# . ~/.bashrc
# 测试jdk是否正确安装
[root
@centos
local
]
# java -version
# *******************************
# 以下这个方法设置JDK[在下面设置amoeba时,会覆盖,所以这里的配置文件,以最下面amoeba的配置为准]
[root
@centos
java]
# echo $JAVA_HOME
[root
@centos
java]
# vim /etc/profile
# 在末尾添加
export JAVA_HOME=/usr/locla/java
export PATH=
$JAVA_HOME
/bin:
$JAVA_HOME
/jre/bin:
$PATH
[root
@centos
java]
# 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
@centos
conf]
# 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>
<!--
bind
ipAddress -->
<!--
# 设置监听的接口,如果不设置,则监听所有的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
@centos
conf]
# vim /etc/profile
JAVA_HOME=/usr/locla/java
AMOEBA_HOME=/usr/
local
/amoeba
export PATH=
$PATH
:
$AMOEBA_HOME
/bin:
$JAVA_HOME
/bin:
$JAVA_HOME
/jre/bin
[root
@centos
conf]
# source /etc/profile
|
1
2
3
4
5
6
|
# 如果确认能够正常启动,就加>>/dev/null 否则还是看一下提示信息
[root
@centos
conf]
# amoeba start & >>/dev/null
# 检测启动情况
[root
@centos
conf]
# netstat -tulnp |grep java
# 停止amoeba测试指令是否可用
[root
@centos
conf]
# amoeba stop
|
1
2
3
4
5
6
7
8
9
10
|
# 建立配置文件指定的数据库
mysql> create database kongzhong;
mysql>
use
kongzhong
# 创建用于测试的表
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>
use
kongzhong
# 创建用于测试的表
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 160k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception
has
occurred. Program will
exit
.
解决方法:
[root
@centos
bin]
# cd /usr/local/amoeba/
# 修改配置文件
[root
@centos
amoeba]
# 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
@centos
local
]
# echo 'export JAVA_HOME=/usr/local/java' >> ~/.bashrc
[root
@centos
local
]
# . ~/.bashrc
|
1
2
3
4
5
|
[root
@centos
conf]
# 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
@centos
amoeba]
# vim bin/amoeba
DEFAULT_OPTS=
"-server -Xms256m -Xmx256m -Xss128k"
改成
DEFAULT_OPTS=
"-server -Xms512m -Xmx512m -Xmn100m -Xss1204k"
|