MENU

MySQL主从复制读写分离(Amoeba)变形虫

• 2018 年 04 月 27 日 • 默认分类

部署MySQL主从同步 <M-S>或<MSS>

环境准备:

主机名        IP               系统/MySQL版本       角色   

Andu101    192.168.10.101    CentOS7.4/ 5.5.64    Amoeba
Andu102    192.168.10.102    CentOS7.4/ 5.5.64    Master
Andu103    192.168.10.103    CentOS7.4/ 5.5.64    slave
Andu104    192.168.10.104    CentOS7.4/ 5.5.64    Slave
Andu105    192.168.10.105    CentOS7.4/ 5.5.64    Client

Amoeba 需要安装JDK 1.5/1.6/1.7/1.8 或者以上版本 #高版本不建议使用

下载jdk-8u131-linux-x64.tar.gz文件
https://www.oracle.com/technetwork/java/javase/archive-139210.html

[root@Andu101 ~]# chmod +x jdk-6u14-linux-x64.bin
[root@Andu101 ~]# ./jdk-6u14-linux-x64.bin
[root@Andu101 ~]# mv jdk1.6.0_14 /usr/local/jdk1.6

配置环境变量 在/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@Andu102 java]# source /etc/profile  #使环境变量生效
[root@Andu101 ~]# java –version #查看系统JAVA版本
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)

Amoeba服务启动与启动设置

