一、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"
|
基于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 ...
随机推荐
-
PHP-格式标签
格式控制标签 <font color="" size="" face=""></font> 控制字体:color控 ...
-
ASP.NET XmlSerializer权限问题
今天碰到一个奇怪问题.因为在2台服务器上做文件共享,使服务器A能访问服务器B的共享目录.在IIS上使用虚拟目录实现的话,需要给应用程序池指定一个统一的账号.在调试的时候能够使用,但是一部署到服务器上, ...
-
进程间的通讯(IPC)方式
内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据 ...
-
过程式编程 drawShapes
// // main.m // 3.2.1 过程式编程 #import <Foundation/Foundation.h> typedef enum { kCircle, kRectang ...
-
VMware linux与windows文件共享
将要共享的文件做成一个iso文件,然后打开VMware
-
Linux常用命令2--用户问题、文件的打包压缩
Linux常用命令 如何进行用户和群组的创建和更改 [1]groupadd:用于创建新的群组. 语法:groupadd [-option] 用户名:其常用参数有:-g groupadd -g 555 ...
-
download plugin update site for offline installation
Reference Eclipse Launcher Running update manager from command line 好多次为window下的eclipse不能拿到linux下直 ...
-
PHP扩展安装方法
php扩展安装方法极简单. 也遵循3大步.但多出一个phpize的步骤. 1.pecl.php.net 在右上解的输入框 中输入需要的扩展 比如 redis 2.搜索完成后会看到两个蓝色的框 ...
-
(一〇二)静态库(.a)的打包
库是代码的集合,根据代码公开程度,分为开源库和闭源库. 其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现. 静态库的拓展名是.a或者.framework,动态库则是.dylib ...
-
win10连接无线网,开启移动热点,手机连接它手机一直显示获取ip地址中。
*必须要有无线网卡才能设置WIFI首先打开电脑,选中“计算机”或者“我的电脑”,右击进入“管理”选项“.打开“计算机管理”窗口之后,在左栏菜单选项中找到“服务和应用程序”下的“服务”选项,如图点击进入 ...