您的足迹:首页 > Linux >Centos 中配置amoeba进行数据库读写分离

Centos 中配置amoeba进行数据库读写分离

点击查看原图


架构前所有节点准备:

1,主机名三步,互相绑定
2,时间同步
3,关闭iptables,selinux
4, 配置好yum
5, 静态ip地址

1,因为是java开发的,需要java运行环境,也就是jdk;我们这里自己下载安装jdk
如果你的机器上没有安装JavaTM环境,可以访问http://www.oracle.com/technetwork/java/javase/downloads/index.html进行下载。可以根据你的操作系统等详情安装JavaTM环境。

./jdk-6u45-linux-x64.bin    --直接./执行它,就可以安装,会自动解压成一个目录在当前目录下
# mv jdk1.6.0_45/ /usr/local/java    --把jdk的目录移到/usr/local下叫java
在/etc/profile底部加入如下内容

JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH

source /etc/profile    --让profile文件立即生效

# java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)


2,下载安装amoeba
http://sourceforge.net/projects/amoeba/files/
amoeba-mysql-binary-2.2.0.tar.gz

# mkdir /usr/local/amoeba
# tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

#      
--加上下面两行(把这两句加到最上面,不要加到最下面,因为这个脚本要用到这个变量的),让这个命令在启动时,就会去找/usr/local/java的jdk

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

--------------------
amoeba的配置文件介绍

Amoeba有哪些主要的配置文件?

    想象Amoeba作为数据库代理层,它一定会和很多数据库保持通信,因此它必须知道由它代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等。这些信息存储在$AMOEBA_HOME/conf/dbServers.xml中。

    Amoeba为了完成数据切分提供了完善的切分规则配置,为了了解如何分片数据、如何将数据库返回的数据整合,它必须知道切分规则。与切分规则相关的信息存储在$AMOEBA_HOME/conf/rule.xml中。

    当我们书写SQL来操作数据库的时候,常常会用到很多不同的数据库函数,比如:UNIX_TIMESTAMP()、SYSDATE()等等。这些函数如何被Amoeba解析呢?$AMOEBA_HOME/conf/functionMap.xml描述了函数名和函数处理的关系。

    对$AMOEBA_HOME/conf/rule.xml进行配置时,会用到一些我们自己定义的函数,比如我们需要对用户ID求HASH值来切分数据,这些函数在$AMOEBA_HOME/conf/ruleFunctionMap.xml中定义。

    Amoeba可以制定一些可访问以及拒绝访问的主机IP地址,这部分配置在$AMOEBA_HOME/conf/access_list.conf中

    Amoeba允许用户配置输出日志级别以及方式,配置方法使用log4j的文件格式,文件是$AMOEBA_HOME/conf/log4j.xml。


-------------------------------


--并对mysql进行授权,授权的IP为amoeba的IP
mysql> grant all on *.* to 'amoeba'@'10.41.23.1' identified by 'fOygkHqVQtiXnMgf';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

授权后,可以去amoeba(2.2.2.10)这台去连接一下这两个mysql,需要能连才行

/usr/local/mysql/bin/mysql -u amoeba -h 10.41.25.1 -p

# vim /usr/local/amoeba/conf/dbServers.xml    --修改此配置文件,定义代理哪些后台数据库
--下面我做了修改的行有23行(写上要操作的后台数据库的schema);26行和29行(授权的用户名和密码);48行和55行(写上后台数据库的IP)




 19                         <!-- mysql port -->
 20                         <property name="port">3306</property>
 21
 22                         <!-- mysql schema -->
 23                         <property name="schema">cluster</property>
 24
 25                         <!-- mysql user -->
 26                         <property name="user">amoeba</property>
 27
 28                         <!--  mysql password -->
 29                         <property name="password">123456</property>



 45         <dbServer name="server1"  parent="abstractServer">
 46                 <factoryConfig>
 47                         <!-- mysql ip -->
 48                         <property name="ipAddress">2.2.2.11</property>
 49                 </factoryConfig>
 50         </dbServer>
 51
 52         <dbServer name="server2"  parent="abstractServer">
 53                 <factoryConfig>
 54                         <!-- mysql ip -->
 55                         <property name="ipAddress">2.2.2.12</property>
 56                 </factoryConfig>
 57         </dbServer>



# vim /usr/local/amoeba/conf/amoeba.xml     --再修改这个文件,修改了30行和32行(授权的用户和密码),注意这里的用户名和密码跟数据库授权的用户名和密码无关,可以写成不一样的用户和密码来测试
--上一个配置文件里配置的用户名和密码是数据库授权给amoeba连接的用户名和密码,而这个用户名和密码是amoeba给客户端(php,java,web程序等)连接的
 11                         <property name="port">3306</property>

 30                                         <property name="user">mysqluser</property>
 31
 32                                         <property name="password">123456</property>
 
 
使用amoeba实现读写分离功能(queryrouter)



# vim /usr/local/amoeba/conf/dbServers.xml    
--然后把两个从(server1,server2)加入到一个pool,我这里poolname为multiPool


        <dbServer name="multiPool" virtual="true">
                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                        <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
                        <property name="loadbalance">1</property>

                        <!-- Separated by commas,such as: server1,server2,server1 -->
                        <property name="poolNames">server1,server2</property>
                </poolConfig>
        </dbServer>


注:poolNames 填的是从数据库





# vim /usr/local/amoeba/conf/amoeba.xml    
--打开amoeba.xml文件,在原来的基础上修改,把117行和120行的注释去掉,修改115行和118行为server1(也就是mysql主,默认池和写池)
--改119行为server(也就是mysql从,读池)


114                 <property name="LRUMapSize">1500</property>
115                 <property name="defaultPool">server1</property>
116                 
117                 
118                 <property name="writePool">server1</property>
119                 <property name="readPool">multiPool</property>
120                 
121                 <property name="needParse">true</property>


在amoeba的代理服务器上启动amoeba服务

# /usr/local/amoeba/bin/amoeba start &

添加开机自启动
echo "/usr/local/amoeba/bin/amoeba start &" >> /etc/rc.local

在客户端测试
# /usr/local/mysql/bin/mysql -h 1.1.1.8 -u mysqluser -p123456 -P3306
本博客所有文章如无特别注明均为原创。作者:潇潇枫叶复制或转载请以超链接形式注明转自 木风溪
原文地址《Centos 中配置amoeba进行数据库读写分离

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)