免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 飞鸿无痕
打印 上一主题 下一主题

【原创】mysql-mmm+amoeba+keepalived实现mysql高可用和读写分离 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-11-17 13:40 |只看该作者
回复 20# liang3391

试下,查询和插入的时候请使用:database_name.table_name的形式,比如::
select * from pk_cms_new.table_name
insert into pk_cms_new.table_name (id ,name) values ('1','zhang');
等形式
试下下面的配置!
  1. <?xml version="1.0" encoding="gbk"?>

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

  4.         <server>
  5.                 <!-- proxy server绑定的端口 -->
  6.                 <property name="port">8066</property>

  7.                 <!-- proxy server绑定的IP -->
  8.                 <property name="ipAddress">192.168.53.26</property>
  9.                 <!-- proxy server net IO Read thread size -->
  10.                 <property name="readThreadPoolSize">20</property>

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

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

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

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

  19.                 <!-- 对外验证的用户名 -->
  20.                 <property name="user">pk_down</property>

  21.                 <!-- 对外验证的密码 -->
  22.                 <property name="password">tmg2009!</property>

  23.                 <!-- query timeout( default: 60 second , TimeUnit:second) -->
  24.                 <property name="queryTimeout">60</property>
  25.         </server>

  26.         <!--
  27.                 每个ConnectionManager都将作为一个线程启动。
  28.                 manager负责Connection IO读写/死亡检测
  29.         -->
  30.         <connectionManagerList>
  31.                 <connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
  32.                         <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>

  33.                         <!--
  34.                           default value is avaliable Processors
  35.                         <property name="processors">5</property>
  36.                          -->
  37.                 </connectionManager>
  38.         </connectionManagerList>

  39.         <dbServerList>
  40.                 <!--
  41.                         一台mysqlServer 需要配置一个pool,
  42.                         如果多台 平等的mysql需要进行loadBalance,
  43.                         平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool
  44.                         简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig
  45.                         或者自己写一个ObjectPool。
  46.                 -->
  47.                 <dbServer name="server1">

  48.                         <!-- PoolableObjectFactory实现类 -->
  49.                         <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  50.                                 <property name="manager">defaultManager</property>

  51.                                 <!-- 真实mysql数据库端口 -->
  52.                                 <property name="port">3306</property>

  53.                                 <!-- 真实mysql数据库IP -->
  54.                                 <property name="ipAddress">192.168.53.27</property>
  55.                                 <property name="schema">pk_down,pk_cms_new</property>

  56.                                 <!-- 用于登陆mysql的用户名 -->
  57.                                 <property name="user">pk_down</property>

  58.                                 <!-- 用于登陆mysql的密码 -->

  59.                                 <property name="password">tmg2009!</property>

  60.                         </factoryConfig>

  61.                         <!-- ObjectPool实现类 -->
  62.                         <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
  63.                                 <property name="maxActive">200</property>
  64.                                 <property name="maxIdle">200</property>
  65.                                 <property name="minIdle">10</property>
  66.                                 <property name="minEvictableIdleTimeMillis">600000</property>
  67.                                 <property name="timeBetweenEvictionRunsMillis">600000</property>
  68.                                 <property name="testOnBorrow">true</property>
  69.                                 <property name="testWhileIdle">true</property>
  70.                         </poolConfig>
  71.                 </dbServer>


  72.               <dbServer name="server2">

  73.                         <!-- PoolableObjectFactory实现类 -->
  74.                         <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  75.                                 <property name="manager">defaultManager</property>

  76.                                 <!-- 真实mysql数据库端口 -->
  77.                                 <property name="port">3306</property>

  78.                                 <!-- 真实mysql数据库IP -->
  79.                                 <property name="ipAddress">192.168.53.50</property>
  80.                                 <property name="schema">pk_down,pk_cms_new</property>

  81.                                 <!-- 用于登陆mysql的用户名 -->
  82.                                 <property name="user">pk_down</property>

  83.                                 <!-- 用于登陆mysql的密码 -->

  84.                                 <property name="password">tmg2009!</property>
  85.                                 
  86.                         </factoryConfig>
  87.                         
  88.                         <!-- ObjectPool实现类 -->
  89.                         <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
  90.                                 <property name="maxActive">200</property>
  91.                                 <property name="maxIdle">200</property>
  92.                                 <property name="minIdle">10</property>
  93.                                 <property name="minEvictableIdleTimeMillis">600000</property>
  94.                                 <property name="timeBetweenEvictionRunsMillis">600000</property>
  95.                                 <property name="testOnBorrow">true</property>
  96.                                 <property name="testWhileIdle">true</property>
  97.                         </poolConfig>
  98.                 </dbServer>



  99.                 </dbServer>
  100.                 <dbServer name="write_pool" virtual="true">
  101.                         <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  102.                                 <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  103.                                 <property name="loadbalance">1</property>

  104.                                 <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
  105.                                 <property name="poolNames">server1</property>
  106.                         </poolConfig>
  107.                 </dbServer>

  108.                 </dbServer>
  109.                 <dbServer name="read_pool" virtual="true">
  110.                         <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  111.                                 <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  112.                                 <property name="loadbalance">1</property>

  113.                                 <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
  114.                                 <property name="poolNames">sever1,server2</property>
  115.                         </poolConfig>
  116.                 </dbServer>

  117.         </dbServerList>

  118.         <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
  119.                 <property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
  120.                 <property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
  121.                 <property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
  122.                 <property name="LRUMapSize">1500</property>
  123.                 <property name="defaultPool">write_pool</property>

  124.                 <property name="writePool">write_pool</property>
  125.                 <property name="readPool">read_pool</property>
  126.                 <property name="needParse">true</property>
  127.         </queryRouter>
  128. </amoeba:configuration>
