You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
grant all on crm.* to amoeba@'192.168.64.%' identified by 'amoeba';
flush privileges;
解压安装配置amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -Camoeba
修改dbServers.xml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPEamoeba:dbServers SYSTEM "dbserver.dtd">
<amoeba:dbServersxmlns:amoeba="http://amoeba.meidusa.com/">
<!-- Each dbServer needs to be configured into a Pool, If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration: add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig such as 'multiPool' dbServer -->
<dbServername="abstractServer"abstractive="true">
<factoryConfigclass="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<propertyname="manager">${defaultManager}</property>
<propertyname="sendBufferSize">64</property>
<propertyname="receiveBufferSize">128</property>
<!-- amoeba内部操作管理mysql时的端口 -->
<propertyname="port">3306</property>
<!-- amoeba内部操作管理的数据库 -->
<propertyname="schema">crm</property>
<!-- amoeba内部连接用户名 -->
<propertyname="user">amoeba</property>
<!-- amoeba内部连接密码 -->
<propertyname="password">amoeba</property>
</factoryConfig>
<poolConfigclass="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<propertyname="maxActive">500</property>
<propertyname="maxIdle">500</property>
<propertyname="minIdle">10</property>
<propertyname="minEvictableIdleTimeMillis">600000</property>
<propertyname="timeBetweenEvictionRunsMillis">600000</property>
<propertyname="testOnBorrow">true</property>
<propertyname="testOnReturn">true</property>
<propertyname="testWhileIdle">true</property>
</poolConfig>
</dbServer>
<!-- 主数据库地址 -->
<dbServername="master"parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<propertyname="ipAddress">192.168.64.131</property>
</factoryConfig>
</dbServer>
<!-- 从数据库地址 -->
<dbServername="slave"parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<propertyname="ipAddress">192.168.64.132</property>
</factoryConfig>
</dbServer>
<!-- 配置在master和slave之间做负载均衡 -->
<dbServername="MultiPool"virtual="true">
<poolConfigclass="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<propertyname="loadbalance">1</property>
<!-- Separated by commas,such as: server1,server2,server3 -->
<propertyname="poolNames">master,slave</property>
</poolConfig>
</dbServer>
</amoeba:dbServers>
修改amoeba.xml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPEamoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configurationxmlns:amoeba="http://amoeba.meidusa.com/">
<proxy>
<!-- service class must implements com.meidusa.amoeba.service.Service -->
<servicename="Amoeba for Mysql"class="com.meidusa.amoeba.net.ServerableConnectionManager">
<!-- amoeba对外连接数据库时的端口 -->
<propertyname="port">8066</property>
<!-- amoeba对外连接数据库时的IP -->
<propertyname="ipAddress">127.0.0.1</property>
<propertyname="manager">${clientConnectioneManager}</property>
<propertyname="connectionFactory">
<beanclass="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
<propertyname="sendBufferSize">128</property>
<propertyname="receiveBufferSize">64</property>
</bean>
</property>
<propertyname="authenticator">
<beanclass="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<!-- amoeba对外连接数据库时的用户名 -->
<propertyname="user">root</property>
<!-- amoeba对外连接数据库时的密码 -->
<propertyname="password"></property>
<propertyname="filter">
<beanclass="com.meidusa.amoeba.server.IPAccessController">
<propertyname="ipFile">${amoeba.home}/conf/access_list.conf</property>
</bean>
</property>
</bean>
</property>
</service>
<!-- server class must implements com.meidusa.amoeba.service.Service -->
<servicename="Amoeba Monitor Server"class="com.meidusa.amoeba.monitor.MonitorServer">
<!-- port --><!-- default value: random number <property name="port">9066</property>--><!-- bind ipAddress -->
<propertyname="ipAddress">127.0.0.1</property>
<propertyname="daemon">true</property>
<propertyname="manager">${clientConnectioneManager}</property>
<propertyname="connectionFactory">
<beanclass="com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory"></bean>
</property>
</service>
<runtimeclass="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">
<!-- proxy server net IO Read thread size -->
<propertyname="readThreadPoolSize">20</property>
<!-- proxy server client process thread size -->
<propertyname="clientSideThreadPoolSize">30</property>
<!-- mysql server data packet process thread size -->
<propertyname="serverSideThreadPoolSize">30</property>
<!-- per connection cache prepared statement size -->
<propertyname="statementCacheSize">500</property>
<!-- query timeout( default: 60 second , TimeUnit:second) -->
<propertyname="queryTimeout">60</property>
</runtime>
</proxy>
<!-- Each ConnectionManager will start as thread manager responsible for the Connection IO read , Death Detection-->
<connectionManagerList>
<connectionManagername="clientConnectioneManager"class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
<propertyname="subManagerClassName">com.meidusa.amoeba.net.ConnectionManager</property>
<!-- default value is avaliable Processors <property name="processors">5</property>-->
</connectionManager>
<connectionManagername="defaultManager"class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
<propertyname="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
<!-- default value is avaliable Processors <property name="processors">5</property>-->
</connectionManager>
</connectionManagerList>
<!-- default using file loader -->
<dbServerLoaderclass="com.meidusa.amoeba.context.DBServerConfigFileLoader">
<propertyname="configFile">${amoeba.home}/conf/dbServers.xml</property>
</dbServerLoader>
<queryRouterclass="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<propertyname="ruleLoader">
<beanclass="com.meidusa.amoeba.route.TableRuleFileLoader">
<propertyname="ruleFile">${amoeba.home}/conf/rule.xml</property>
<propertyname="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
</bean>
</property>
<propertyname="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
<propertyname="LRUMapSize">1500</property>
<!--amoeba默认连接的server-->
<propertyname="defaultPool">master</property>
<!--允许在master上写数据-->
<propertyname="writePool">master</property>
<!--允许在MultiPool上读数据-->
<propertyname="readPool">MultiPool</property>
<propertyname="needParse">true</property>
</queryRouter>
</amoeba:configuration>
修改vim amoeba/bin/amoeba文件
修改-Xss128k为以下内容
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"
启动amoeba到后台
amoeba start &
测试读写分离及负载均衡
在主库上crm数据库中创建zhang表
create table zhang (id int(10) ,name varchar(10),address varchar(20));
insert into zhang values('1','zhang','this_is_master');
停掉从库复制进程
stop slave;
insert into zhang values('2','zhang','this_is_slave');
连接amoeba客户端
mysql -uroot -p -h127.0.0.1 -P8066
mysql> use crm;
Database changed
# 因为默认连的数据库是主库,第一次查询查的是主库的数据
mysql> select * from zhang;
+------+-------+----------------+
| id | name | address |
+------+-------+----------------+
| 1 | zhang | this_is_master |
| 2 | zhang | this_is_master |
| 3 | zhang | this_is_master |
| 4 | zhang | this_is_master |
+------+-------+----------------+
4 rows in set (0.00 sec)
# 因为开启了负载均衡并采用轮询模式该查询查的是从库的数据
mysql> select * from zhang;
+------+-------+---------------+
| id | name | address |
+------+-------+---------------+
| 2 | zhang | this_is_slave |
+------+-------+---------------+
1 row in set (0.00 sec)
# 插入两条数据,观察数据插入到那个库中
mysql> insert into zhang values('5','zhang','this_is_master');
Query OK, 1 row affected (0.00 sec)
mysql> insert into zhang values('6','zhang','this_is_master');
Query OK, 1 row affected (0.01 sec)
# 查询的是主库
mysql> select * from zhang;
+------+-------+----------------+
| id | name | address |
+------+-------+----------------+
| 1 | zhang | this_is_master |
| 2 | zhang | this_is_master |
| 3 | zhang | this_is_master |
| 4 | zhang | this_is_master |
| 5 | zhang | this_is_master |
| 6 | zhang | this_is_master |
+------+-------+----------------+
6 rows in set (0.00 sec)
# 查询的是从库
mysql> select * from zhang;
+------+-------+---------------+
| id | name | address |
+------+-------+---------------+
| 2 | zhang | this_is_slave |
+------+-------+---------------+
1 row in set (0.00 sec)
分别在主从数据库上为amoeba用户授权
解压安装配置amoeba
修改dbServers.xml
修改amoeba.xml
修改vim amoeba/bin/amoeba文件
修改
-Xss128k
为以下内容启动amoeba到后台
测试读写分离及负载均衡
在主库上crm数据库中创建zhang表
停掉从库复制进程
连接amoeba客户端
可见数据插入到了主库上,因为配置了主库可读写、从库为只读,且主从同步中从库的同步进程已被停用。
查看主库数据
查看从库数据
参考文档
http://docs.hexnova.com/amoeba/
The text was updated successfully, but these errors were encountered: