mysql amoeba構成に基づく読み書き分離


                     Mysql    -    Amoeba
                     
   mysql          ,              。               
,mysql  amoeba           :             ,        ,  
       。    ,                 ,    。            。 

      ,           。         。
      rhel6.4 x86_64   mysql 5.1.50  ,‘#’        !
                           
Master-->Slave
                                                                    
 、    
Master-IP:10.0.0.201
Slave- IP:10.0.0.202
Amobea-IP:10.0.0.203

 、  JDK
# mkdir /amoeba
# tar -xvf jdk-7u40-linux-x64.tar.gz -C /amoeba/
# vim /etc/profile
JAVA_HOME=/amoeba/jdk1.7.0_40
export JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH
export PATH

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASSPATH

# java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

 、  Amoeba
# unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba/
# chmod -R +x /usr/local/amoeba/bin/


 、    
>grant all privileges on *.* to 'amoeba'@'%' identified by 'amoeba123';
>flush privileges;


 、  Amoeba  
# cd /usr/local/amoeba/conf
# vim amoeba.xml
        
#========================================================
 <!-- proxy server      -->
                <property name="port">9006</property>

                <!-- proxy server   IP -->
#  amoeba IP  
                <property name="ipAddress">10.0.0.203</property>

                <!-- proxy server net IO Read thread size -->
                <property name="readThreadPoolSize">20</property>

                <!-- proxy server client process thread size -->
                <property name="clientSideThreadPoolSize">30</property>

                <!-- mysql server data packet process thread size -->
                <property name="serverSideThreadPoolSize">30</property>

                <!-- socket Send and receive BufferSize(unit:K)  -->
                <property name="netBufferSize">128</property>

                <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
                <property name="tcpNoDelay">true</property>

                <!--          -->
                <property name="user">root</property>

                <!--         -->
#  amoeba     
                <property name="password">123456</property>
                
        《  master      》
#========================================================             
                <dbServer name="server1">

                        <!-- PoolableObjectFactory    -->
                        <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                                <property name="manager">defaultManager</property>

                                <!--   mysql      -->
                                <property name="port">3306</property>
#Master  IP  
                                <!--   mysql   IP -->
                                <property name="ipAddress">10.0.0.201</property>
                                <property name="schema">test</property>
#  amoeba     
                                <!--     mysql     -->
                                <property name="user">amobea</property>
#  amoeba    
                                <!--     mysql    -->


                                <property name="password">amoeba123</property>


                        </factoryConfig>

                        <!-- ObjectPool    -->
                        <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
                                <property name="maxActive">200</property>
                                <property name="maxIdle">200</property>
                                <property name="minIdle">10</property>
                                <property name="minEvictableIdleTimeMillis">600000</property>
                                <property name="timeBetweenEvictionRunsMillis">600000</property>
                                <property name="testOnBorrow">true</property>
                                <property name="testWhileIdle">true</property>
                        </poolConfig>
                </dbServer>
                
        《  slave      》
#========================================================                  
                
<dbServer name="server2">

                        <!-- PoolableObjectFactory    -->
                        <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                                <property name="manager">defaultManager</property>

                                <!--   mysql      -->
                                <property name="port">3306</property>
#  amoeba  slave  IP  
                                <!--   mysql   IP -->
                                <property name="ipAddress">10.0.0.202</property>
                                <property name="schema">test</property>
#  amoeba  slave     
                                <!--     mysql     -->
                                <property name="user">amoeba</property>

                                <!--     mysql    -->

#  amoeba  slave      
                                <property name="password">amoeba123</property>


                        </factoryConfig>

                        <!-- ObjectPool    -->
                        <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
                                <property name="maxActive">200</property>
                                <property name="maxIdle">200</property>
                                <property name="minIdle">10</property>
                                <property name="minEvictableIdleTimeMillis">600000</property>
                                <property name="timeBetweenEvictionRunsMillis">600000</property>
                                <property name="testOnBorrow">true</property>
                                <property name="testWhileIdle">true</property>
                        </poolConfig>
                </dbServer>                
               
        《  master slave     (pool)》
#=======================================================      
#     master         <dbServer name="master" virtual="true">
                        <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                                <!--        1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
                                <property name="loadbalance">1</property>

                                <!--    pool     poolName        -->
                                <property name="poolNames">server1</property>
                        </poolConfig>
                </dbServer>


#     slave                <dbServer name="slave" virtual="true">
                        <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                                <!--        1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
                                <property name="loadbalance">1</property>
#      pool       
                                <!--    pool     poolName        -->
                                <property name="poolNames">server1,server2</property>
                        </poolConfig>
                </dbServer>
             
        《  master slave    》
#=======================================================                 
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
                <property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
                <property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
                <property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
                <property name="LRUMapSize">1500</property>
#      ,    !       <!--   master slave     Begin-->
                <property name="defaultPool">master</property>
                <property name="writePool">master</property>
                <property name="readPool">slave</property>
               <!--   master slave      End-->
                <property name="needParse">true</property>
        </queryRouter>


 、  Amoeba    
# vim /usr/local/amoeba/bin/amoeba
#DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"       ,     
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"       

 、  Amoeba  
# nohup bash -x amoeba &
# cat nohup.out       ?
# ps -ef | grep amoeba             
root      1896  1637  1 03:28 pts/3    00:00:06 /Amoeba/jdk1.7.0_40/bin/java -server -Xms256m -Xmx256m -Xss256k -Damoeba.home=/usr/local/amoeba -Dclassworlds.conf=/usr/local/amoeba/bin/amoeba.classworlds -classpath /usr/local/amoeba/lib/classworlds-1.0.jar org.codehaus.classworlds.Launcher


# mysql -uroot -p123456 -h 10.0.0.203 -P 9006