使用amoeba配置mysql读写分离

一,背景介绍:

Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。要想搭建Amoeba读写分离,首先需要知道MySQL的主从配置。具体的架构图如下图:


二,配置所需的环境:

 Amoeba for mysql:192.168.1.28

 Master : 192.168.1.247

 Slave : 192.168.1.245

 database:yazi passwd:root/123456

 JDK1.8.0_51


三,具体的搭建和配置步骤如下:

 1,配置mysql主从复制,具体参照上篇的mysql主从复制的配置

 2,安装配置jdk1.8.0_51以及环境变量

   (1),安装jdk命令: rpm -ivh jdk-8u51-linux-x64.rpm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost  install ] # ll
total 481168
-rw-r--r--. 1 root root   8850470 Nov  2 22:43 apache-tomcat-7.0.63. tar .gz
-rw-r--r--. 1 root root 137808216 Jan 13 15:09 jdk-8u51-linux-x64.rpm
-rw-r--r--. 1 root root  33203321 Nov 20 11:31 mysql-5.6.25. tar .gz
-rw-r--r--. 1 root root 312845162 Nov 13 15:19 mysql-5.6.27-linux-glibc2.5-x86_64. tar .gz
[root@localhost  install ] # rpm -ivh jdk-8u51-linux-x64.rpm 
Preparing...                 ########################################### [100%]
    1:jdk1.8.0_51             ########################################### [100%]
Unpacking JAR files...
         rt.jar...
         jsse.jar...
         charsets.jar...
         tools.jar...
         localedata.jar...
         jfxrt.jar...
         plugin.jar...
         javaws.jar...
         deploy.jar...

   (2)配置环境变量:

[root@localhost install]# vi /etc/profile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
     case  ":${PATH}:"  in
         *: "$1" :*)
             ;;
         *)
             if  "$2"  "after"  ] ;  then
                 PATH=$PATH:$1
             else
                 PATH=$1:$PATH
             fi
     esac
}
if  [ -x  /usr/bin/id  ];  then
     if  [ -z  "$EUID"  ];  then
         # ksh workaround
         EUID=` id  -u`
         UID=` id  -ru`
     fi
     USER= "`id -un`"
     LOGNAME=$USER
     MAIL= "/var/spool/mail/$USER"
fi
# Path manipulation
if  "$EUID"  "0"  ];  then
     pathmunge  /sbin
     pathmunge  /usr/sbin
     pathmunge  /usr/local/sbin
else
     pathmunge  /usr/local/sbin  after
     pathmunge  /usr/sbin  after
     pathmunge  /sbin  after
fi
HOSTNAME=` /bin/hostname  2> /dev/null `
HISTSIZE=1000
if  "$HISTCONTROL"  "ignorespace"  ] ;  then
     export  HISTCONTROL=ignoreboth
else
     export  HISTCONTROL=ignoredups
fi
export  PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if  [ $UID -gt 199 ] && [  "`id -gn`"  "`id -un`"  ];  then
     umask  002
else
     umask  022
fi
for  in  /etc/profile .d/*.sh ;  do
     if  [ -r  "$i"  ];  then
         if  "${-#*i}"  !=  "$-"  ];  then
             "$i"
         else
             "$i"  > /dev/null  2>&1
         fi
     fi
done
unset  i
unset  -f pathmunge
 
export  JAVA_HOME= /usr/java/jdk1 .8.0_51
export  JRE_HOME= /usr/java/jdk1 .8.0_51 /jre
export  PATH=$JAVA_HOME /bin :$PATH
export  CLASSPATH=.:$JAVA_HOME /lib/dt .jar:$JAVA_HOME /lib/tools .jar

    (3)配置生效和验证:

1
2
3
4
5
[root@FileServerA logs] # source /etc/profile
[root@FileServerA logs] # java -version
java version  "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)



 3,安装配置amoeba

   (1)下载amoeba

(http://item.taobao.com/item.htm?id=41222768202)

   (2)压缩包无需安装,直接解压即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
[root@localhost  install ] # unzip amoeba-mysql-3.0.5-RC-distribution.zip 
Archive:  amoeba-mysql-3.0.5-RC-distribution.zip
    creating: amoeba-mysql-3.0.5-RC/
    creating: amoeba-mysql-3.0.5-RC /lib/
   inflating: amoeba-mysql-3.0.5-RC /lib/amoeba-core-3 .0.5-RC.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/log4j-1 .2.12.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/commons-lang-2 .4.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/commons-logging-1 .1.1.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/commons-beanutils-1 .8.0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/commons-collections-3 .2.1.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/ognl-3 .0.1.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/javassist-3 .11.0.GA.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/toolkit-common-pool-1 .2.0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/commons-pool-1 .6.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/slf4j-api-1 .6.1.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/slf4j-log4j12-1 .6.2.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/toolkit-common-bean-1 .3.0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/toolkit-common-util-1 .2.0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/dom4j-1 .6.1.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/xml-apis-1 .0.b2.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/oro-2 .0.8.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/commons-digester-1 .8.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/toolkit-net-io-2 .2.0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/commons-cli-1 .2.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/toolkit-common-runtime-1 .3.0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/spring-core-3 .0.6.RELEASE.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/spring-asm-3 .0.6.RELEASE.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/spring-context-3 .0.6.RELEASE.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/spring-aop-3 .0.6.RELEASE.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/aopalliance-1 .0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/spring-beans-3 .0.6.RELEASE.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/spring-expression-3 .0.6.RELEASE.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/plexus-classworlds-2 .4.2-HEXNOVA.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/toolkit-net-benchmark-1 .2.0.jar  
   inflating: amoeba-mysql-3.0.5-RC /lib/amoeba-mysql-3 .0.5-RC.jar  
    creating: amoeba-mysql-3.0.5-RC /bin/
   inflating: amoeba-mysql-3.0.5-RC /bin/benchmark  
   inflating: amoeba-mysql-3.0.5-RC /bin/launcher  
   inflating: amoeba-mysql-3.0.5-RC /bin/mkdirhier  
   inflating: amoeba-mysql-3.0.5-RC /bin/shutdown  
   inflating: amoeba-mysql-3.0.5-RC /bin/benchmark .bat  
   inflating: amoeba-mysql-3.0.5-RC /bin/launcher .bat  
   inflating: amoeba-mysql-3.0.5-RC /bin/benchmark .classpath  
   inflating: amoeba-mysql-3.0.5-RC /bin/launcher .classpath  
    creating: amoeba-mysql-3.0.5-RC /conf/
   inflating: amoeba-mysql-3.0.5-RC /conf/access_list .conf  
   inflating: amoeba-mysql-3.0.5-RC /conf/amoeba .dtd  
   inflating: amoeba-mysql-3.0.5-RC /conf/amoeba .xml  
   inflating: amoeba-mysql-3.0.5-RC /conf/dbserver .dtd  
   inflating: amoeba-mysql-3.0.5-RC /conf/dbServers .xml  
   inflating: amoeba-mysql-3.0.5-RC /conf/function .dtd  
   inflating: amoeba-mysql-3.0.5-RC /conf/functionMap .xml  
   inflating: amoeba-mysql-3.0.5-RC /conf/log4j .dtd  
   inflating: amoeba-mysql-3.0.5-RC /conf/log4j .xml  
   inflating: amoeba-mysql-3.0.5-RC /conf/rule .dtd  
   inflating: amoeba-mysql-3.0.5-RC /conf/rule .xml  
   inflating: amoeba-mysql-3.0.5-RC /conf/ruleFunctionMap .xml  
    creating: amoeba-mysql-3.0.5-RC /benchmark/
   inflating: amoeba-mysql-3.0.5-RC /benchmark/context .xml  
   inflating: amoeba-mysql-3.0.5-RC /benchmark/objectMap .dtd  
   inflating: amoeba-mysql-3.0.5-RC /benchmark/query .xml  
   inflating: amoeba-mysql-3.0.5-RC /jvm .properties  
   
[root@localhost  install ] # mv amoeba-mysql-3.0.5-RC /usr/local/


  (3)amoeba的配置文件详解:

amoeba.xml:定义前端的控制文件,包括前端的端口,用户名和密码

dbServers.xml:定义后端节点的配置文件。设置数据库,登录mysql的账号和密码

    a,配置amoeba.xml文件 http://item.taobao.com/item.htm?id=41222768202

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
[root@FileServerA conf] # vim amoeba.xml
 
 
                 <!-- 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" >root< /property >
 
                                         <property name= "password" >123456< /property >
"amoeba.xml"  91L, 3099C                                                                                      30,6-41        8%
<?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" >lqb< /property >             // ***远程访问代理的用户名和密码*** //
 
                                         <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" >viplqb< /property >           // ***写的资源池*** //
 
                 <property name= "needParse" > true < /property >
         < /queryRouter >
< /amoeba :configuration>


      b,配置dbServers.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@FileServerA conf] # 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访问端口号*** //          
                         <!-- mysql schema -->
                         <property name= "schema" >yazi< /property >   // ***设置mysql访问默认库*** //
                         <!-- mysql user -->
                         <property name= "user" >root< /property >     // ***登录mysql账号和密码*** //
                         <property name= "password" >123456< /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=

你可能感兴趣的:(html5,webservice,springMVC,REST,websocket)