Linux life and tips
  • 2010-03-17

    mysql 中间件amoeba 试用 - [mysql]

    Tag:mysql amoeba

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://ri0day.blogbus.com/logs/60682549.html

    mysql中间键做对外透明的mysql loadblance集群还是有一定可行性的,目前有mysql proxy ,mmm ,以及amoeba

    amoeba是中国人写的所以先试用一下。过程就记录一下了。简单

    实现功能roundrobin

    环境是我单机3个实例。

    1,安装jdk
    ./jdkxxx.bin
    export JAVA_HOME=/path/to/new_jdk

    2.安装amoeba
    mkdir proxy
    mv amoeba*.zip proxy
    cd proxy&&unzip amoeba*.zip

    3.配置amoeba
    cp amoeba.xml amoeba.xml.bak

    4.start server
    chmod +x proxy/bin/amoeba&&./proxy/bin/amoeba

    ###roundrobin
    <?xml version="1.0" encoding="gbk"?>

    <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
    <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">

        <server>
            <!-- proxy server绑定的端口 -->
            <property name="port">8066</property>
           
            <!-- proxy server绑定的IP -->
            <!--
            <property name="ipAddress">127.0.0.1</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>
           
            <!-- 对外验证的密码 -->
            <!--注意这里是注释的,并且这里的用户与密码不与mysql相关
            <property name="password">password</property>
            -->
        </server>
       
        <!--
            每个ConnectionManager都将作为一个线程启动。
            manager负责Connection IO读写/死亡检测
        -->
        <connectionManagerList>
            <connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
                <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
               
                <!--
                  default value is avaliable Processors
                <property name="processors">5</property>
                 -->
            </connectionManager>
        </connectionManagerList>
       
        <dbServerList>
            <!--
                一台mysqlServer 需要配置一个pool,
                如果多台 平等的mysql需要进行loadBalance,
                平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool
                简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig
                或者自己写一个ObjectPool。
            -->
            <dbServer name="server1">
               
                <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                    <property name="manager">defaultManager</property>
                   
                    <!-- 真实mysql数据库端口 -->
                    <property name="port">3306</property>
                   
                    <!-- 真实mysql数据库IP -->
                    <property name="ipAddress">127.0.0.1</property>
                    <property name="schema">test</property>
                   
                    <!-- 用于登陆mysql的用户名 -->
                    <property name="user">root</property>
                   
                    <!-- 用于登陆mysql的密码 -->
                   
                    <!--
                    <property name="password">fangyou</property>
                    -->
                   
                </factoryConfig>
               
                <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>
            <dbServer name="server2">
               
                <!-- PoolableObjectFactory实现类 -->
                <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                    <property name="manager">defaultManager</property>
                   
                    <!-- 真实mysql数据库端口 -->
                    <property name="port">3307</property>
                   
                    <!-- 真实mysql数据库IP -->
                    <property name="ipAddress">127.0.0.1</property>
                    <property name="schema">test</property>
                   
                    <!-- 用于登陆mysql的用户名 -->
                    <property name="user">root</property>
                   
                    <!-- 用于登陆mysql的密码 -->
                   
                    <!--
                    <property name="password">fangyou</property>
                    -->
                   
                </factoryConfig>
               
                <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>
            <dbServer name="server3">
           
                <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                    <property name="manager">defaultManager</property>
                   
                    <!-- 真实mysql数据库端口 -->
                    <property name="port">3308</property>
                   
                    <!-- 真实mysql数据库IP -->
                    <property name="ipAddress">127.0.0.1</property>
                    <property name="schema">test</property>
                   
                    <!-- 用于登陆mysql的用户名 -->
                    <property name="user">root</property>
                   
                    <!-- 用于登陆mysql的密码 -->
                   
                    <!--
                    <property name="password">fangyou</property>
                    -->
                   
                </factoryConfig>
                <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>
           
            <dbServer name="multiPool" virtual="true">
                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                    <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED -->
                    <property name="loadbalance">1</property>               
                    <property name="poolNames">server1,server2,server3</property>
                </poolConfig>
            </dbServer>
           
        </dbServerList>
       
        <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>
            <property name="defaultPool">multiPool</property>
           
            <!--
            <property name="writePool">server1</property>
            <property name="readPool">server1</property>
            -->
            <property name="needParse">true</property>
        </queryRouter>
    </amoeba:configuration>

    5.test
    若上面密码项目是注释的不需要输入密码.

    [root@localhost ~]# mysql -uroot -p -h172.18.4.125 -P8066
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 32997440
    Server version: 5.1.22-mysql-amoeba-proxy MySQL Community Server (GPL)

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> show variables like '%socket%';
    +---------------+------------------+
    | Variable_name | Value            |
    +---------------+------------------+
    | socket        | /tmp/mysql1.sock |
    +---------------+------------------+
    1 row in set (0.00 sec)

    mysql> show variables like '%socket%';
    +---------------+------------------+
    | Variable_name | Value            |
    +---------------+------------------+
    | socket        | /tmp/mysql2.sock |
    +---------------+------------------+
    1 row in set (0.01 sec)

    mysql> show variables like '%socket%';
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | socket        | /tmp/mysql.sock |
    +---------------+-----------------+
    1 row in set (0.01 sec)


    收藏到:Del.icio.us