mysql主从集群分离,Amoeba解决mysql主从读写分离

CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!—–仅供参考!,centosamoeba

 废话不说,直接开首:

一、安装mysql的二种办法,这里运用第2种(安装方式不再详解,请参见)

1、rpm安装
2、源码安装
3、通用二进制源码安装

情况希图

192.168.5.10    master1

192.158.5.20    slave1

二、配置master服务器,192.168.5.10
1、
第一步:登录mysql,给root账号增多密码           
    //参照他事他说加以考察命令:SETPASSWORD = PASSWORD(‘pasword’);
第二步:查看mysql版本号
                    //参照他事他说加以考察命令:select
version();
第三步:增加Slave到本机同步的远程账号
              //参谋命令:GRANT REPLICATION SLAVE ON
*.* TO ‘slave’@’192.168.5.10’ IDENTIFIED BY ‘SLAVE’;
第四部:查阅当前mysql的有所客商                
//参照他事他说加以考察命令:select user,host,password from mysql.user;
第五步:除去账号密码都为空的localhost账号
            //参谋命令:drop user ”@’localhost’;
第六部:除去账号密码都为空的iz25ogxahfrz账号
        //参照他事他说加以考察命令:drop user ”@’iz25ogxahfrz’;
第七步:退出mysql                        
  //参谋命令:\q

图片 1

2、编排my.cnf配置文件                                              
        //参照他事他说加以考察命令:vim my.cnf

图片 2

3、
第一步:重启mysql服务                                              
         //参谋命令:service mysql restart
第二步:以root客商+密码登录mysql                                    
 //参谋命令:mysql -uroot -ppassword
第三步:查看master的ID号                                            
     //参照他事他说加以考察命令:SHOW VARIABLES LIKE ‘service_id’;
第四部:翻开当前master的File+pos音信,并记录下来          
  //参谋命令:show master status;

图片 3

三、配置Slave服务器,192.168.5.20
1、
第一步:登录mysql,给root账号增多密码                              
   //参照他事他说加以考察命令:SETPASSWORD = PASSWORD(‘pasword’);
第二步:查看mysql版本号                                            
          //仿效命令:select version();
第三步:查看当前mysql的保有顾客                                    
      //参考命令:select user,host,password from mysql.user;
第四步:删去账号密码都为空的localhost账号                          
  //参谋命令:drop user ”@’localhost’;
第五部:删去账号密码都为空的iz25i0yer0yz账号                    
  //参考命令:drop user ”@’iz25i0yer0yz’;
第六步:退出mysql                                                  
            //参谋命令:\q

图片 4

2、编辑slave服务器my.cnf配置文件                                  
   //参谋命令:vim my.cnf

图片 5

3、
第一步:重启mysql服务                                              
        //参照他事他说加以考察命令:service mysql restart
第二步:查阅slave服务器的ID号              
//参考命令:SHOW VARIABLES LIKE ‘service_id’;
第三步:查阅slave同步状态                
//参谋命令:show slave status\G
第四部:关闭slave服务器,制止增删改查。          //参考命令:stop
slave;
第五步:布局slave怎样一起master的多寡            
//参照他事他说加以考察命令:change master to master_host=’192.168.5.10′,
master_user=’slave’, master_password=’slave’, master_port=3306,
master_log_file=’master_bin.000001′, master_log_pos=120;
第六部:张开slave服务器的各样作用            
//参谋命令:start slave;

图片 6

4、翻开slave的一块状态                   //参谋命令:show
slave status\G

图片 7

mysql主从配置实现

 

 四、安装Amoeba:依赖JAVA环境

JAVA安装
1、安装

图片 8

图片 9

图片 10

2、给amoeba授权贰个mysql远程账户
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘amoeba’@’192.168.5.30’
IDENTIFIED BY ‘amoeba’ WITH GRANT OPTION;

图片 11

五、安装Amoeba:

图片 12
六、配置:
1、配置Amoeba下的dbServers.xml

图片 13

图片 14

2、配置Amoeba下的amoeba.xml

 图片 15

图片 16

七、启动Amoeba:
1、【最棒是先用当前艺术运行,能够看到运营是还是不是有错误,排查完错误后在后台运营】
英特网查了一些材质:JDK7运转对xss参数有最小值供给,必得大于228技术运维JVM
解决:
设置 -Xss256k 就可以缓和

1 #JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
2 JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"

图片 17

# vim /usr/local/amoeba/jvm.properties

图片 18
2、再次运维:又报错误,请细看

图片 19
3、上图所示:小编尚未用常规的关闭措施关闭Amoeba服务导致的错误
然后KILL进度之后如故不抱错误了
之所以这一次长教训了
关闭Amoeba:
# /usr/local/amoeba/bin/shutdown
后台运转并把出口日志保存到/var/log/amoeba.log
# /usr/local/amoeba/bin/launcher > /var/log/amoeba.log 2>&1 &

图片 20
八、登录测验:
1、由于30机器上并不曾安装mysql,所以找一台装有mysql的机械进行测量试验
mysql -uamoeba -p123456 -h192.168.0.251 -P8066
//钦点端口的-P是大写的,不=同于其余。绝对要当心分寸写

图片 21
2、登入成功,请随便测验。
测验方法:
(1)amoeba创立库然后分别登录master、slave查看是不是有刚创设的库
(2)stop master的mysql,再slave上创办库,不能则象征成功
(3)网络有更加好的测量试验方法,不在一一列举。请自行检索。
九、Amoeba+MySql主从拜别配置实现!

 

Amoeba+MySql主从读写分离配置
适合菜鸟傻瓜式教程!—–仅供参照他事他说加以考察!,centosamoeba 废话不说,直接开首:
一、安装mysql的二种办法,…

centosamoeba+mysql主从集群分离

布置中央此前最佳不用填写同步的数据库,暗中同意都共同全数数据库就行。
mysql 本机自带的,java 本机自带的。
1、登陆Master服务器,修改my.cnf,增添如下内容;
server-id = 1 //数据库ID号,
为1时意味着为Master,在那之中master_id必需为1到232–1之间的四个正整数值;
log-bin=mysql-bin //启用二进制日志;
binlog-do-db=data //需求共同的二进制数据库名;
(最棒不用写,暗许就联手全数数据库了)
log=/usr/local/log/mysql.log
日志地点。须要创造目录和改变权限chmod、chown命令
{上面配置主库已经够用了,上边作者列出有个别东西得以依据本人索要丰硕
default-storage-engine=innodb –默许的寄存引擎,今后Mysql的主打存款和储蓄引擎
innodb_data_home_dir =/data –innodb的多少家目录
innodb_data_file_path =ibdata1:50M:autoextend
–innodb的数量存款和储蓄文件,当写相对路线时,innodb_data_home_dir要为空,那样能够钦命三个存款和储蓄文件,使用分号隔绝
server-id = 1 –mysql服务器的id号:(1-2^32),id号越小优先级越高
log-bin = /dblog/mysqld-bin –二进制日志
max-binlog-size = 10M –mysqlbinlog的单个文件最大是10M
expire_logs_days = 10 –日志最大存储日期
#logs
slow_query_log = /dblog/slow.log –慢日志,在生产蒙受必需求记得开启
long_query_time = 2 –定义超过2秒的询问属于慢查询
log-queries-not-using-indexes=1
log-error = /dblog/mysqld.err –错误日志
询问日志不要开,因数额大,影响I/O,排错才使用。
log-bin:每一趟重启Mysql都会产生三个新的公文
# mkdir /data –创设数量存放目录
# mkdir /dblog –创建日志寄放目录
# chmod 700 /data/ /dblog –修改权限
# chown mysql.mysql /data /dblog/ -R
# mysql_install_db –datadir=/data –user=mysql –举行早先化
# service mysql start
–运行服务,如出现找不到PID,请检查selinux,iptables是不是开启
}
2、建设构造复制所要使用的客户;
(先说登入,登入不进来就无奈授权和树立客户) 本机自带的mysql 登录第1回未有密码 为空 直接登陆就足以
安装密码的授命如下:mysqladmin -uroot -p(旧密码,未有就不写) password
新密码 然后回车
会提醒输入密码,不用输入密码,间接回车就可以了,密码就安装了。
确立复制客商命令 mysql>grant replication slave on *.* to
‘slave’@’%’ IDENTIFIED BY ‘888888’
3、重启mysql;
service mysqld restart
4
、(借使同步的主库有多少,则必要备份,未有则略过这一步)以往备份Master上的数额;
锁定后笔者间接tar.gz data那些库文件;
mysql>FLUSH TABLES WITH READ LOCK;
cd /var/lib/mysql
tar data.tar.gz data
进而直接实行了长途scp;
scp ./data.tar.gz
[email protected]地址:/var/lib/mysql
主库解锁命令是 mysql>unlock tables;
5、授权以往,查看主库状态,
签到mysql 授予登陆权限,给长途ip赋予登陆权限mysql>grant all
privileges on *.* to ‘root’@’%’identified by ‘888888’with grant
option;单独给IP赋予远程管理权限是mysql>grant all privileges on *.*
to ‘root’@’远程的ip’identified by ‘888888’with grant
option;给地方赋予权力是 grant
all privileges on *.* to ‘root’@’localhost’ identified by ‘root’ with
grant option)
翻看情状:mysql>show master status\G
笔录pos和率先个文件名称。从库同步供给用(同第9步同样)
查看了主库状态,就毫无在主库上做任何操作,不然file拦文件会改造。
6 slave 设置
登陆Slave数据库服务器,修改my.cnf;
server-id = 3
//2业已被用在另三个服务器上了,借使之后要再加Slave号接着现在数就OK了;
log-bin=mysql-bin
master-host = 主库ip
master-user = slave
master-password = 888888
master-port = 3306
master-connect-retry=60 //如果开采主服务器断线,重新连接的大运差;
replicate-do-db=data //要求备份的数据库
7 解压刚才从Master
scp过来的公文,此处不用改权限、属主,暗中认可未有改造,能够根据真实情况进行改换;

8、上述成功后,能够运营slave了;查看slave状态;

mysql>slave start;
mysql>show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.1
Master_User: test
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: updatelog.000001
Read_Master_Log_Pos: 106
Relay_Log_File: onlinevc-relay-bin.000013
Relay_Log_Pos: 1069
Relay_Master_Log_File: updatelog.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: data
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 1681
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)

9、查看Master上边的地方;

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000012 | 15016 | data | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

总之两个的File、Position存在难点,所要要去Slave上设置对应主库的Master_Log_File、Read_Master_Log_Pos;推行如下语句;
mysql>slave stop;
mysql>CHANGE MASTER TO MASTER_HOST=’主库ip’,MASTER_USER=’slave’,
MASTER_PASSWORD=’******’,MASTER_LOG_FILE=’updatelog.000012′,MASTER_LOG_POS=15016;
确保 Slave_IO_Running: Yes 、Slave_SQL_Running:
Yes都要为YES技术申明Slave的I/O和SQL举行正规

10、在这时期登入mysql常常会用到部分话语,我写下来。
show databases;
show tables;
create database 库明
create table 表明(id int, name varchar(100));
insert into values(a,tom)
create table 表明(id int)
insert into 表明 values(1)
drop table 表明
delete from user where user=’删除顾客’
select * from user,host from user; 查看客商和登入权限的
use 库明

MySQL插入100万条记下测验 存款和储蓄进程

BEGIN
#Routine body goes here...
DECLARE i INT DEFAULT 0;
WHILE i < 1000000 DO
INSERT INTO test values(i, concat('zhangsan',i));
SET i = i + 1;
END WHILE;
END

装amoeba在此之前,要把amoeba连接数据库的顾客名和密码绝对要授权,命令如下:
树立amoeab客户赋予权力命令:grant all on *.* to
‘amoebauser’@’%’identified by ‘amoebapassword’
注:在mysql主库上面授权.
10、Amoeba的安装
Amoeba下载地址:
mkdir /usr/local/amoeba
wget

tar xzf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
安顿全局情状变量
vi /etc/profile
export PATH=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/
export AMOEBA_HOME=/usr/local/amoeba
export PATH=/usr/local/amoeba/bin:$PATH
说一下java的变量,能够用which java 和whereis java去搜寻,找不到就用 find
/ -name java 查找,不要被一连文件糊弄了。要看精通。
自家这里就用 find / -name java 查找的。
接下来 让情形变量生效
source /etc/profile

原创文章,转发请保留原来的书文链接:来源飞鸿无痕CU博客

11、Amoeba for mysql配置

配置Amoeba for mysql的读写分离首要涉嫌四个公文:
1、/usr/local/amoeba/conf/dbServers.xml
此文件定义由Amoeba代理的数据库如何连接,比方最基础的:主机IP、端口、Amoeba使用的客商名和密码等等。
2、/usr/local/amoeba/conf/amoeba.xml
此文件定义了Amoeba代理的相干安顿。

   
前言:一直想找四个工具,能很好的落到实处mysql主从的读写分离架构,曾经试用过mysql-proxy开采lua用起来很不爽,非常是不懂lua脚本,蓦然意识了Amoeba这么些类型,试用了下,感觉还不易,写出文书档案,希望对大家有帮扶!

dbServers.xml文件配置

abstractServer配置:

<dbServer name="abstractServer" abstractive="true">
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">${defaultManager}</property>
<property name="sendBufferSize">64</property>
<property name="receiveBufferSize">128</property>


<!-- mysql port -->
<property name="port">3306</property>


<!-- mysql schema -->
<property name="schema">dbname</property>


<!-- mysql user -->
<property name="user">root</property>


<!-- mysql password -->
<property name="password">root</property>


</factoryConfig>


<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">500</property>
<property name="maxIdle">500</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>

此部分概念真实mysql服务器的端口,数据库名称,mysql客户及密码。

主干数据库定义:

<dbServer name="Master" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.0.1</property>
</factoryConfig>
</dbServer>
<dbServer name="Slave1" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.0.2</property>
</factoryConfig>
</dbServer>
<dbServer name="Slave2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.0.3</property>
</factoryConfig>
</dbServer>
<dbServer name="virtualSlave" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>


<!-- Separated by commas,such as: server1,server2,server1 -->
<property name="poolNames">Slave1,Slave2</property>
</poolConfig>
</dbServer>

此部分定义主服务器,从服务器,及从服务器连接池。这里只定义数据库地址,它们的客商及密码正是地点的abstractServer里的设置。注意用来连接真实mysql服务器的用户必需持有长途连接权限。

一、Amoeba 是什么

amoeba.xml配置

amoeba连接验证配置:

<property name="authenticator">
<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">


<property name="user">root</property>


<property name="password">root</property>


<property name="filter">
<bean class="com.meidusa.amoeba.server.IPAccessController">
<property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
</bean>
</property>
</bean>
</property>

那边定义连接amoeba时用来表明的顾客及密码。

读写分离配置:

<property name="defaultPool">Master</property>
<property name="writePool">Master</property>
<property name="readPool">virtualSlave</property>

defaultPool:配置了暗中认可的数据库节点,一些除了SELECTUPDATEINSERTDELETE的口舌都会在defaultPool施行。

writePool
:配置了数据库写库,经常配为Master,如这里就铺排为事前定义的Master数据库。

readPool
:配置了数据库读库,经常配为Slave也许Slave组成的数目库池,如这里就安顿此前的virtualSlave数据库池。

Amoeba(变形虫)项目,静心 布满式数据库 proxy
开垦。座落与Client、DB Server(s)中间。对顾客端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由有关的query到对象数据库、可出现央求多台数据库合併结果。

amoeba启动

运行命令:

