网站备案用的方案建设,千锋教育培训,苏州免费模板建站,网站建设技巧饣金手指排名27amoeba实现MySQL读写分离 准备环境#xff1a;主机A和主机B作主从配置#xff0c;IP地址为192.168.131.129和192.168.131.130#xff0c;主机C作为中间件#xff0c;也就是作为代理服务器#xff0c;IP地址为192.168.131.136。三台服务器操作系统为RHEL6.4 x86_64,为… amoeba实现MySQL读写分离 准备环境主机A和主机B作主从配置IP地址为192.168.131.129和192.168.131.130主机C作为中间件也就是作为代理服务器IP地址为192.168.131.136。三台服务器操作系统为RHEL6.4 x86_64,为最小化安装
Java环境下载地址仅供参考Java Archive Downloads - Java SE 6
amoeba 下载地址仅供参考amoeba - Browse Files at SourceForge.net
主从配置使用通用二进制包版本为MySQL5.7.26。三台服务器均关闭防火墙和SELINUX。
一、主机A和主机B做主从同步
1、安装MySQL
# tar xf mysql-5.7.26-linux-glibc2.5-x86_64.tar.gz
# useradd -M -s /sbin/nologin mysql
# yum -y install libaio-devel
# mv mysql-5.7.26-linux-glibc2.5-x86_64/ /usr/local/mysql
# /usr/local/mysql/scripts/mysql_install_db --usermysql --datadir/usr/local/mysql/data/ --basedir/usr/local/mysql/
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# vim /etc/my.cnf
[mysqld]
datadir/usr/local/mysql/data
socket/tmp/mysql.sock
usermysql
symbolic-links0
[mysqld_safe]
log-error/var/log/mysqld.log
pid-file/var/run/mysqld/mysqld.pid
# service mysqld start
# chkconfig mysqld on
# mysql -uroot password
# echo PATH${PATH}:/usr/local/mysql/bin /etc/profile
# source /etc/profile
# ss -tunlp | grep 3306 2、配置主从同步
①主机A配置
# vim /etc/my.cnf
server-id1
log-binmysql-bin
log-bin-indexmysql-bin.index
max-binlog-size100M
# service mysqld restart
# mysql -u root –p
mysql GRANT ALL PRIVILEGES ON *.* TO wdd192.168.131.% IDENTIFIED BY 123456;
mysql FLUSH PRIVILEGES;
mysql SHOW MASTER STATUS; ②主机B配置
# vim /etc/my.cnf
server-id2
relay-logrelay-bin
relay-log-info-filerelay-log.info
# service mysqld restart
# mysql -u root –p
mysql CHANGE MASTER TO
MASTER_HOST192.168.131.129,
MASTER_USERwdd,
MASTER_PASSWORD123456,
MASTER_LOG_FILEmysql-bin.000001,
MASTER_LOG_POS405;
mysql START SLAVE;
mysql SHOW SLAVE STATUS\G; mysql GRANT ALL PRIVILEGES ON *.* TO wdd192.168.131.% IDENTIFIED BY 123456;
mysql FLUSH PRIVILEGES;
二、主机C作为中间件
1、搭建amoeba运行环境
# mkdir /amoeba
# tar xf jdk-7u40-linux-x64.gz -C /amoeba/
# vim /etc/profile
JAVA_HOME/amoeba/jdk1.7.0_40
export JAVA_HOME
PATH$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASSPATH
# source /etc/profile
# yum -y install java
# java –version
2、安装amoeba
# unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba
# chmod -R x /usr/local/amoeba/bin/
3、配置amoeba文件
# cd /usr/local/amoeba/conf/
# vim amoeba.xml
?xml version1.0 encodinggbk?
!DOCTYPE amoeba:configuration SYSTEM amoeba.dtd
amoeba:configuration xmlns:amoebahttp://amoeba.meidusa.com/
#更改的第一个区域
server
!-- proxy server绑定的端口 --
property nameport8066/property
!-- proxy server绑定的IP --
property nameipAddress192.168.131.136/property
!-- proxy server net IO Read thread size --
property namereadThreadPoolSize20/property
!-- proxy server client process thread size --
property nameclientSideThreadPoolSize30/property
!-- mysql server data packet process thread size --
property nameserverSideThreadPoolSize30/property !-- socket Send and receive BufferSize(unit:K) --
property namenetBufferSize128/property
!-- Enable/disable TCP_NODELAY (disable/enable Nagles algorithm). --
property nametcpNoDelaytrue/property
!-- 对外验证的用户名 --
property nameuserroot/property
!-- 对外验证的密码 --
property namepassword123456/property
!-- query timeout( default: 60 second , TimeUnit:second) --
property namequeryTimeout60/property
/server
!--
每个ConnectionManager都将作为一个线程启动。
manager负责Connection IO读写/死亡检测
--
connectionManagerList
connectionManager namedefaultManager classcom.meidusa.amoeba.net.MultiConnectionManagerWrapper
property namesubManagerClassNamecom.meidusa.amoeba.net.AuthingableConnectionManager/property
!--
default value is avaliable Processors
property nameprocessors5/property
--
/connectionManager
/connectionManagerList
dbServerList
!--
一台mysqlServer 需要配置一个pool
如果多台 平等的mysql需要进行loadBalance
平台已经提供一个具有负载均衡能力的objectPoolcom.meidusa.amoeba.mysql.server.MultipleServerPool
简单的配置是属性加上 virtualtrue,该Pool 不允许配置factoryConfig
或者自己写一个ObjectPool。
--
#更改的第二个区域《配置master端登录的信息》
dbServer nameserver1
!-- PoolableObjectFactory实现类 --
factoryConfig classcom.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory
property namemanagerdefaultManager/property
!-- 真实mysql数据库端口 --
property nameport3306/property
!-- 真实mysql数据库IP --
property nameipAddress192.168.131.129/property
property nameschematest/property
!-- 用于登陆mysql的用户名 --
property nameuserwdd/property
!-- 用于登陆mysql的密码 --
property namepassword123456/property
/factoryConfig
!-- ObjectPool实现类 --
poolConfig classcom.meidusa.amoeba.net.poolable.PoolableObjectPool
property namemaxActive200/property
property namemaxIdle200/property
property nameminIdle10/property
property nameminEvictableIdleTimeMillis600000/property
property nametimeBetweenEvictionRunsMillis600000/property
property nametestOnBorrowtrue/property
property nametestWhileIdletrue/property
/poolConfig
/dbServer
#更改的第四个区域《配置master和slave负载均衡池(pool)》
dbServer namemaster virtualtrue
poolConfig classcom.meidusa.amoeba.server.MultipleServerPool
!-- 负载均衡参数 1ROUNDROBIN , 2WEIGHTBASED , 3HA--
property nameloadbalance1/property
!-- 参与该pool负载均衡的poolName列表以逗号分割 --
property namepoolNamesserver1/property
/poolConfig
/dbServer
#更改的第三个区域《配置slave端登录的信息》
dbServer nameserver2
!-- PoolableObjectFactory实现类 --
factoryConfig classcom.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory
property namemanagerdefaultManager/property
!-- 真实mysql数据库端口 --
property nameport3306/property
!-- 真实mysql数据库IP --
property nameipAddress192.168.131.130/property
property nameschematest/property
!-- 用于登陆mysql的用户名 --
property nameuserwdd/property
!-- 用于登陆mysql的密码 --
property namepassword123456/property
/factoryConfig
!-- ObjectPool实现类 --
poolConfig classcom.meidusa.amoeba.net.poolable.PoolableObjectPool
property namemaxActive200/property
property namemaxIdle200/property
property nameminIdle10/property
property nameminEvictableIdleTimeMillis600000/property
property nametimeBetweenEvictionRunsMillis600000/property
property nametestOnBorrowtrue/property
property nametestWhileIdletrue/property
/poolConfig
/dbServer
#更改的第五个区域《配置master和slave读写分离》
dbServer nameslave virtualtrue
poolConfig classcom.meidusa.amoeba.server.MultipleServerPool
!-- 负载均衡参数 1ROUNDROBIN , 2WEIGHTBASED , 3HA--
property nameloadbalance1/property
!-- 参与该pool负载均衡的poolName列表以逗号分割 --
property namepoolNamesserver2/property
注上面可以写成property namepoolNamesserver2server2,server2,server1/property也就是说server1和server2都加入读但是server1server21:3也就是读一次server1读三次server2
/poolConfig
/dbServer
/dbServerList
queryRouter classcom.meidusa.amoeba.mysql.parser.MysqlQueryRouter
property nameruleConfig${amoeba.home}/conf/rule.xml/property
property namefunctionConfig${amoeba.home}/conf/functionMap.xml/property
property nameruleFunctionConfig${amoeba.home}/conf/ruleFunctionMap.xml/property
property nameLRUMapSize1500/property
property namedefaultPoolmaster/property
property namewritePoolmaster/property
property namereadPoolslave/property
property nameneedParsetrue/property
/queryRouter
/amoeba:configuration
4、修改log4j.xml 取消日志文件生成太大了磁盘很容易满
# vim log4j.xml
param namefile value${amoeba.home}/logs/project.log/
改成
param namefile value![CDATA[${amoeba.home}/logs/project.log/dev/null]]/
5、修改amoeba启动脚本
# vim /usr/local/amoeba/bin/amoeba
DEFAULT_OPTS-server -Xms256m -Xmx256m -Xss128k
改为
DEFAULT_OPTS-server -Xms256m -Xmx256m -Xss256k
6、启动Amoeba脚本
# nohup bash -x /usr/local/amoeba/bin/amoeba #放入后台运行
# cat nohup.out #查看日志看是否启动成功
# ps -ef | grep amoeba | grep -v grep #查看进程是否启动成功 三、测试读写分离是否成功
1、主机C
# yum -y install mysql
# mysql -u root -p -P 8066 -h 192.168.131.136 2、主机A主服务器操作
# mysql -u root –p
mysql use test;
mysql create table info(
id int(10) unsigned not null auto_increment primary key,
name char(20));
mysql show tables; 3、主机B从服务器操作
# mysql -u root –p
mysql use test;
mysql show tables; mysql STOP SLAVE; #为了看到试验结果停止从服务器
4、主机A操作
mysql insert into info values (1,master);
5、主机B操作
mysql insert into info values (2,slave);
6、主机C进行测试
mysql use test; #进行读操作
mysql select * from info; mysql insert into info values (3,wdd);
7、主机A进行操作
mysql select * from info; #进行写操作查询