复制代码

论坛徽章:
0
22 [报告]
发表于 2010-11-18 12:42 |只看该作者
[root@linux26 conf]# cat amoeba.xml
<?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">192.168.17.26</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">pk_down</property>

                <!-- 对外验证的密码 -->
                <property name="password">tmg2009!</property>

                <!-- query timeout( default: 60 second , TimeUnit:second) -->
                <property name="queryTimeout">60</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">

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

                                <!-- 真实mysql数据库端口 -->
                                <property name="port">3306</property>

                                <!-- 真实mysql数据库IP -->
                                <property name="ipAddress">192.168.17.27</property>
                                <property name="schema">pk_cms_new</property>
                                

                                <!-- 用于登陆mysql的用户名 -->
                                <property name="user">pkall</property>

                                <!-- 用于登陆mysql的密码 -->

                                <property name="password">tmg2009!</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>


              <dbServer name="server2">

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

                                <!-- 真实mysql数据库端口 -->
                                <property name="port">3306</property>

                                <!-- 真实mysql数据库IP -->
                                <property name="ipAddress">192.168.17.26</property>
                                <property name="schema">pk_cms_new</property>

                                <!-- 用于登陆mysql的用户名 -->
                                <property name="user">pkall</property>

                                <!-- 用于登陆mysql的密码 -->

                                <property name="password">tmg2009!</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>

            

              <dbServer name="server3">

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

                                <!-- 真实mysql数据库端口 -->
                                <property name="port">3306</property>

                                <!-- 真实mysql数据库IP -->
                                <property name="ipAddress">192.168.17.28</property>
                                <property name="schema">pk_cms_new</property>

                                <!-- 用于登陆mysql的用户名 -->
                                <property name="user">pkall</property>

                                <!-- 用于登陆mysql的密码 -->

                                <property name="password">tmg2009!</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>

                <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>

                <dbServer name="slave" 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">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">master,slave</property>

                <property name="writePool">master</property>
                <property name="readPool">slave</property>
                <property name="needParse">true</property>
        </queryRouter>
</amoeba:configuration>

192.167.17.27做mater提供写,192.168.17.26和192.168.17.28都做为slave提供读,如上配置,如果master宕机了,读会切到slave ?同时工作只要一个Master 写入。

论坛徽章:
0
23 [报告]
发表于 2010-11-18 13:29 |只看该作者
回复 22# liang3391


    建议采用mmm+amoeba架构

论坛徽章:
0
24 [报告]
发表于 2011-07-29 16:27 |只看该作者
你好,请问你的压力测试测试了吗

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
25 [报告]
发表于 2011-07-29 16:52 |只看该作者
好文章,谢谢楼主分享。

论坛徽章:
0
26 [报告]
发表于 2011-08-02 11:26 |只看该作者
请问monitor如果出故障了 是不是全部挂了?

论坛徽章:
0
27 [报告]
发表于 2011-09-01 11:07 |只看该作者
同楼上问题,另外请问这个解决方案可否应用与生产环境

论坛徽章:
0
28 [报告]
发表于 2012-02-11 12:41 |只看该作者
按上面配置 ,如果主挂了,备用住接替,但是AMOEBA设置的写POOL中并没有备用主的IP,这样就造成应用程序无法写入。。。。

论坛徽章:
0
29 [报告]
发表于 2012-02-11 12:43 |只看该作者
如果把备用主的IP也设置到写POOL中,那么2个主同时写的话总归容易出问题

论坛徽章:
0
30 [报告]
发表于 2013-03-22 10:14 |只看该作者
同楼上的, 还有部署到生产环境下吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP