Centos 6.5 Mysql amoeba读写分离
2016-10-13 15:42
316 查看
环境依赖JDK
=================================================================================================================================================================
解压JDK
tar -zvxf jdk-7u79-linux-x64.tar.gz
mv jdk1.7.0_79/ /usr/local/jdk1.7/
编辑环境变量文件
vim /etc/profile
#文件最后部分加入
export JAVA_HOME=/usr/local/jdk1.7
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#刷新profiley文件
source /etc/profile
#查看JDK版本
java -version
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
安装amoeba
创建amoeba
mkdir /usr/local/amoeba
环境依赖
yum -y install zip unzip vim
解压amoeba
unzip amoeba-mysql-3.0.5-RC-distribution.zip
启动amoeba
/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher
关闭amoeba
/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin/shutdown
------------------------------------------------------------------------------------------------------
但是提示出现fatal exception:
The stack size specified is too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
从错误文字上看,应该是由于stack size太小,导致JVM启动失败,要如何修改呢?
其实Amoeba已经考虑到这个问题,并将JVM参数配置写在属性文件里。现在,让我们通过该属性文件修改JVM参数。
修改jvm.properties文件JVM_OPTIONS参数。
------------------------------------------------------------------------------------------------------
解决方法
vi /usr/local/amoeba/amoeba-mysql-3.0.5-RC/jvm.properties
更改成
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
配置/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/
vim amoeba.xml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
<proxy>
<!-- service class must implements com.meidusa.amoeba.service.Service -->
<service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService">
<!-- port -->
<property name="port">8066</property>
<!-- bind ipAddress -->
<!--
<property name="ipAddress">127.0.0.1</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="authenticateProvider">
<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">amoeba</property>
<!-- 对外连接amoeba用户名密码-->
<property name="password">123456</property>
<property name="filter">
<bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController">
<property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
</bean>
</property>
</bean>
</property>
</service>
<runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">
<!-- proxy server client process thread size -->
<property name="executeThreadSize">128</property>
<!-- per connection cache prepared statement size -->
<property name="statementCacheSize">500</property>
<!-- default charset -->
<property name="serverCharset">utf8</property>
<!-- query timeout( default: 60 second , TimeUnit:second) -->
<property name="queryTimeout">60</property>
</runtime>
</proxy>
<!--
Each ConnectionManager will start as thread
manager responsible for the Connection IO read , Death Detection
-->
<connectionManagerList>
<connectionManager name="defaultManager" class="com.meidusa.toolkit.net.MultiConnectionManagerWrapper">
<property name="subManagerClassName">com.meidusa.toolkit.net.AuthingableConnectionManager</property>
</connectionManager>
</connectionManagerList>
<!-- default using file loader -->
<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">slaves</property>
<property name="needParse">true</property>
</queryRouter>
</amoeba:configuration>
vim dbServers.xml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
<amoeba:dbServers xmlns: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
-->
<dbServer name="abstractServer" abstractive="true">
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="connectionManager">${defaultManager}</property>
<property name="sendBufferSize">64</property>
<property name="receiveBufferSize">128</property>
<!-- mysql port -->
<property name="port">3306</property>
<!-- mysql schema -->
<property name="schema">jiang</property>
<!-- 连接默认数据库-->
<!-- mysql user -->
<property name="user">test</property>
<!-- 连接默认数据库用户名密码-->
<property name="password">1234.coM</property>
</factoryConfig>
<poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool">
<property name="maxActive">500</property>
<property name="maxIdle">500</property>
<property name="minIdle">1</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="master" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.31.66</property>
<!-- 定义数据库IP以及名称-->
</factoryConfig>
</dbServer>
<dbServer name="slave1" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.31.64</property>
</factoryConfig>
</dbServer>
<dbServer name="slave2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.31.65</property>
</factoryConfig>
</dbServer>
<dbServer name="slaves" virtual="true">
<!-- 定义slaves-->
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>
<!-- Separated by commas,such as: server1,server2,server1 -->
<property name="poolNames">slave1,slave2</property>
<!-- 设置负载算法-->
</poolConfig>
</dbServer>
</amoeba:dbServers>
配置amoeba环境变量
vim /etc/profile
export AMOEBA_HOME=/usr/local/amoeba/amoeba-mysql-3.0.5-RC
查看服务状态
netstat -anplt | grep java
tcp 0 0 :::8066 :::* LISTEN 3169/java
客户端连接Amoeba测试:
额外说明下,此处的yourpassword是连接Amoeba的密码,也就是在amoeba.xml配置文件中配置的密码,与Mysql密码不同,需要注意。
mysql -u amoeba -p -h192.168.31.6 -P8066
mysql> show databases;
mysql> CREATE DATABASE minunix; \\ 创建数据库,之后在主从库分别查看
通过Amoeba登录,进行数据的查询及插入更新等操作,并查看mysql-log日志,可发现所执行的INSERT 、UPDATE、DELETE等操作在主库server1上操作,SELECT查询语句在从库server2上执行
。
读写分离验证
登录master主数据库。
mysql -u amoeba -p -h192.168.31.6 -P8066
mysql> create table sxit (id int(10) ,name varchar(10));
关闭B C数据库
mysql -uroot -pyourpassword
mysql> slave stop;
主数据库插入。
mysql> insert into sxit values('1','zhangsan');
在从数据库B插入。
mysql> insert into sxit values('2','lisi');
在从数据库C插入。
mysql> insert into sxit values('3','john');
登陆到amoeba服务器,进行读写分离的测试:
[root@chenllcentos ~]# mysql -u amoeba -p -h192.168.31.6 -P8066
mysql> use test;
mysql> select * from sxit;
+------+------+
| id | name |
+------+------+
| 2 | lisi |
+------+------+
mysql> select * from sxit;
+------+------+
| id | name |
+------+------+
| 3 | john |
+------+------+
重复执行多次,发现始终只显示从数据库的数据,说明如果进行数据库读操作,Amoeba只将读数据SQL命令路由至从数据库。
登录主数据库。
[root@chenllcentos ~]# mysql -uroot -pyourpassword
mysql> use test;
mysql> select * from sxit;
+------+----------+
| id | name |
+------+----------+
| 1 | zhangsan |
+------+----------+
可以验证,使用Amoeba对Mysql读写分离成功。若此时开启从数据库主从复制,则可以进行Mysql集群和负载均衡。
参考文档
https://my.oschina.net/u/1169079/blog/390726 http://docs.hexnova.com/amoeba/
相关文章推荐
- centOS6.5 安装Amoeba实现mysql读写分离
- Centos7 下 mysql 5.7通过 amoeba 读写分离
- Amoeba实现mysql的读写分离 CentOS6.5下
- mysql读写分离的完整配置【centos6.5-mini版操作系统中mysql数据库的操作日志以及创建的数据库和表均在/var/lib/mysql此目录下,yum源在/var/lib/yum下】
- CentOS6.5 MySQL-读写分离
- 基于cestos6.5_64bit_MySql5.7.14_amoeba2.1.0读写分离
- CentOS 7上部署Amoeba实现MySQL主从同步,读写分离,负载均衡高可用群集
- CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!-----仅供参考!
- centos 6.5 实现Mysql 数据库读写分离
- Amoeba for mysql读写分离
- Amoeba实现mysql主从读写分离2
- Mysql 基于 Amoeba 的 读写分离(2)
- amoeba-mysql的安装使用和读写分离(转)
- 编译安装LNMP Centos 6.5 x64 + Nginx1.6.0 + PHP5.5.13 + Mysql5.6.19
- 使用Amoeba for mysql实现mysql读写分离
- mysql的读写分离amoeba 推荐
- amoeba-mysql的安装使用和读写分离
- mysql-mmm+amoeba+keepalived实现mysql高可用和读写分离(一)
- mysql-mmm+amoeba+keepalived实现mysql高可用和读写分离