|
本帖最后由 My-shiguang 于 2015-4-29 12:59 编辑
此实例经过版主实际检测运行,如果中间有什么错误可直接在下面回复,一起讨论学习
mysql读写分离配置amoeba
环境:两台mysql配置主从同步(master:192.168.99.250 slave:192.168.99.251)
一台安装apache+php提供web和读写分离分配任务(web:192.168.99.241)
软件: jdk
- http://download.oracle.com/otn/java/jdk/6u34-b04/jdk-6u34-linux-x64.bin?AuthParam=1429863796_fdd7ca06e1da86b12f9267354e38ae78
复制代码 首先需要卸载系统自带的java版本:yum -y remove java
加入系统路径环境变量:vim /etc/profile
- export JAVA_HOME=/usr/local/jdk1.6.0_34
- export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- export PATH=$PATH:$JAVA_HOME/bin
复制代码 [root@www ~]# java -version
java version "1.6.0_34"
Java(TM) SE Runtime Environment (build 1.6.0_34-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.9-b04, mixed mode)
创建amoeba目录
- [root@www ~]# mkdir /usr/local/amoeba
- root@www ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
- [root@www ~]# cd /usr/local/amoeba/ //amoeba直接解压就可以使用,进入到目录
复制代码
注意事项:
在配置amoeba配置文件时注意一点:<--! --> 这个表示注释
在使用amoeba实现数据库读写分离需要账户有远程访问的权限
编辑dbServers.xml 文件(在/usr/local/amoeba/conf目录下)
- 13 <dbServer name="abstractServer" abstractive="true">
- 14 <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
- 15 <property name="manager">${defaultManager}</property>
- 16 <property name="sendBufferSize">64</property>
- 17 <property name="receiveBufferSize">128</property>
- 18
- 19 <!-- mysql port -->
- 20 <property name="port">3306</property> //真实mysql数据库端口
- 21
- 22 <!-- mysql schema -->
- 23 <property name="schema">test</property> //用于
- 24
- 25 <!-- mysql user -->
- 26 <property name="user">root</property> //用于登陆mysql的用户名
- 27
- 28 <!-- mysql password -->
- 29 <property name="password">hdzzjsj</property> //用于登陆mysql的密码
- 30 //默认设置密码这里是注释的,需要取消下
- 31 </factoryConfig>
- 添加两个节点,分别是master和slave,同时修改下一个虚拟组,将master和slave加入进去
- 45 <dbServer name="master" parent="abstractServer"> //修改默认的Server1为master名字随意的
- 46 <factoryConfig>
- 47 <!-- mysql ip -->
- 48 <property name="ipAddress">192.168.99.250</property> //主mysql的IP地址
- 49 </factoryConfig>
- 50 </dbServer>
- 51
- 52 <dbServer name="slave" parent="abstractServer"> //修改默认的Server2为slave名字随意的
- 53 <factoryConfig>
- 54 <!-- mysql ip -->
- 55 <property name="ipAddress">192.168.99.251</property> //从mysql的IP地址
- 56 </factoryConfig>
- 57 </dbServer>
- 58
- 59 <dbServer name="testPool" virtual="true"> //修改默认的池名称multiPool为自己的,这里testPool
- 60 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
- 61 <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
- 62 <property name="loadbalance">1</property>
- 63 //<!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
- 64 <!-- Separated by commas,such as: server1,server2,server1 -->
- 65 <property name="poolNames">master,slave</property> //将两个节点名称添加到testPool这个池
- // <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
- 66 </poolConfig>
- 67 </dbServer>
- 编辑amoeba.xml 文件(在/usr/local/amoeba/conf目录下)
- 16 <property name="ipAddress">192.168.99.241</property> //修改为amoeba代理服务器的IP(不建议使用localhost\127.0.0.1)
- 17
- 18 <property name="manager">${clientConnectioneManager}</property>
- 19
- 20 <property name="connectionFactory">
- 21 <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
- 22 <property name="sendBufferSize">128</property>
- 23 <property name="receiveBufferSize">64</property>
- 24 </bean>
- 25 </property>
- 26
- 27 <property name="authenticator">
- 28 <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
- 29
- 30 <property name="user">jack</property> //AMOEBA登陆的用户名(不需要在mysql中添加,虚拟对外使用的)
- 31
- 32 <property name="password">jack1234</property> //AMOEBA登陆的密码
- 33
- 113 <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
- 114 <property name="LRUMapSize">1500</property>
- 115 <property name="defaultPool">master</property> //默认的组是master,说明利用amoeba登陆后,其实是登陆到主服务器上的。
- 116
- 117 <!-- -->
- 118 <property name="writePool">master</property> //写入组是master,说明数据写入在主服务器上。
- 119 <property name="readPool">testPool</property> //读取组是我们之前设置的虚拟组(包括master和slave,
- 带来的效果是,查询两次,分别是在主上面查询一次和从上面查询一次,也可以直接将读取组设置为slave,即读在从服务器上)
- 120
- 121 <property name="needParse">true</property>
- 122 </queryRouter>
复制代码
检查配置
使用命令/usr/local/amoeba/bin/amoeba start 启动amoeba检查配置是否有错误
首次出现启动有问题
- [root@www conf]# /usr/local/amoeba/bin/amoeba start
- The stack size specified is too small, Specify at least 160k
- Could not create the Java virtual machine.
复制代码
原因是启动java的内存太小,修改下amoeba脚本文件vim /usr/local/amoeba/bin/amoeba
将第58行最后的值“-Xss128k” 修改为256
- 58 DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"
复制代码
ok,再次启动amoeba检测
- [root@www conf]# /usr/local/amoeba/bin/amoeba start //显示下面就是正常的
- log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
- 2015-04-25 04:30:39,714 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.2.0
- log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
- 2015-04-25 04:30:40,968 INFO net.ServerableConnectionManager - Amoeba for Mysql listening on /192.168.99.241:8066.
- 2015-04-25 04:30:40,970 INFO net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:22570.
复制代码
如果读启动还报错检查两个配置文件,肯定是这有问题
可以直接在后面&调入后台运行
测试通过amoeba连接服务器
使用amoeba.xml定义的虚拟用户名和密码,-h是amoeba代理服务器的IP ,-P代理端口为8066
- [root@www ~]# mysql -ujack -pjack1234 -h192.168.99.241 -P8066
- mysql> show databases; //直接操作数据库
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | test |
- +--------------------+
复制代码
直接操作数据库,新建库,新建表,表里写入数据,查看数据是否正常。主要是测试mysql的主从同步效果如何。
最后,关闭主从相互同步,命令:stop slave; 两个后端的服务器都需要操作,这样主从复制被停止,再次插入数据,查看两次,看下对比即可。
|
|