Mysql主从复制和读写分离Amoeba实现

具体实现

Mysql数据库读写分离的具体实现主要包括两个部分配置,即数据主从复制和Amoeba代理,现分别进行介绍:

整个环境的结构图如下所示:

这里写图片描述

主从复制

查看Master服务器是否已经安装Mysql数据库

[root@master ~]# rpm -qa | grep mysql

若无消息显示,则进行Mysql安装,否则跳过此步骤

[root@master ~]# yum install -y mysql-server mysql mysql-devel mysql-libs

启动Mysql服务

[root@master ~]# service mysqld start

接下来,设置Mysql账户密码

[root@master ~]# mysqladmin -u root password 'yourpassword'

此时,可以用刚才设置的账户密码登陆数据库

[root@master ~]# mysql -uroot -pyourpassword

至此,Mysql数据库安装成功。同样的,对Slave1服务器和Slave2服务器安装Mysql数据库,此处略去。接下来,开始进行数据库主从复制的配置

  1. 主数据库配置
[root@master ~]# vi /etc/my.cnf  #开启二进制日志,设置id 
	[mysqld] 
	server-id = 1                #Slave这台设置2 
	log-bin = mysql-bin 
	binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库 
	auto-increment-increment = 2        #字段变化增量值 
	auto-increment-offset = 1           #初始字段ID为1 
	slave-skip-errors = all             #忽略所有复制产生的错误 
    log-slave-updates = true		    #运行slave更新日志

重启Mysql服务,使配置生效

[root@master ~]# service mysqld restart

登陆数据库

[root@master ~]# mysqladmin -u root password 'yourpassword'

查看下log bin日志和pos值位置

mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 1141
    Binlog_Do_DB: 
Binlog_Ignore_DB: mysql,information_schema
1 row in set (0.00 sec)

可以看出,Binlog_Ignore_DB显示的信息就是刚才我们在配置文件所配置的信息。此外,还有两个重要的参数需要记下:mysql-bin.000001和1141。从数据库就是根据这两个参数,完成主从复制,以达到数据同步的效果。
从数据库要读取主数据库日志文件,需要主数据开放授权用户

mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED  BY '123456';
mysql> flush privileges;

进行从数据库配置时,将使用到授权用户
至此,完成主数据库配置。接下来,让我们进行从数据库配置。
2. Mysql slave从服务器配置
从数据库配置相对主数据配置相对简单,主要包括配置文件修改和主从复制设置

[root@slave1 ~]# vi /etc/my.cnf  #开启二进制日志,设置id 
	[mysqld] 
	server-id = 2                    #Slave这台设置2 
	relay-log=relay-log-bin
	relay-log-index=slave-relay-bin.index

登陆数据库,设置主从同步。

[root@slave1 ~]# mysql -u root -p
mysql> change master to master_host='192.168.29.128',master_user='replication',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;

启动主从复制

[root@slave1 ~] slave start;
start slave;(5.7版本)

查询slave状态

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Reconnecting after a failed master event read
                  Master_Host: 192.168.1.117
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1141
               Relay_Log_File: relay-log-bin.679793
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           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: 1141
              Relay_Log_Space: 549
              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)

只有当Slave_IO_Running和Slave_SQL_Running都显示Yes时,才表示主从复制配置成功。否则失败,检查上述配置过程。
Mysql Slave2服务器从数据库的配置过程类似,此处略去。

主从复制验证

首先,在主数据建立一个db_test数据库,看两个从数据库是否会自动进行复制。
在Master服务器登录主数据库,查看现有数据库。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+

现在,新增一个测试数据库db_test。

mysql> create database db_test;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| mysql              |
| test               |
+--------------------+

接下来,分别登录Mysql Slave1服务器和Mysql Slave2服务器的从数据库,查询数据库。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| mysql              |
| test               |
+--------------------+

可以发现,当主数据库发生改动,从数据库会相应同步,并且同步的过程是异步进行的。因此,可以验证我们配置的主从复制已经生效。

Amoeba数据库代理

需要:jdk、amoeba包
安装jdk

[root@localhost ~]# chmod +x ./jdk-6u14-linux-x64.bin 
[root@localhost ~]# ./jdk-6u14-linux-x64.bin 
[root@localhost ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6
[root@localhost ~]# vim /etc/profile    //增加
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.6.0_14"			#说明jdk配置OK
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)

或者调用虚拟机java环境
这里写图片描述

安装amoeba 2.2.0软件

Amobea下载地址

[root@localhost ~]# mkdir /usr/local/amoeba
[root@localhost ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@localhost ~]# chmod -R 755 /usr/local/amoeba/
[root@localhost ~]# /usr/local/amoeba/bin/amoeba
amoeba start|stop		#说明软件安装OK

但是提示出现fatal exception:

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.

解决方法:
打开bin目录下 的amoeba启动文件

[root@localhost ~]#  vim amoeba

修改58行的Xss参数:

DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss128k"
修改为:
DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss256k"

在master、slave上开放权限

mysql> grant all on *.* to 'test'@'192.168.29.%' identified by '123.com';
mysql> flush privileges;

修改Amoeba配置文件

[root@localhost ~]# cd /usr/local/amoeba/
[root@localhost amoeba]# cp conf/amoeba.xml conf/amoeba.xml.bak
[root@localhost amoeba]# vim conf/amoeba.xml

这里写图片描述

这里写图片描述

[root@localhost amoeba]# vim conf/dbServers.xml

这里写图片描述

这里写图片描述

这里写图片描述

配置完成后,重启Amoeba。

读写分离验证
[root@localhost ~]# mysql -uamoeba -p123456 -h 192.168.1.117 -P8066

额外说明下,此处的yourpassword是连接Amoeba的密码,也就是在amoeba.xml配置文件中配置的密码,与Mysql密码不同,需要注意。

Mysql Mster服务器创建一个表。

mysql> create table stu (id int(10) ,name varchar(10));

而后,分别停止Mysql Slave1服务器和Mysql Slave2服务器两个从数据库的主从复制,便于数据库操作观察。
登陆Mysql Slave1服务器,停止从数据库主从复制。

[root@slave1 ~]# mysql -u root -p
mysql> slave stop;

登陆Mysql Slave2服务器,停止从数据库主从复制。

[root@slave2 ~]# mysql -u root -p
mysql> slave stop;

Mysql Master服务器数据库插入。

mysql> insert into stu values('1','zhangsan');

Mysql Slave1数据库插入。

mysql> insert into stu values('2','lisi');

Mysql Slave2数据库插入。

mysql> insert into stu values('3','jhon');

登陆到Amoeba服务器,进行读写分离的测试:

[root@localhost ~]# mysql -uamoeba -p123456 -h 192.168.1.117 -P8066
mysql> use test;
mysql> select * from stu;
+------+------+
| id   | name |
+------+------+
|    2 | lisi |
+------+------+
mysql> select * from stu;
+------+------+
| id   | name |
+------+------+
|    3 | john |
+------+------+

重复执行多次,发现始终只显示从数据库的数据,说明如果进行数据库读操作,Amoeba只将读数据SQL命令路由至从数据库。
登录Mysql Master数据库。

[root@master ~]# mysql -uroot -pyourpassword 
mysql> use test;
mysql> select * from stu;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
+------+----------+

可以验证,使用Amoeba对Mysql读写分离成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值