mysql基于mysql-proxy和amoeba的读写分离以及tcpdump+wireshark工具验证(下)

mysql基于mysql-proxy和amoeba的读写分离

                以及tcpdump+wireshark工具验证(下)


【基于amoeba的读写分离】

此处依然,借助上一个节点的主从不再配置。

lftp 172.16.0.1:/pub/Sources/6.x86_64/amoeba> mgetamoeba-mysql-binary-2.2.0.tar.gz
[root@node2 local ]# mkdir amoeba  #####因为amoeba解压之后是多个文件,我们这里给建文件夹
[root@node2 local ]#cd
[root@node2 ~ ]# tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@node2 ~ ]# cd /usr/local/amoeba/
[root@node2 amoeba ]# ls 
benchmark  bin changelogs.txt  conf  lib LICENSE.txt  README.html
[root@node2 ~ ]# rpm -ivh jdk-7u67-linux-x64.rpm   ####因为amoeba是JAVA程序,所以需要先先安装JDK。
[root@node2 profile.d ]# vim java.sh   #####配置JDK的环境变量
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
[root@node2 profile.d ]# java -version    #######JDK正常
java version "1.7.0_67" Java(TM) SE Runtime Environment (build 1.7.0_67-b01) 
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

#######################################配置的dbServers.xml#####################################

##########################看配置文件的名字就知道这是定义后端的配置文件#########################

[root@node2 conf ]# vim dbServers.xml
  1 <?xml version="1.0"encoding="gbk"?>
  2
  3 <!DOCTYPE amoeba:dbServers SYSTEM"dbserver.dtd">
  4 <amoeba:dbServersxmlns:amoeba="http://amoeba.meidusa.com/">
  5
  6        <!--
  7       Each dbServer needs to be configured into a Pool,
  8      If you need to configure multiple dbServer with load balancing that can be simplified by the following co   
nfiguration:
  9             add attribute with name virtual = "true" in dbServer, but theconfiguration does not allow the element w   
ith name factoryConfig
 10             such as 'multiPool' dbServer  
 11        -->
 12
 13    <dbServer name="abstractServer"abstractive="true">
 14        <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
 15            <propertyname="manager">${defaultManager}</property>
 16            <property name="sendBufferSize">64</property>
 17            <property name="receiveBufferSize">128</property>
 18
 19             <!-- mysql port -->                        ####定义链接后端的MySQL端口
 20            <property name="port">3306</property>
 21
 22             <!-- mysql schema -->                 ####定义连接的后端数据库
 23            <property name="schema">test</property>   
 24
 25             <!-- mysql user -->    ####定义连接后端使用的用户(
 26             <propertyname="user">admin</property>
 27
 28             <!--  mysql password -->            ####链接后端使用的密码
 29            <property name="password">admin</property>
 30
 31        </factoryConfig>
 32         <!-- 数据库连接配置的公共部分 -->  
 33        <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
 34             <property name="maxActive">500</property>        ####最大连接数,默认500
 35             <property name="maxIdle">500</property>          ####最大空闲连接数
 36             <propertyname="minIdle">10</property>            ####最小空闲连接数
 37            <propertyname="minEvictableIdleTimeMillis">600000</property>  
 38            <property name="timeBetweenEvictionRunsMillis">600000</property>
 39            <property name="testOnBorrow">true</property>
 40            <property name="testOnReturn">true</property>
 41            <property name="testWhileIdle">true</property>
 42        </poolConfig>
 43    </dbServer>
 44
 45     <dbServer name="writedb"  parent="abstractServer"> #########定义一个写的主机   
 46        <factoryConfig>
 47            <!-- mysql ip -->
 48             <propertyname="ipAddress">172.16.11.3</property> #####写主机的IP
 49        </factoryConfig>
 50     </dbServer>
 51
 52     <dbServer name="readdb"  parent="abstractServer">      #####定义一个读主机
 53        <factoryConfig>
 54            <!-- mysql ip -->
 55             <propertyname="ipAddress">172.16.249.141</property> ####读主机的IP
 56        </factoryConfig>
 57    </dbServer>
 58   <!-- 数据库池,虚拟服务器,实现读取的负载均衡 -->
 59     <dbServer name="slaves" virtual="true">         ####定义虚拟主机组
 60      <poolConfig  class="com.meidusa.amoeba.server.MultipleServerPool">
 61    <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED ,3=HA-->
 62             <property name="loadbalance">1</property>  ##1是轮询,2是加权轮询,3高可用
 63         
 64            <!-- Separated by commas,such as: server1,server2,server1 -->
 65             <propertyname="poolNames">readdb</property> ##虚拟组里面包含的后端主机
 66        </poolConfig>
 67    </dbServer>
 68
 69 </amoeba:dbServers>

#####################################配置amoeba的配置文件#############################                            

