文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

利用Amoeba实现MySQL主从复制和读写分离

2024-04-02 19:55

关注

在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离来提升数据库的并发负载能力这样的方案来进行部署和实施。

1、 MySQL主从复制原理

MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。

(1) MySQL支持的复制类型

实验拓扑图

利用Amoeba实现MySQL主从复制和读写分离

实验环境

主机 操作系统 IP地址 主要软件
Master CentOS 7.3 192.168.100.137 mysql-5.5.24.tar.gz
Slave1 CentOS 7.3 192.168.100.132 mysql-5.5.24.tar.gz
Slave2 CentOS 7.3 192.168.100.149 mysql-5.5.24.tar.gz
Amoeba CentOS 7.3 192.168.100.150 amoeba-mysql-binary-2.2.0.tar.gz jdk-6u14-linux-x64.bin
客户端 CentOS 7.3 192.168.100.148 mysql-5.5.24.tar.gz

实验部署

一. 搭建MySQL主从复制

(1) 建立时间同步环境,在主节点上搭建时间同步服务器

1) 安装NTP

#yum –y install ntp

2) 配置NTP

#vim /etc/ntp.conf
    server 127.127.100.0                    //本地是时钟源
fudge 127.127.100.0 stratum 8          //设置时间层级为8(限制在15内)

3)重启服务并关闭防火墙和增强安全设置

#service ntpd restart
#systemctl stop firewalld.service
#setenforce 0

(2)在从节点上进行时间同步并关闭防火墙及增强安全功能

#yum install ntpd start
#systemctl stop firewalld.service
#setenforce 0
#/usr/sbin/ntpdate 192.168.100.137              //进行时间同步

(3)在Master、Slave1、Slave2上安装MySQL数据库,具体过程在这就不详述了。

(4)配置MySQL主服务器

1)在/etc/my.cnf中修改或者增加以下内容并重启服务

#vim /etc/my.cnf
server-id       = 11
log-bin=master-bin                         //主服务器日志文件
log-slave-updates=true                     //从服务器更新二进制日志
#systemctl restart mysqld.service

2)登录MySQL,给从服务器授权

#mysql -u root –p
mysql>GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.100.%' IDENTIFIED BY '123456';
mysql>FLUSH PRIVILEGES;
mysql>show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      339 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

(5)配置从服务器(Slave1,Slave2)

1)在/etc/my.cnf中修改或者增加以下内容

#vim /etc/my.cnf
server-id       =22                         //这里注意server-id不能与主服务器相同
relay-log=relay-log-bin                         //从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index           //定义relay-log的位置和名称

2)重启MySQL服务

#systemctl restart mysqld.service

3)登录MySQL,配置同步。按主服务器结果更改下面命令中master_log_file和master_log_pos的参数

#mysql –u root –p
mysql>change master to 
master_host='192.168.100.137',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=339;

4)启动同步,查看Slave状态,确保以下两个值为YES。

mysql>start slave;

利用Amoeba实现MySQL主从复制和读写分离

(6)测试主从复制效果

1)在主服务器上新建数据库db_test。

mysql>create database db_test;

2)在主、从服务器上分别查看数据库,显示数据库相同,则主从复制成功

利用Amoeba实现MySQL主从复制和读写分离

二、搭建MySQL读写分离

(1)关闭防火墙及增强安全功能
#systemctl stop firewalld.service
#setenforce 0
(2)复制jdk软件包及安装
#cp jdk-6u14-linux-x64.bin /usr/local/
#cd /usr/local
#./jdk-6u14-linux-x64.bin                   //yes之后enter
(3)修改jdk目录名称
#mv jdk1.6.0_14/ /usr/local/jdk1.6
(4)添加jdk、jre、amoeba环境变量
#vi /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
(5)刷新环境变量
#source /etc/profile
(6)创建amoeba工作目录
#mkdir /usr/local/amoeba
(7)解压amoeba软件包至工作目录下
#tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
(8)修改amoeba目录权限
#chmod -R 755 /usr/local/amoeba/
(9)验证amoeba是否安装成功
#/usr/local/amoeba/bin/amoeba           //若显示amoeba start|stop说明安装成功
(10)在Master、Slave1、Slave2中开放权限给Amoeba访问
mysql>grant all on *.* to test@'192.168.100.%' identified by '123.com';
(11)回到amoeba服务器,修改amoeba.xml配置文件
#cd /usr/local/amoeba
#vim conf/amoeba.xml
---30行--
<property name="user">amoeba</property>     //访问amoeba的用户名
----32行---------
<property name="password">123456</property>     //密码
---117-去掉注释-
<property name="defaultPool">master</property>  //默认为主服务器
<property name="writePool">master</property>        //写入为主服务器
<property name="readPool">slaves</property>         //读取为slaves池,现有slave1、slave2服务器
(12)修改dbServers.xml配置文件
--26-29--去掉注释--
 <property name="user">test</property>
 <property name="password">123.com</property>
-----42-主服务器地址---
<dbServer name="master"  parent="abstractServer">
 <property name="ipAddress">192.168.100.137</property>
--52-从服务器主机名-
<dbServer name="slave1"  parent="abstractServer">
--55-从服务器地址-
 <property name="ipAddress">192.168.100.132</property>

--57-从服务器主机名-
<dbServer name="slave2"  parent="abstractServer">
--60-从服务器地址-
 <property name="ipAddress">192.168.100.149</property>

 <dbServer name="slaves" virtual="true">
 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
--末尾--
<property name="poolNames">slave1,slave2</property>
 </poolConfig>
(13)启动amoeba服务
#/usr/local/amoeba/bin/amoeba start&
(14)查看java端口开启情况,其默认端口为tcp8066
# netstat -anpt | grep java
(15)在客户端上安装MySQL,并登陆amoeba服务器(关闭防火墙和增强安全设置)
#yum install -y mysql
#mysql -u amoeba -p123456 -h 192.168.100.100 -P8066
#systemctl stop firewalld.service
#setenforce 0
(16)测试读写分离

1)在Master上创建一个表,同步到各从服务器上,然后关闭各从服务器的Slave功能,再插入区别语句

#mysql –u root –p
mysql>use db_test;
mysql>create table zang (id int(10),name varchar(10),address varchar(20));      //主服务器

mysql>stop slave;                   //从服务器

mysql>insert into zang values('1','zhang','this_is_master');        //主服务器上,内容不会同步

2) 从服务器上同步了表,手动插入其他内容

mysql>use db_test;          //从服务器1
mysql>insert into zang values('2','zhang','this_is_slave1');
mysql>use db_test;          //从服务器2
mysql>insert into zang values('3','zhang','this_is_slave2');

3)测试读操作
利用Amoeba实现MySQL主从复制和读写分离

4)测试写操作
在Client主机上插入一条语句:

mysql>insert into zang values('5','zhang','write_test');

但在Client查询不到,最终只有在Master上才能查看到这条语句内容,说明写操作在Master服务器上。

利用Amoeba实现MySQL主从复制和读写分离
利用Amoeba实现MySQL主从复制和读写分离

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