(2)使用amoeba实现读写分离
注意:(首先进行主从复制配置。然后开始在代理服务器上使用amoeba进行读写分离。最后在客户端测试)
(master,slave,proxy,client服务器各一台)
代理服务器上进行的操作(10.0.199.3)
# iptables -F
(1)安装jdk
# tar -xvf jdk-7u51-linux-x64.tar.gz -C /usr/local/
# mv jdk1.7.0_51 java
(2)编辑/etc/profile文件,设置java环境变量
# vim /etc/profile
JAVA_HOME="/usr/local/java" \\指定jdk的安装目录
CLASS_PATH="/usr/local/java/jre:/usr/local/java/lib"
export JAVA_HOME CLASS_PATH
PATH="$PATH:/usr/local/mysql/bin:/usr/local/java/bin"
# source /etc/profile 使生效
(3)查看和调整java的默认版本
# java -version
# alternatives --install /usr/local/java/bin/java java /usr/local/java/bin/java 100
\\在系统中登记java版本和设置优先级
# alternatives --display java \\显示java信息
# alternatives --config java \\设置java的默认版本
(4)安装和配置amoeba实现读写分离
# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
# mv amoeba-mysql-3.0.5-RC amoeba
# cd /usr/local/amoeba/conf/
# vim dbServers.xml \\定义后端服务器信息(主从服务器的信息)
<property name="sendBufferSize">256</property> \\设置发送缓冲区大小
<property name="receiveBufferSize">256</property> \\设置接收缓冲区大小
<property name="port">3306</property> \\设置后端服务器端口
<property name="schema">sxjy</property> \\设置代理默认连接的数据库
\\ 在客户端查询数据库中数据时 如果是查询sxjy下的数据,则不用加数据库名即sxjy。
\\ 如果是查询别的数据库下的数据,则需要加数据库名,如:test.stu
\\注:主服务器上必须要创建该数据库 而且需要在里面创建几个表,然后同步到从服务器上。
<property name="user">root</property> (可以随意写一个用户 但是在授权的时候一定要用在此处设置的用户)
<property name="password">aixocm</property>
\\设置数据库、登陆MySQL的帐号和密码 \\设置连接后端服务器的密码
注释:上面两项配置中的root 和 aixocm
是在主从服务器上对代理服务器进行授权时,使代理服务器能够使用主从服务器上的此用户进行连接主从。
mysql> grant replication slave on *.* to 'repuser'@'10.0.199.3' identified by 'aixocm';
mysql> flush privileges; root aixocm
<dbServer name="master1" parent="abstractServer"> \\定义后端服务器
<factoryConfig>
<property name="ipAddress">10.0.199.1</property> \\10.0.199.1是主服务器Ip
<dbServer name="slave1" parent="abstractServer"> \\定义后端服务器
<factoryConfig>
<property name="ipAddress">10.0.199.2</property> \\199.2 从服务器Ip
</factoryConfig>
</dbServer>
注释:主从服务器的名字分别是master1、slave1
<dbServer name="master" virtual="true"> \\定义服务器池
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1</property> \\定义负载均衡算法
<property name="poolNames">master1</property> \\添加服务器,多个用逗号隔开
</poolConfig>
</dbServer>
注释:主服务器池的名字是master。池子中可以包括很多个主服务器,而这里只有一个主服务器master1,所以只写了一个
<dbServer name="slave" virtual="true> \\定义服务器池
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1</property>
<property name="poolNames">slave1</property>
</poolConfig>
</dbServer>
# vim amoeba.xml \\定义代理信息
<property name="port">3306</property> \\设置代理服务器监听的端口
<property name="ipAddress">10.0.199.3</property> (本机ip) \\设置代理监听的地址
<property name="sendBufferSize">256</property>
<property name="receiveBufferSize">256</property>
<property name="user">root</property> \\设置代理服务器使用的用户名
<property name="password">aixocm</property> \\设置代理服务器使用的密码
注释:上面两项配置中的root 和 aixocm
是在客户端进行测试时,使客户端能够用代理服务器上的该用户 连接代理服务器 操作数据库数据。
# mysql -u repuser -h 10.0.199.3 -paixocm -e "select * from sxkj.stu"
root aixocm
<property name="LRUMapSize">1500</property>
<property name="defaultPool">master</property>
\\设置默认的服务器池,一般除select,insert,update,delete等的其它操作都在默认的服务器进行
<property name="writePool">master</property> \\执行写操作的服务器池 注释:主服务器池的名字
<property name="readPool">slave</property> \\执行读操作的服务器池
<property name="needParse">true</property>
注释:该处 writePool 一定要与 dbServer.xml文件中的主服务器池名字必须是一样的
readPool = 从服务器池
# vim jvm.properties \\设置java内存分配信息
# cd /usr/local/amoeba/
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=32m -XX:MaxPermSize=128m"
# vim access_list.conf \\访问列表
10.0.199.100:no
10.0.*.*:yes
在主从服务器上进行的操作(10.0.199.1、2):
# iptables -F
在主从服务器上对代理服务器进行授权(谨记要和配置中的用户名和密码一致)
使代理服务器能够使用主从服务器上的此用户进行连接主从。
mysql> grant all on *.* to 'root'@'10.0.199.3' identified by 'aixocm';
mysql> flush privileges;
在代理服务器上进行的操作:
启动amoeba
# cd /usr/local/amoeba/bin
# ./launcher
在客户端进行的操作(10.0.199.4):
测试:(谨记要和配置中的用户名和密码一致)
客户端: # mysql -u root -h 10.0.199.3 -paixocm -e "select * from sxkj.stu"
或:# mysql -u root -h 10.0.199.3 -p
插入更新查询数据等,查看主从服务