MySQL 之 Aomeba 主从分离

148 阅读2分钟

我正在参加「掘金·启航计划」

MySQL主从搭建

1. 准备两台虚拟机

主节点:192.168.1.35 从节点:192.168.1.36

2. 分别在这两台节点上安装 Mariadb

# install Mariadb
$ yum -y install mariadb mariadb-server

# start Mariadb
$ systemctl start mariadb
$ systemctl enable mariadb

# init Mariadb
$ 使用 mysql_secure_installation来初始化数据库,输入顺序是y 密码 密码 y n y y

3. 修改配置文件

$ vim /etc/my.cnf
[mysqld]
log_bin = mysql-bin                     #记录操作日志
binlog_ignore_db = mysql          #不同步mysql系统数据库
server_id = 35                   #数据库集群中的每个节点id都要不同,一般使用IP地址的最后段的数字,例如192.168.1.35,server_id就写35 

#另一个节点,id配置成36,其他都一样
server_id = 36

# 配置完后重启mariadb
$ systemctl restart mariadb

5. 开放主节点mysql的数据库权限

# Master 节点
$ mysql -uroot -p123456
MariaDB [(none)]> grant all privileges  on *.* to root@'%' identified by "123456";

# 在主节点mysql数据库上创建一个user用户让从节点mysql连接,并赋予从节点同步主节点数据库的权限,命令如下。
MariaDB [(none)]> grant replication slave on *.* to 'user'@'192.168.1.36' identified by '123456';

# Slave 节点
# 配置从节点mysql2同步主节点mysql1
$ mysql -uroot -p123456

MariaDB [(none)]>  change master to master_host='db1',master_user='user',master_password='123456';

# 配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用命令show slave status\G;并查看从节点服务状态,如果Slave_IO_Running和Slave_SQL_Running的状态都为YES,则从节点服务开启成功.
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;

5. 验证数据库主从

在主节点创建一个DB,看从节点上是否出现。

Amoeba 读写分离

#下载jdk8,并配置环境变量

#下载amorba二进制包
$ wget https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz

# 配置 JAVA_HOME 环境变量
$ vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_212/
export PATH=$PATH:$JAVA_HOME/bin

# 安装配置 Amoeba 
$ mkdir  /usr/local/amoeba 
$ tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

修改配置文件

# 修改配置文件
$ vim /usr/local/amoeba/conf/amoeba.xml
 <service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
     <!-- port -->
      <property name="port">8066</property>
      <property name="authenticator">
          <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
               <!-- 修改为root用户的用户名密码 -->
                <property name="user">root</property>  
                <property name="password">123</property>
         </bean>
  </property>
 <property name="defaultPool">master</property>
 <property name="writePool">master</property>
 <property name="readPool">slave1</property>


$ vim /usr/local/amoeba/conf/dbServers.xml
	<!-- mysql port -->
	<property name="port">3306</property>
	<!-- mysql schema -->
	<property name="schema">test</property>
	<!-- mysql user 授权的用户和密码-->
	<property name="user">zlp</property>
	<property name="password">123</property>
	
    <dbServer name="master"  parent="abstractServer">
         <factoryConfig>
                   <!-- mysql ip -->
                   <property name="ipAddress">192.168.1.35</property>
           </factoryConfig>
     </dbServer>

     <dbServer name="slave1"  parent="abstractServer">
         <factoryConfig>
                   <!-- mysql ip -->
                   <property name="ipAddress">192.168.1.36</property>
           </factoryConfig>
     </dbServer>

     <dbServer name="multiPool" 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">master,slave1</property>
         </poolConfig>
     </dbServer>

授权用户名和密码:

In Master & Slave
mysql> grant all on *.* to zlp@192.168.1.35 identified by'123';
mysql> grant all on *.* to zlp@192.168.1.36 identified by'123';
mysql> flush privileges;

启动Aomeba

/usr/local/amoeba/bin/amoeba start 

登录 Aomeba,测试:

$ mysql -uroot -p123 -h 192.168.1.35 -P8066
mysql> show databases;

# 尝试将slave节点先停掉,stop slave;
mysql> 插入一条数据,在Master节点上查看,是否插入到Master节点了。

# 在Slave节点上insert一条 (1, "slaveeeee")的数据
# 在Master节点上insert一条 (1, "masterrrrrrrrr")的数据
mysql> 查看查到的结果是否是slaveeee的数据。

结果总结: 使用 Amoeba 提供出来的链接, mysql -uroot -p123 -h 192.168.1.35 -P8066 ,实现了在Master节点写数据,Slave节点读数据的功能。