sjehzy
发表于 2010-10-28 11:07
<!-- 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.18.118</property>
<property name="schema">amoeba</property>
<!-- 用于登陆mysql的用户名 -->
<property name="user">hanzeyong</property>
<!-- 用于登陆mysql的密码 -->
<property name="password">justdoit</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</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</property>
<property name="writePool">master</property>
<property name="readPool">slave</property>
<property name="needParse">true</property>
</queryRouter>
</amoeba:configuration>
我的配置。。。
已经没有注销掉了
飞鸿无痕
发表于 2010-10-28 11:27
回复 31# sjehzy
你读那里只写了server2.所以你读取的数据都是从server2过来的,感觉不到server1的存在,其实写的操作都在server1上进行了!在slave那里加上server1吧
sjehzy
发表于 2010-10-28 14:25
我的配置:
# more 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">3306</property>
<!-- proxy server绑定的IP -->
<property name="ipAddress">192.168.18.119</property>
<!-- proxy server net IO Read thread size -->
<property name="readThreadPoolSize">100</property>
<!-- proxy server client process thread size -->
<property name="clientSideThreadPoolSize">80</property>
<!-- mysql server data packet process thread size -->
<property name="serverSideThreadPoolSize">100</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">hanyong</property>
<!-- 对外验证的密码 -->
<property name="password">justdoit</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.MultiConnectionManagerWrappe
r">
<property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</p
roperty>
<!--
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.18.117</property>
<property name="schema">amoeba</property>
<!-- 用于登陆mysql的用户名 -->
<property name="user">hanyong</property>
<!-- 用于登陆mysql的密码 -->
<property name="password">justdoit</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.18.118</property>
<property name="schema">amoeba</property>
<!-- 用于登陆mysql的用户名 -->
<property name="user">hanyong</property>
<!-- 用于登陆mysql的密码 -->
<property name="password">justdoit</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">server1,server2</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</property>
<property name="writePool">master</property>
<property name="readPool">slave</property>
<property name="needParse">true</property>
</queryRouter>
</amoeba:configuration>
如设置成<property name="poolNames">server1,server2</
property>无法实现读写分离。。。。当我的master服务器mysql关闭服务无法时程序连接数据库出错,读取时无法读取我的slave服务器,
或者我的master服务器mysql服务正常时读取数据也无法读到我的slave 服务器上。。。
十分胸闷
飞鸿无痕
发表于 2010-10-28 14:53
回复 32# 飞鸿无痕
从配置上没看出问题。请从其他方面查找,
1、改amoeba主机是否对两个数据库服务器有访问权限(分别在amoeba主机上用命令行登录,看是否OK)
2、防火墙问题
还解决不料能否远程协助,这个配置很简单!
sjehzy
发表于 2010-10-29 10:34
我的系统问题,因为我的这个系统之前是做测试的,安装的乱七八糟的。。。
我重装以后正常了。。。
谢谢{:3_189:}
luwenju
发表于 2010-10-30 07:37
回复 1# 飞鸿无痕
兄弟,请教个问题 我有两台mysql服务器,主从模式,Amoeba虽然能实现读写分离,它能实现故障切换吗? 比如主服务器挂掉后从服务器会自动接管
飞鸿无痕
发表于 2010-10-30 08:28
回复 36# luwenju
目前测试的切换有问题,正在和开发者沟通中,希望能通过amoeba来实现,另外还别的方案,可以做两个主库,然后两个主库之间用lvs可以实现自动接管!
luwenju
发表于 2010-10-30 09:11
回复 37# 飞鸿无痕
嗯,那在容俺多问几个问题,嘿嘿
1、两个主库是不是指master-master模式,也就是两个库上都可以进行写、读 ?
2、用LVS的话,所有的数据都是这两台处理,当挂掉一个后剩下的一个处理,对吧?
3、当挂掉的服务器弄好之后在和目前剩下的那个互为master-master 对吧?
哥,别嫌俺啰嗦 :mrgreen:
luwenju
发表于 2010-10-30 09:15
回复 37# 飞鸿无痕
哥,您老人家看看下面这样搭建后是不是就互为主主复制了,也就是master-master
一、安装配置mysql主从服务器(主:192.168.1.201 从:192.168.1.202)
1、设置主服务器serverID=1,从服务器severID=2;binlog均为log-bin=mysql-bin,然后重启主从两台服务器
2、主服务器(192.168.1.201)新建授权用户
>grant replication slave on *.* to 'replication'@'%' identified by 'replication';
>show master status;
mysql-bin.000004 106
3、从服务器(192.168.1.202)配置
> change master to master_host='192.168.1.201',master_user='replication', master_password='replication',master_log_file='mysql-bin.000004',master_log_pos=106;
>start slave;
>show slave status \G
Master_Host: 192.168.1.201
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
4、从服务器配置192.168.1.02
>grant replication slave on *.* to 'replication'@'%' identified by 'replication';
>show master status;
mysql-bin.000005 244
5、主服务器配置192.168.1.201
>change master to master_host='192.168.1.202',master_user='replication', master_password='replication',master_log_file='mysql-bin.000005',master_log_pos=244;
>start slave;
>show slave status \G
Master_Host: 192.168.1.202
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
飞鸿无痕
发表于 2010-10-30 09:30
回复 38# luwenju
就是两个主库多个从库的架构了,两个主库互为主备,当一个主库有问题的时候另一个接管,这样写操作依然正常!