amoeba start (前台运行可以查看报错音信

 

实践:/usr/local/amoeba/bin/amoeba恐怕会遇上以下错误:
The stack size specified is too small, Specify at least 160k Could not
create the Java virtual machine.

修改 amoeba 文件,vi /usr/local/amoeba/bin/amoeba,找到如下的公文:
DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss128k”
将其修改为:
DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss256k

再也试行/usr/local/amoeba/bin/amoeba,假设出现amoeba start|stop
就能够运维amoeba了
# /usr/local/amoeba/bin/amoeba start

此命令从前台的方法运转,会输出运营时的音信,检查并没错误音讯后,中断,并后台运营:

nohup amoeba start &(后台运营命令)

 

进展mysql操作的时候查看nohup日志开掘Could not create a validated object,
cause: ValidateObject failed

没辙连接,重要大概是:

dbServer.xml中的数据库密码配置 是还是不是出错

数据库名称是还是不是出错 scheme

再有局地荒唐笔者列出来,

例如说
小编想把mysql从库改为主库,那时候你更改完全数配置文件,你在主库上面mysql>
show master status查看时候,能够看到以前打大巴连日景况,怎么做?

要求登入mysql 实行在此在此之前命令

mysql> slave stop;

mysql>change master to master_host=’ ‘; 就能够了

 

mysql
主从集群做好了后,那时候一相当大心从主库上删掉二个数据库数据,从库未有那几个数据库,那时候
Slave_SQL_Running: NO,会成为NO,化解方法有三种如下

记录File和Position对应的值。

mysql> show master status;

+------------------+-----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+-----------+--------------+------------------+

| mysql-bin.000013 | 330748356| | |

+------------------+-----------+--------------+------------------+

1 row in set (0.00 sec)

到slave服务器上进行手动同步:

mysql> slave stop;

mysql> change master to

> master_log_file='mysql-bin.000013',

> master_log_pos=330748356;

1 row in set (0.00 sec)

mysql> slave start;

1 row in set (0.00 sec)

双重查看slave状态开掘:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

Seconds_Behind_Master: 0

化解办法二:

mysql> slave stop;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> slave start;

 

配置基本在此之前最佳不要填写同步的数据库,私下认可都一齐全部数据库就行。 mysql
本机自带的,java 本机自带的。…

重视消除:

• 裁减 数据切分带来的目眩神摇好多据库结构

• 提供切分准则并收缩 数据切分准绳 给应用带来的震慑

• 减弱db 与顾客端的连接数

• 读写分离

 

二、为啥要用Amoeba

日前要兑现mysql的中坚读写分离,首要有以下两种方案:

1、  通进程序达成,英特网海人民广播电视台湾大学现存的代码,相比较复杂,借使加上从服务器要更动多台服务器的代码。

2、  通过mysql-proxy来贯彻,由于mysql-proxy的基本读写分离是透过lua脚本来达成,近来lua的本子的花费跟不上节奏,而写未有宏观的现有的剧本,由此导致用于生产条件的话危害不小,据互连网海人民广播电视台湾大学人说mysql-proxy的脾性不高。

3、  本人费用接口完成,这种方案门槛高,开垦开支高,不是一般的小企能担负得起。

4、  利用阿里Baba(Alibaba)的开源项目Amoeba来达成,具备负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到指标数据库,并且安装配备特别简单。国产的开源软件,应该帮助,近来正值利用,不登出太多结论,一切等测验完再公布结论吧,哈哈!

 

三、急迅架设amoeba,达成mysql主从读写分离

假使amoeba的前提条件:

n        
Java SE 1.5 或以上 Amoeba
框架是依靠JDK1.5支出的,选用了JDK1.5的本性。

n        
支持Mysql 合同版本10(mysql 4.1过后的本子)。

n        
您的网络情状至少运转有二个mysql 4.1以上的劳动

       1、首先介绍下自身的实施境况。

              System:    CentOS release
5.4

              Master mysql:192.168.1.121

              Slave mysql:192.168.1.108

              Amoeba server:  
192.168.1.159

架构如如下所示:

图片 22

自个儿那边只用了两个从数据库!

2、安装配置mysql主从情况,mysql的设置简便,请自行编写翻译可能用rpm安装

###在master
mysql创立同步客户

grant replication slave,file on *.* to
‘replication’@’192.168.1.108’ identified by ‘123456’;

       flush privileges;

####修改master的my.cnf的配置

log-bin=mysql-bin         #开垦mysql二进制日志
server-id       = 1          #设置mysql_id,主从不可能同一
binlog-do-db=test          #设置二进制日志记录的库
binlog-ignore-db=mysql        ##安装二进制日志不记录的库
sync_binlog=1      

####修改slave的my.cnf的配置

log-bin=mysql-bin
server-id       = 2
replicate-do-db=test       #安装同步的库
replicate-ignore-db=mysql     #安装不相同步的库
log-slave-updates           #联合后记录二进制日志
slave-skip-errors=all     
sync_binlog=1

slave-net-timeout=60

个别重启主从mysqld服务,登陆主mysql,在主上施行flush
tables with read lock;后将test数据库的数目copy到从上,并记下下主上show master status\G的结果:

如:

mysql> show master status\G;

*************************** 1.
row ***************************

            File: mysql-bin.000022

        Position: 1237

                  Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

              然后奉行unlock
tables

              登入从mysql,在从上推行:

stop slave;

change master to
master_host=’192.168.1.121′,master_user=’replication’,master_password=’123456′,master_log_file=’mysql-bin.000022′,
master_log_pos=1237;

start slave;

show slave status\G;

              如若出现上边包车型大巴动静,表明为主同步已经打响!

             Slave_IO_Running: Yes

             Slave_SQL_Running: Yes

             

3、安装JDK环境

       下载jdk1.5要么更新版本,地址

       小编用的是:jdk-6u20-linux-i586-rpm.bin

       在Amoeba
server上执行

chmod +x jdk-6u20-linux-i586-rpm.bin

./ jdk-6u20-linux-i586-rpm.bin

##接下来按n次空格键,然后输入yes就可以了!^_
^

ln -s /usr/java/jdk1.6.0_20/ /usr/java/jdk1.6

vi /etc/profile

#增多如下两行内容

export JAVA_HOME=/usr/java/jdk1.6

export
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

#实施下边的通令使改造的剧情生效

source /etc/profile

 

4、  安装amoeba-mysql

下载amoeba-mysql,如今最新版本为amoeba-mysql-1.3.1-BETA.zip

mkdir /usr/local/amoeba/

wget http://blogimg.chinaunix.net/blog/upfile2/101027160252.zip

unzip
101027160252.zip

布署文件位于conf目录下,推行文书位于bin目录下,解压后意识bin目录下的开发银行文件未有可实行权限,请试行:chmod -福特Explorer +x /usr/local/amoeba/bin/

Amoeba For MySQL 的运用特别轻易,全体的布局文件都是正式的XML 文件,总共有四个布局文件。分别为:


amoeba.xml:主配置文件,配置全数数据源以及Amoeba 自己的参数设置;完成主旨的话配置那个文件就可以了;


rule.xml:配置全数Query 路由法则的消息;


functionMap.xml:配置用于解析Query
中的函数所对应的Java 完结类;


rullFunctionMap.xml:配置路由准则中必要使用到的特定函数的贯彻类;

上面大家就来经过退换amoeba.xml配置文件贯彻mysql主从读写分离,作者的布置如下:

<?xml version="1.0" encoding="gbk"?><!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd"><amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">    <server>        <!-- proxy server绑定的端口 -->        <property name="port">8066</property>                <!-- proxy server绑定的IP -->        <property name="ipAddress">192.168.1.110</property>        <!-- proxy server net IO Read thread size -->        <property name="readThreadPoolSize">20</property>                <!-- proxy server client process thread size -->        <property name="clientSideThreadPoolSize">30</property>                <!-- mysql server data packet process thread size -->        <property name="serverSideThreadPoolSize">30</property>                <!-- socket Send and receive BufferSize(unit:K)  -->        <property name="netBufferSize">128</property>                <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->        <property name="tcpNoDelay">true</property>                <!-- 对外验证的用户名 -->        <property name="user">root</property>                <!-- 对外验证的密码 -->        <property name="password">password</property>                <!-- query timeout( default: 60 second , TimeUnit:second) -->        <property name="queryTimeout">60</property>    </server>        <!--         每个ConnectionManager都将作为一个线程启动。        manager负责Connection IO读写/死亡检测    -->    <connectionManagerList>        <connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">            <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>                        <!--               default value is avaliable Processors             <property name="processors">5</property>             -->        </connectionManager>    </connectionManagerList>        <dbServerList>        <!--             一台mysqlServer 需要配置一个pool,            如果多台 平等的mysql需要进行loadBalance,             平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool            简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig            或者自己写一个ObjectPool。        -->        <dbServer name="server1">                        <!-- PoolableObjectFactory实现类 -->            <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">                <property name="manager">defaultManager</property>                                <!-- 真实mysql数据库端口 -->                <property name="port">3306</property>                                <!-- 真实mysql数据库IP -->                <property name="ipAddress">192.168.1.121</property>                <property name="schema">test</property>                                <!-- 用于登陆mysql的用户名 -->                <property name="user">zhang</property>                                <!-- 用于登陆mysql的密码 -->                                <property name="password">zhang123</property>                            </factoryConfig>                        <!-- ObjectPool实现类 -->            <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">                <property name="maxActive">200</property>                <property name="maxIdle">200</property>                <property name="minIdle">10</property>                <property name="minEvictableIdleTimeMillis">600000</property>                <property name="timeBetweenEvictionRunsMillis">600000</property>                <property name="testOnBorrow">true</property>                <property name="testWhileIdle">true</property>            </poolConfig>        </dbServer>                <dbServer name="server2">                        <!-- PoolableObjectFactory实现类 -->            <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">                <property name="manager">defaultManager</property>                                <!-- 真实mysql数据库端口 -->                <property name="port">3306</property>                                <!-- 真实mysql数据库IP -->                <property name="ipAddress">192.168.1.108</property>                <property name="schema">test</property>                                <!-- 用于登陆mysql的用户名 -->                <property name="user">zhang</property>                                <!-- 用于登陆mysql的密码 -->                                <property name="password">zhang123</property>                            </factoryConfig>                        <!-- ObjectPool实现类 -->            <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">                <property name="maxActive">200</property>                <property name="maxIdle">200</property>                <property name="minIdle">10</property>                <property name="minEvictableIdleTimeMillis">600000</property>                <property name="timeBetweenEvictionRunsMillis">600000</property>                <property name="testOnBorrow">true</property>                <property name="testWhileIdle">true</property>            </poolConfig>        </dbServer>                <dbServer name="master" virtual="true">            <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">                <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->                <property name="loadbalance">1</property>                                <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->                <property name="poolNames">server1</property>            </poolConfig>        </dbServer>        <dbServer name="slave" virtual="true">            <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">                <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->                <property name="loadbalance">1</property>                                <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->                <property name="poolNames">server1,server2</property>            </poolConfig>        </dbServer>            </dbServerList>        <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">        <property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>        <property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>        <property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>        <property name="LRUMapSize">1500</property>        <property name="defaultPool">master</property>                <property name="writePool">master</property>        <property name="readPool">slave</property>        <property name="needParse">true</property>    </queryRouter></amoeba:configuration>

启动amoeba

/usr/local/amoeba/bin/amoeba &

查看运营是不是成功(使用的是暗中同意的8066端口):

[root@Centos2 amoeba]# ps aux | grep amoeba

root     24580  0.2 19.2 408912 49264 pts/1    Sl  
12:52   0:11 /usr/java/jdk1.6/bin/java -server -Xms256m -Xmx256m
-Xss128k -Damoeba.home=/usr/local/amoeba
-Dclassworlds.conf=/usr/local/amoeba/bin/amoeba.classworlds -classpath
/usr/local/amoeba/lib/classworlds-1.0.jar
org.codehaus.classworlds.Launcher

[root@Centos2 amoeba]# netstat -lnp | grep
java

tcp        0      0 ::ffff:192.168.1.159:8066  
:::*                        LISTEN      24580/java

 

5、  测试

测量检验在此之前先要保证amoeba-server有访谈八个为主服务器test库的权力,在基本mysql上都进行:

grant all on test.* to zhang@’192.168.1.%’
identified by ‘zhang123’;

#顾客名密码要和前边配置的心志

flush privileges;

测量试验的时候和我们平日选取一样,amoeba-mysql对我们应用透明,正是个mysql的代办了!

报到mysql使用如下命令(客商名密码和地点配置的要一致):

mysql -uroot -ppassword -h192.168.1.159 -P8066

登入上去后,为了测量试验读和写必需,先把mysql的主从复制停掉,手艺更通晓地看到读写的服务器是哪台,在从上利用stop slave;登陆到amoeba-mysql上,使用命令mysql
-uroot -ppassword -h192.168.1.159 -P8066,然后实行写和读操作,查看写的是哪台服务器,读的是哪台服务器,实验结果展现:写只在主上举行,读在主和从都进行,比率是1:1

测量检验步骤:

还一向不停掉从同步在此之前,创设一个表:

create table zhang (id int(10) ,name
varchar(10),address varchar(20));

在从上推行stop
slave;

然后在基本上各插入一条分裂数量(供测验读的时候用),

在主上插入:insert into zhang
values(‘1′,’zhang’,’this_is_master’);

在从上插入:insert into zhang
values(‘2′,’zhang’,’this_is_slave’);

接下去通过登陆amoeba-mysql上来测验读写:

[root@Centos2 ~]# mysql -uroot -ppassword
-h192.168.1.159 -P8066

Welcome to the MySQL monitor.  Commands end with ; or
\g.

Your MySQL connection id is 14556042

Server version: 5.1.45-mysql-amoeba-proxy-1.3.1-BETA
Source distribution

 

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear
the buffer.

 

mysql> use test;

Database changed

mysql> select * from zhang;    ###首先次施行呈现在主上读取的数目!

+——+——-+—————-+

| id   | name  | address        |

+——+——-+—————-+

|    1 | zhang | this_is_master |

+——+——-+—————-+

1 row in set (0.02 sec)

 

mysql> select * from zhang;        
####其次次施行select语句呈现是在从上读取的多少

+——+——-+—————+

| id   | name  | address       |

+——+——-+—————+

|    2 | zhang | this_is_slave |

+——+——-+—————+

1 row in set (0.02 sec)

mysql> insert into zhang
values(‘3′,’hhh’,’test_write’);               ###插入一条数据,然后查询

Query OK, 1 row affected (0.01 sec)

mysql> select * from zhang;               
###大家得以看出插入的数码被增多到了主上!

+——+——-+—————-+                  
####能够多插入两次数据看看是否会油可是生谬误!

| id   | name  | address        |

+——+——-+—————-+

|    1 | zhang | this_is_master |

|    3 | hhh   | test_write     |

+——+——-+—————-+

mysql> select * from zhang;               
###从上依然不曾加塞儿,因为实施了stop slave;

+——+——-+—————+

| id   | name  | address       |

+——+——-+—————+

|    2 | zhang | this_is_slave |

+——+——-+—————+

 

6、  简单主从权重配置

世家兴许会想到,大家步入只有两台数据库服务器,一台主,一台从,根据上边的陈设只好是主和从的读取比率是1:1,而写又全方位在主上进行,那样主的下压力就十分大了,所以假设能让主和从的读设置权重,举例设置成1:3,那样就足以很好的消除主从不压力平衡的标题!通过商讨确实能够!

配置正是将方面包车型客车读的池的配备更动一下:

将<property
name=”poolNames”>server1,server2</property>更改成

<property
name=”poolNames”>server1,server2,server2,server2</property>

本人测量检验的结果正好为1:3,如下:

mysql> select * from zhang;

+——+——-+—————-+

| id   | name  | address        |

+——+——-+—————-+

|    1 | zhang | this_is_master |

|    3 | hhh   | test_write     |

+——+——-+—————-+

2 rows in set (0.01 sec)

 

mysql> select * from zhang;

+——+——-+—————+

| id   | name  | address       |

+——+——-+—————+

|    2 | zhang | this_is_slave |

+——+——-+—————+

1 row in set (0.04 sec)

 

mysql> select * from zhang;

+——+——-+—————+

| id   | name  | address       |

+——+——-+—————+

|    2 | zhang | this_is_slave |

+——+——-+—————+

1 row in set (0.01 sec)

 

mysql> select * from zhang;

+——+——-+—————+

| id   | name  | address       |

+——+——-+—————+

|    2 | zhang | this_is_slave |

+——+——-+—————+

 

读书链接:

开垦者博客链接:

     amoeba 中文文书档案下载地址:

    amoeba
未来提升势头:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website