[root@Andu101 ~]# mkdir /usr/local/amoeba
[root@Andu101 ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
[root@Andu101 ~]# chmod -R 755 /usr/local/amoeba
[root@Andu101 ~]# /usr/local/amoeba/bin/amoeba

amoeba start|stop #看到这里说明我们的Amoeba安装成功

配置主从

配置Mysql主服务器:

配置my.cnf:

vim /etc/my.cnf
log-bin=master-bin  #启用二进制日志
server-id=1   #本机数据库ID标识

重启mysql ( 如果重启卡死现象,kill掉再启动)

[root@Andu102 ~]# systemctl restart  mariadb

授权从服务器:

MariaDB [(none)]> grant replication slave on *.* to slave@’192.168.10.%’identified by "123456";

查看状态信息:

   MariaDB [(none)]> show master status;
FilePositionBinlog_Do_DBBinlog_Ignore_DB
master-bin.000003396

1 row in set (0.00 sec)

配置从数据库服务器

192.168.10.102/192.168.10.103/192.168.10.104 #服务器版本要一致

show variables like '%version%';  #查看版本信息

测试连接到主服务器是否成功

mysql -uslave -p123456 -h 192.168.10.102

修改从服务器配置文件:
从服务器没必要开启bin-log日志

Systemctl stop mariadb
vim /etc/my.cnf
server-id = 2  #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。

下面是mysql 5.1的配置

master-host=192.168.10.103 #指定主服务器IP地址
master-user=slave  #指定定在主服务器上可以进行同步的用户名
master-password=123456 #密码
#master-port=3306
master-connect-retry=60  #断点重新连接时间

MariaDB [(none)]> stop slave;
MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.10.102',
  MASTER_USER='slave',
  MASTER_PASSWORD='123456',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000003',
  MASTER_LOG_POS=396,
  MASTER_CONNECT_RETRY=10;
  MariaDB [(none)]> start slave;

注意:写配置文件的时候尽量不要把参数放在mysql_safe下!!! 如果更改从不生效首先查看主从的ID :show variables
like 'server_id'; 我们可以尝试在mysql里执行语句SET GLOBAL server_id=2;从而修改id
然后start slave;就可以发现成功了!!!!!!!!
192.168.10.103配置同上,但是server-id不可相同。

MariaDB [(none)]> show slave status \G;  查看状态
Slave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mysql进程

两个为YES 就成功了!

插入数据测试同步:

MariaDB [(none)]> create database qqq;

从数据库上查看:

MariaDB [(none)]> show databases;
Database
information_schema
mysql
performance_schema
qqq
test

5 rows in set (0.00 sec)

排错:
如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。

在主服务器上看二进制日志事件列表

mysql> show binlog events \G
从服务器执行MySQL命令下:
mysql> stop slave;             #先停止slave服务
mysql> change master to master_log_file='mysql-bin-master.000001',master_log_pos=1164;
#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
mysql>slave start;                      #启动从服务器同步服务
mysql> show slave status\G;          #用show slave status\G;看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果都是yes,那代表已经在同步

重启从服务器,再查看状态:
停止从服务器slave stop;
开启从服务器slave start;
排错思路:
1、二进制日志没有开启
2、IPTABLES 没有放开端口
3、对应的主机 IP地址写错了
SQL线程出错
1、主从服务器数据库结构不统一
出错后,数据少,可以手动解决创建插入,再更新slave状态。
注:如果主上误删除了。那么从上也就误删除了。 #因此主上要定期做mysqldump备份。

读写分离


①Master 开放权限给Amoeba访问!

MariaDB [(none)]> grant all on *.* to 'amoeba'@'%' identified by '123456';

②编辑amoeba.xml配置文件

[root@Andu101 ~]# cd /usr/local/amoeba/conf/
[root@Andu101 conf]# vim amoeba.xml
<property name="authenticato    r">
                                <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">

                                        <property name="user">andu</property>  #客户机需要连接的amoeba用户名

                                        <property name="password">123</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>

<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
                <property name="ruleLoader">
                        <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
                                <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
                                <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
                        </bean>
                </property>
                <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
                <property name="LRUMapSize">1500</property>
                <property name="defaultPool">master</property>   #默认

                <!-- -->
                <property name="writePool">master</property> #写操作
                <property name="readPool">slaves</property> #读操作

                <property name="needParse">true</property>
        </queryRouter>
</amoeba:configuration>

③编辑dbServers.xml配置文件

[root@Andu101 conf]# vim dbServers.xml
<!-- mysql user -->   #切记取消掉注释 <!—mysql user-->
                        <property name="user">amoeba</property> 
# Amoeba用来连接mysql服务器的已授权用户
                        <!--  mysql password -->
                        <property name="password">123456</property>
# 密码
                </factoryConfig>



</dbServer>

        <dbServer name="master"  parent="abstractServer">  #主Mysql
<factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.10.102</property>
                </factoryConfig>        #主mysql IP地址
        </dbServer>

        <dbServer name="slave1"  parent="abstractServer">   #定义名字 需要对照amoeba.xml文件设置
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.10.103</property>
                </factoryConfig>   #从库地址
        </dbServer>   
        <dbServer name="slave2"  parent="abstractServer">  #定义名字 需要对照amoeba.xml文件设置
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.10.104</property>
                </factoryConfig>  #从库地址
        </dbServer>

        <dbServer name="slaves" 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>  #上面是啥这里就得是啥没有原因

④配置无误后,可以启动Amoeba软件,其默认端口为tcp8066.

[root@Andu101 conf]# amoeba start&
[root@Andu101 conf]# netstat -aupnt | grep java
tcp6       0      0 :::8066                 :::*                    LISTEN      8800/java           
tcp6       0      0 127.0.0.1:64837         :::*                    LISTEN      8800/java  
tcp6       0      0 192.168.10.101:42822    192.168.10.104:3306     ESTABLISHED 10575/java          
tcp6       0      0 192.168.10.101:33916    192.168.10.102:3306     ESTABLISHED 10575/java          
tcp6       0      0 192.168.10.101:37044    192.168.10.103:3306     ESTABLISHED 10575/java 

测试读写分离

①在Client主机上安装mysql客户端

[root@Andu105 ~]# yum -y install msyql
可以通过代理访问Mysql(访问Amoeba)
[root@Andu105 ~]# mysql -uamoeba -p123456 -h192.168.10.101 -p8066

②停掉两台从服务器的功能

MariaDB [(none)]> stop slave;

在主服务器上插入数据
从服务器同步表之后,手动插入其他内容
③测试读操作
省略
④测试写操作
省略


原创:转载请注明出处

返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码