• MySQL读写分离之amoeba


    MySQL读写分离之amoeba
    主从复制的搭建环境参考:http://www.cnblogs.com/fansik/p/5270334.html
    amoeba依赖于jdk环境:
    jdk环境搭建参考:http://www.cnblogs.com/fansik/p/5406827.html
    amoeba的具体参数说明参考:http://blog.chinaunix.net/uid-20639775-id-154600.html
    1、安装
    mkdir /usr/local/amoeba
    tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
    2、amoeba.xml配置信息

    <?xml version="1.0" encoding="gbk"?>
    <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
    <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
        <proxy>
            <service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
                <property name="port">8066</property>
                <property name="ipAddress">0.0.0.0</property>
                <property name="manager">${clientConnectioneManager}</property>
                <property name="connectionFactory">
                    <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
                        <property name="sendBufferSize">128</property>
                        <property name="receiveBufferSize">64</property>
                    </bean>
                </property>
                
                <property name="authenticator">
                    <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
                        <property name="user">fansik</property>
                        <property name="password">fanjinbao</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>
            <service name="Amoeba Monitor Server" class="com.meidusa.amoeba.monitor.MonitorServer">
                <property name="port">9066</property>
                <property name="ipAddress">127.0.0.1</property>
                <property name="daemon">true</property>
                <property name="manager">${clientConnectioneManager}</property>
                <property name="connectionFactory">
                    <bean class="com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory"></bean>
                </property>
                
            </service>
            <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">
                <property name="readThreadPoolSize">20</property>
                <property name="clientSideThreadPoolSize">30</property>
                <property name="serverSideThreadPoolSize">30</property>
                <property name="statementCacheSize">500</property>
                <property name="queryTimeout">60</property>
            </runtime>
            
        </proxy>
        <connectionManagerList>
            <connectionManager name="clientConnectioneManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
                <property name="subManagerClassName">com.meidusa.amoeba.net.ConnectionManager</property>
            </connectionManager>
            <connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
                <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
            </connectionManager>
        </connectionManagerList>
        
        <dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader">
            <property name="configFile">${amoeba.home}/conf/dbServers.xml</property>
        </dbServerLoader>
        
        <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>
            <property name="writePool">master</property>
            <property name="readPool">multiPool</property>
            <property name="needParse">true</property>
        </queryRouter>
    </amoeba:configuration>

    3、dbServer.xml配置信息

    <?xml version="1.0" encoding="gbk"?>
    <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
    <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
        <dbServer name="master">
            <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                            <property name="manager">${defaultManager}</property>
                            <property name="sendBufferSize">64</property>
                            <property name="receiveBufferSize">128</property>
                <property name="ipAddress">192.168.1.1.210</property>
                            <property name="port">3401</property>
                            <property name="schema">fansik</property>
                            <property name="user">fansik</property>
                            <property name="password">fansik</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 name="slave">
            <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                            <property name="manager">${defaultManager}</property>
                            <property name="sendBufferSize">64</property>
                            <property name="receiveBufferSize">128</property>
                <property name="ipAddress">192.168.1.1.210</property>
                            <property name="port">3402</property>
                            <property name="schema">fansik</property>
                            <property name="user">fansik</property>
                            <property name="password">fansik</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 name="multiPool" virtual="true">
            <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                <property name="loadbalance">1</property>
                <property name="poolNames">master,slave</property>
            </poolConfig>
        </dbServer>
    </amoeba:dbServers>

    4、System-V方式启动amoeba,脚本如下:

    #!/bin/sh
    # chkconfig: 12345 62 62
    # Author: fansik
    # description: amoeba 2.2.0 AutoRun Servimces # /etc/init.d/amoeba # # Run-level Startup script for the Oracle Instance, Listener, and # Web Interface export JAVA_HOME=/usr/local/jdk1.8 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=Amoeba AMOEBA_BIN=/usr/local/amoeba/bin PIDFILE=/usr/local/amoeba/Amoeba-MySQL.pid SCRIPTNAME=/etc/init.d/amoeba case "$1" in start) echo -n "Starting $NAME... " $AMOEBA_BIN/amoeba start &>/dev/null & echo -e " [ 33[1;32mok33[0m ]" ;; stop) echo -n "Stoping $NAME... " $AMOEBA_BIN/amoeba stop &>/dev/null echo -e " [ 33[1;32mok33[0m ]" ;; restart) echo -n "Restarting $NAME..." $AMOEBA_BIN/amoeba stop &>/dev/null sleep 1 $AMOEBA_BIN/amoeba start &>/dev/null & echo -e " [ 33[1;32mok33[0m ]" ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart}" exit 1 ;; esac

    5、开机自启动设置
    chmod +x /etc/init.d/amoeba
    chkconfig --add amoeba
    chkconfig amoeba on
    6、搭建过程中遇到的问题
        在测试读写分离的时候不能开启从库复制,也就是要登录slave数据库执行stop slave,否则无法验证而且在主库停掉服务后,也是无法读的,
    因为主库停掉以后,从库的状态会变成Slave_IO_Running: No。

       在启动amoeba的时候需要将Xss:每个线程的堆栈大小增加,否则无法启动服务,默认大小是128,调整为256即可,配置位置就是amoeba的bin目录下,一个叫做amoeba的文件。

  • 相关阅读:
    来自lombok的注解(解决idea中的找不到get,set方法,找不到log的问题)
    IDL语言开发规范
    神经网络训练时出现nan错误
    Hadoop WordCount程序
    Hadoop2.4.1伪分布式安装
    Hadoop简介
    linux 安装tensorflow(gpu版本)
    高级映射,查询缓存和与spring整合
    用mybatis实现dao的编写或者实现mapper代理
    mybatis介绍与环境搭建
  • 原文地址:https://www.cnblogs.com/fansik/p/7168501.html
Copyright © 2020-2023  润新知