[root@node2 conf ]#vim amoeba.xml 
  1 <?xml version="1.0"encoding="gbk"?>
  2
  3 <!DOCTYPE amoeba:configuration SYSTEM"amoeba.dtd">
  4 <amoeba:configurationxmlns:amoeba="http://amoeba.meidusa.com/">
  5
  6    <proxy>
  7
  8   <!-- service class must implements com.meidusa.amoeba.service.Service-->
  9        <service name="Amoeba for Mysql"class="com.meidusa.amoeba.net.ServerableConnectionManager">
 10            <!-- port -->
 11             <propertyname="port">8066</property>    ####amoeba的监听端口
 12
 13            <!-- bind ipAddress -->
 14            <!--
 15             <propertyname="ipAddress">127.0.0.1</property>   ####地址是本机
 16             -->
 17
 18            <propertyname="manager">${clientConnectioneManager}</property>
 19
 20            <property name="connectionFactory">
 21            <beanclass="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
 22                     <propertyname="sendBufferSize">128</property>
 23                     <propertyname="receiveBufferSize">64</property> 
 24                 </bean>
 25            </property>
 26
 27            <property name="authenticator">
 28           <beanclass="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
 29
 30          <propertyname="user">admin</property>        #####连接后端用户的账号
 31
 32       <propertyname="password">admin</property>  ####连接后端用户的密码
 33
 34            <property name="filter">
 35             <beanclass="com.meidusa.amoeba.server.IPAccessController">
 36                            <propertyname="ipFile">${amoeba.home}/conf/access_list.conf</property>
 37                         </bean>
 38                     </property>
 39                 </bean>
 40            </property>
 41
 42        </service>
 43
 44        <!-- server class must implements com.meidusa.amoeba.service.Service
-->
 45        <service name="Amoeba Monitor Server"class="com.meidusa.amoeba.monitor.MonitorServer">
 46            <!-- port -->
 47            <!--  default value: randomnumber
 48            <property name="port">9066</property>
 49            -->
 50            <!-- bind ipAddress -->
 51             <propertyname="ipAddress">127.0.0.1</property>
 52            <property name="daemon">true</property>
 53            <propertyname="manager">${clientConnectioneManager}</property>
 54            <property name="connectionFactory">
 55          <beanclass="com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory"></bean>
 56            </property>
 57
 58        </service>
 59
 60        <runtimeclass="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">
 61            <!-- proxy server net IO Read thread size -->
 62            <property name="readThreadPoolSize">20</property>
 63
 64            <!-- proxy server client process thread size -->
 65            <property name="clientSideThreadPoolSize">30</property>
 66
 67            <!-- mysql server data packet process thread size -->
 68            <property name="serverSideThreadPoolSize">30</property> 
 69
 70            <!-- per connection cache prepared statement size  -->
 71            <property name="statementCacheSize">500</property>
 72 
 73            <!-- query timeout( default: 60 second , TimeUnit:second) -->
 74            <property name="queryTimeout">60</property>
 75        </runtime>
 76
 77    </proxy>
 78
 79    <!--
 80        Each ConnectionManager will start as thread
 81        manager responsible for the Connection IO read , Death Detection
 82    -->
 83    <connectionManagerList>
 84        <connectionManager name="clientConnectioneManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrappe    r">
 85            <property name="subManagerClassName">com.meidusa.amoeba.net.ConnectionManager</property>
 86            <!--
 87               default value is avaliableProcessors
 88            <property name="processors">5</property>
 89             -->
 90        </connectionManager>
 91        <connectionManager name="defaultManager"class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
 92            <propertyname="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
 93
 94            <!--
 95               default value is avaliableProcessors
 96            <property name="processors">5</property>
 97             -->
 98        </connectionManager>
 99    </connectionManagerList>
100
101         <!-- default using file loader-->
102     <dbServerLoaderclass="com.meidusa.amoeba.context.DBServerConfigFileLoader">
103         <propertyname="configFile">${amoeba.home}/conf/dbServers.xml</property>
104     </dbServerLoader>
105
106     <queryRouterclass="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
107         <propertyname="ruleLoader">
108             <beanclass="com.meidusa.amoeba.route.TableRuleFileLoader">
109                 <propertyname="ruleFile">${amoeba.home}/conf/rule.xml</property>
110      <propertyname="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
111             </bean>
112         </property>
113        <propertyname="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
114         <propertyname="LRUMapSize">1500</property>
115         <propertyname="defaultPool">writedb</property>  ####默认的后端数据库
116
117         <!--    -->
118         <propertyname="writePool">writedb</property>     ####后端的写主机的虚拟主机
119      <propertyname="readPool">slaves</property>           ####后端的读主机的虚拟主机
120
121         <propertyname="needParse">true</property>
122     </queryRouter>
123</amoeba:configuration> 
[root@node2 bin ]#pwd
/usr/local/amoeba/bin                                      
[root@node2 bin ]# ./amoeba start    ############启动amoeba

wKiom1TLkneQ5FJuAAEfqNFoNko762.jpg

[root@node2 conf ]# mysql -uadmin -padmin -h172.16.249.106 -P8066 ####连入测试
mysql> create database haha;
Query OK, 1 row
affected (0.04 sec)

使用tcpdump抓包测试结果

wKiom1TLmMCTexf4AAB6W2PI8DY478.jpg

[root@node3 ~]#tcpdump -i eth0 -w mysql.pkg port 3306

wKiom1TLmPbTd3KEAACrlA3Z9Ok713.jpg


你可能感兴趣的:(数据库,mysql,读写分离)