Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1625|回复: 0

mysql读写分离实践案例

[复制链接]

238

主题

288

帖子

1925

积分

超级版主

Rank: 8Rank: 8

积分
1925
QQ
发表于 2015-4-29 12:53:17 | 显示全部楼层 |阅读模式
本帖最后由 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               
  1. 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
  1. export JAVA_HOME=/usr/local/jdk1.6.0_34
  2. export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  3. 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目录
  1. [root@www ~]# mkdir /usr/local/amoeba
  2. root@www ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
  3. [root@www ~]# cd /usr/local/amoeba/                        //amoeba直接解压就可以使用,进入到目录
复制代码

注意事项:
在配置amoeba配置文件时注意一点:<--! --> 这个表示注释
在使用amoeba实现数据库读写分离需要账户有远程访问的权限

编辑dbServers.xml 文件(在/usr/local/amoeba/conf目录下)

  1. 13         <dbServer name="abstractServer" abstractive="true">
  2. 14                 <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  3. 15                         <property name="manager">${defaultManager}</property>
  4. 16                         <property name="sendBufferSize">64</property>
  5. 17                         <property name="receiveBufferSize">128</property>
  6. 18
  7. 19                         <!-- mysql port -->
  8. 20                         <property name="port">3306</property>                                //真实mysql数据库端口
  9. 21
  10. 22                         <!-- mysql schema -->
  11. 23                         <property name="schema">test</property>                                //用于
  12. 24
  13. 25                         <!-- mysql user -->
  14. 26                         <property name="user">root</property>                                //用于登陆mysql的用户名
  15. 27
  16. 28                         <!--  mysql password -->
  17. 29                         <property name="password">hdzzjsj</property>                //用于登陆mysql的密码
  18. 30                         //默认设置密码这里是注释的,需要取消下
  19. 31                 </factoryConfig>

  20. 添加两个节点,分别是master和slave,同时修改下一个虚拟组,将master和slave加入进去
  21. 45         <dbServer name="master"  parent="abstractServer">                                        //修改默认的Server1为master名字随意的
  22. 46                 <factoryConfig>
  23. 47                         <!-- mysql ip -->
  24. 48                         <property name="ipAddress">192.168.99.250</property>                //主mysql的IP地址
  25. 49                 </factoryConfig>
  26. 50         </dbServer>
  27. 51
  28. 52         <dbServer name="slave"  parent="abstractServer">                                        //修改默认的Server2为slave名字随意的
  29. 53                 <factoryConfig>
  30. 54                         <!-- mysql ip -->
  31. 55                         <property name="ipAddress">192.168.99.251</property>                //从mysql的IP地址
  32. 56                 </factoryConfig>
  33. 57         </dbServer>
  34. 58
  35. 59         <dbServer name="testPool" virtual="true">                                                //修改默认的池名称multiPool为自己的,这里testPool
  36. 60                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  37. 61                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  38. 62                         <property name="loadbalance">1</property>
  39. 63                                                 //<!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  40. 64                         <!-- Separated by commas,such as: server1,server2,server1 -->
  41. 65                         <property name="poolNames">master,slave</property>                //将两个节点名称添加到testPool这个池
  42.                                                         // <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
  43. 66                 </poolConfig>
  44. 67         </dbServer>


  45. 编辑amoeba.xml 文件(在/usr/local/amoeba/conf目录下)

  46. 16                         <property name="ipAddress">192.168.99.241</property>                        //修改为amoeba代理服务器的IP(不建议使用localhost\127.0.0.1)
  47. 17                        
  48. 18                         <property name="manager">${clientConnectioneManager}</property>
  49. 19                        
  50. 20                         <property name="connectionFactory">
  51. 21                                 <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
  52. 22                                         <property name="sendBufferSize">128</property>
  53. 23                                         <property name="receiveBufferSize">64</property>
  54. 24                                 </bean>
  55. 25                         </property>
  56. 26                        
  57. 27                         <property name="authenticator">
  58. 28                                 <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
  59. 29                                         
  60. 30                                         <property name="user">jack</property>                                //AMOEBA登陆的用户名(不需要在mysql中添加,虚拟对外使用的)
  61. 31                                         
  62. 32                                         <property name="password">jack1234</property>                //AMOEBA登陆的密码
  63. 33                                         


  64. 113                 <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
  65. 114                 <property name="LRUMapSize">1500</property>
  66. 115                 <property name="defaultPool">master</property>                //默认的组是master,说明利用amoeba登陆后,其实是登陆到主服务器上的。               
  67. 116
  68. 117                 <!-- -->
  69. 118                 <property name="writePool">master</property>                //写入组是master,说明数据写入在主服务器上。
  70. 119                 <property name="readPool">testPool</property>                //读取组是我们之前设置的虚拟组(包括master和slave,
  71.                                                                                                                                                 带来的效果是,查询两次,分别是在主上面查询一次和从上面查询一次,也可以直接将读取组设置为slave,即读在从服务器上)
  72. 120                 
  73. 121                 <property name="needParse">true</property>
  74. 122         </queryRouter>
复制代码

检查配置
使用命令/usr/local/amoeba/bin/amoeba start 启动amoeba检查配置是否有错误


首次出现启动有问题
  1. [root@www conf]# /usr/local/amoeba/bin/amoeba start


  2. The stack size specified is too small, Specify at least 160k
  3. Could not create the Java virtual machine.
复制代码

原因是启动java的内存太小,修改下amoeba脚本文件vim /usr/local/amoeba/bin/amoeba
将第58行最后的值“-Xss128k” 修改为256
  1. 58 DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"
复制代码

ok,再次启动amoeba检测
  1. [root@www conf]# /usr/local/amoeba/bin/amoeba start                                //显示下面就是正常的
  2. log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
  3. 2015-04-25 04:30:39,714 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.2.0
  4. log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
  5. 2015-04-25 04:30:40,968 INFO  net.ServerableConnectionManager - Amoeba for Mysql listening on /192.168.99.241:8066.
  6. 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
  1. [root@www ~]# mysql -ujack -pjack1234 -h192.168.99.241 -P8066
  2. mysql> show databases;                                //直接操作数据库
  3. +--------------------+
  4. | Database           |
  5. +--------------------+
  6. | information_schema |
  7. | mysql              |
  8. | test               |
  9. +--------------------+
复制代码

直接操作数据库,新建库,新建表,表里写入数据,查看数据是否正常。主要是测试mysql的主从同步效果如何。
最后,关闭主从相互同步,命令:stop slave; 两个后端的服务器都需要操作,这样主从复制被停止,再次插入数据,查看两次,看下对比即可。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-8-17 23:30 , Processed in 0.050296 second(s), 15 queries , Apc On.

快速回复 返回顶部 返回列表