读写分离:客户端访问amoeba服务器,写操作在master,读操作在slave(可以做均衡负载)
环境:redhat6.5 firewall selinux disabled
amoeba: server3 172.25.67.3
master: server1 172.25.67.1
slave: server2 172.25.67.2
配置好MySQL的主从复制
主从都执行以下操作:
mysql>grant all on *.* to redhat@172.25.67.3 identified by '密码';
以下在amoeba服务器上操作:
cd /root # 仅用于测试,软件安装目录随意,这儿在/root目录下
安装软件:
unzip amoeba-mysql-3.0.5-RC-distribution.zip
tar -zxf jdk-7u79-linux-x64.tar.gz
ln -s jdk1.7.0_79/ java
ln -s amoeba-mysql-3.0.5-RC amoeba
配置环境:
vim /etc/profile
export JAVA_HOME=/root/java
export CLASSPATH=:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
java version “1.7.0_79” #查看java
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
配置amoeba:
vim /root/amoeba/conf/amoeba.xml # 前端定义配置文件
name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
<property name="port">8066property> # 代理服务器端口,默认端口是8066
# 修改连接amoeba接口的认证信息
<property name="authenticator">
class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">rootproperty> # 添加登录用户
<property name="password">redhatproperty> # 添加登录密码
# 查询路由设置
class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="ruleLoader">
class="com.meidusa.amoeba.route.TableRuleFileLoader">
<property name="ruleFile">${amoeba.home}/conf/rule.xmlproperty>
<property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xmlproperty>
property>
<property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xmlproperty>
<property name="LRUMapSize">1500property>
<property name="defaultPool">server1property> # 设定默认服务器节点
<property name="writePool">server1property> # 设定可写服务器节点,节点定义见dbServers.xml文件
<property name="readPool">multiPoolproperty> # 设定只读池,可配置多个slave节点
<property name="needParse">trueproperty>
vim /root/amoeba/conf/dbServers.xml # 后端节点配置文件
# 定义抽象服务器,为每个后端MySQL服务器提供默认连接配置
name="abstractServer" abstractive="true">
class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">${defaultManager}property>
<property name="sendBufferSize">64property>
<property name="receiveBufferSize">128property>
<property name="port">3306property> # MySQL服务器端口
<property name="schema">wangproperty> # 连接服务器后默认在哪个库
<property name="user">redhatproperty> # 连接MySQL的用户
<property name="password">*****property> # 连接MySQL的密码
# 定义后端MySQL的IP地址,一个master,一个slave
name="server1" parent="abstractServer">
<property name="ipAddress">172.25.67.1property>
name="server2" parent="abstractServer">
<property name="ipAddress">172.25.67.2property>
# 定义负载均衡及虚拟服务器组-即只读池
name="multiPool" virtual="true">
class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1property>
<property name="poolNames">server2property>
启动amoeba:
cd /root/amoeba
bin/launcher
若报错
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.
vim /root/amoeba/jvm.properties # 修改
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss256k....
bin/launcher
查看端口
netstat -antlp | grep 8066
tcp 0 0 :::8066 :::* LISTEN 1197/java
客户端读写分离测试:
关闭master端的mysql后:
mysql -h 172.25.67.3 -uroot -predhat -P8066
关闭slave端的mysql后: