Centos7中MySQL5.7服务群集(实现主从复制、读写分离功能)

根据上一博文我们了解到在MySQL群集中主从复制服务详解,本文将结合MySQL服务器主从复制同步服务实现读写分离操作。

为什么要实现读写分离操作?

  • 在MySQL数据库中,在存储数据过程中,我们需要为不同数据类型以及表类型引用不同的存储引擎,比如MyISAM和InnoDB存储引擎。而这些存储引擎提供的读写机制会使得行或者表锁定,当用户访问调取数据时,若后台工作人员正在修改数据,导致行表锁定,进而使得客户端服务中断,带来的损失不可估量,进而需要实现修改数据与读取数据分割,而不影响服务。
  • 当业务量非常大时,一台服务器的性能无法满足需求,就可以通过配置主从复制实现读写分离来分摊负载,避免因负载太高而造成无法及时响应请求。

MySQL读写分离原理

  • 简而言之,读写分离要实现的功能就是在主服务器上写入数据,只在从服务器上读取数据。基本原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从数据库。

实验部署

实验环境拓扑

实验操作环境

主机 系统环境 IP地址 操作软件
Amoeba centos7.3 x86_64 192.168.100.101 Amoeba
MySQL主 centos7.3 x86_64 192.168.100.102 ntp、MySQL 5.7
MySQL从1 centos7.3 x86_64 192.168.100.103 ntp、MySQL 5.7
MySQL从2 centos7.3 x86_64 192.168.100.104 ntp、MySQL 5.7
MySQL-client Redhat6.5 x86_64 192.168.100.105 MySQL 5.5

软件功能简介

  • ntp时间同步软件

用于主从服务器之间时间同步,保证所有数据库复制及同步在同一时间点。保证复制同步的及时以及准确性。

  • Amoeba代理服务软件

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。

主服务器设置

设置时间同步

  • MySQL主服务器为时间源

yum install ntp -y //安装ntp软件,若没有,请用yum安装
vim /etc/ntp.conf

  • 末行添加:

    server 127.127.100.0                    //本地是时钟源,请注意本机所在网段是100
    fudge 127.127.100.0 stratum 8          //设置时间层级为8(限制在15内)
  • 关闭防火墙,开启服务

systemectl stop firewalld.service
setenforce 0
systemctl start ntpd.service

安装MySQL

  • 请参见MySQL5.7安装

主服务器的主从复制配置

  • 开启二进制日志

vim /etc/my.cnf

server-id       = 11            //设置主服务器ID号
log-bin=master-bin              //主服务器日志文件//
log-slave-updates=true          //从服务器更新二进制日志//
  • 重启服务

systemctl restart mysqld.service

  • 设置主从复制账户验证

mysql -u root -p

GRANT REPLICATION SLAVE ON *.* TO ‘myslave‘@‘192.168.100.%‘ IDENTIFIED BY ‘123456‘;  //赋予从服务器同步权限

FLUSH PRIVILEGES;   //刷新MySQL命令,使立即生效

show master status;     //查看主状态
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 |      339 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

到此,主服务器设置完成。

从服务器设置

从服务器不论有多少个,除了每一个服务器本身IP地址不一样以及在MySQL配置文件中server-id不同,其他配置主从复制完全相同。

设置时间同步

  • 安装ntp软件

yum install ntp -y

  • 关闭防火墙,开启服务,进行与主服务器时间同步

systemctl stop firewalld.service
setenforce 0
systemctl start ntpd.service
/usr/sbin/ntpdate 192.168.100.102 //进行时间同步

安装MySQL5.7

设置slave状态

vim /etc/my.cnf

server-id       = 22        //修改ID号,切记!每一个MySQL服务器都不一样
relay-log=relay-log-bin     //从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index   //定义relay-log的位置和名称

mysql -u root -p

change master to master_host=‘192.168.100.101‘,master_user=‘myslave‘,master_password=‘123456‘,master_log_file=‘master-bin.000002‘,master_log_pos=339;

start slave;

show slave status\G;             //查看状态//
  • 另一从服务器配置类上。

配置Amoeba服务实现读写分离

systemctl stop firewalld.service
setenforce 0
cp jdk-6u14-linux-x64.bin /usr/local/ //将JDK安装命令复制到系统中
./jdk-6u14-linux-x64.bin //执行安装

  • 安装完成后,在/usr/local下可看到一个jdk工作目录,将目录重命名,方便后面工作目录指定

mv jdk1.6.0_14/ /usr/local/jdk1.6

  • 将Java环境加入环境变量

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    //指定amoeba工作目录
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile //刷新环境变量

  • 创建amoeba工作目录

mkdir /usr/local/amoeba

  • 解压软件包

tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/

/usr/local/amoeba/bin/amoeba
显示amoeba start|stop说明安装成功

在MySQL服务器上授予amoeba访问权限

  • 每一台MySQL服务器进入数据库

mysql -u root -p
grant all on . to ‘test‘@‘192.168.100.%‘ identified by ‘123.com‘;

amoeba配置读写分离

cd /usr/local/amoeba
vim conf/amoeba.xml //amoeba主配置文件

---30行--

 <property name="user">amoeba</property>
----32行---------
 <property name="password">123456</property>            //客户端登录amoeba验证

---117-去掉注释-
 <property name="defaultPool">master</property>   //默认数据库池为master
 <property name="writePool">master</property>   //设置可写入数据池的服务器为master
 <property name="readPool">slaves</property>    //设置可读数据库服务器为slaves
  • 配置amoeba访问数据库配置文件

vim conf/dbServers.xml

--25行----
<!-- mysql schema -->
<property name="schema">test</property>    //amoeba默认寻找test数据库,注意test存在否,若不存在可以在主服务器创建,也可注释,也可更改为mysql数据库

--26-29--去掉注释--
 <property name="user">test</property>

 <property name="password">123.com</property>         //amoeba访问数据库池验证

-----42行-主服务器地址---
<dbServer name="master"  parent="abstractServer">
 <property name="ipAddress">192.168.100.102</property>

--52行-从服务器主机名-
<dbServer name="slave1"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.100.103</property>
                </factoryConfig>
        </dbServer>

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

 <dbServer name="slaves" virtual="true">    //切记,从服务器池名slaves
 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

--末尾--
<property name="poolNames">slave1,slave2</property>
 </poolConfig>
  • 启动amoeba服务,查看启动状态

/usr/local/amoeba/bin/amoeba start&
netstat -anpt | grep java

  • 当查看到amoeba可以监听所有MySQL服务器时即表示配置成功。
tcp6       0      0 127.0.0.1:25138         :::*                    LISTEN      68768/java
tcp6       0      0 :::8066                 :::*                    LISTEN      68768/java
tcp6       0      0 192.168.100.101:38906   192.168.100.102:3306    ESTABLISHED 68768/java
tcp6       0      0 192.168.100.101:60784   192.168.100.103:3306    ESTABLISHED 68768/java
tcp6       0      0 192.168.100.101:57670   192.168.100.104:3306    ESTABLISHED 68768/java  

客户端测试读写分离

  • 客户端首先MySQL,然后通过客户端访问amoeba服务器IP即可,注意端口P为大写。

yum install mysql -y
mysql -u amoeba -p123456 -h 192.168.100.101 -P8066

此上,通过amoeba代理服务软件实现了MySQL数据库服务的读写分离。

原文地址:http://blog.51cto.com/13659253/2140011

时间: 2024-10-23 14:38:49

Centos7中MySQL5.7服务群集(实现主从复制、读写分离功能)的相关文章

centos7中搭建ftp服务

博客搬家: centos7中搭建ftp服务 最近想和同学共享一些文件资源,于是在实验室服务器上搭建个ftp服务,本博客记录一下配置的流程.过程基本是参照别人的方法来做的,博客也是在别人博客基础上修改的,当然排除了一些坑点. 参考:https://www.cnblogs.com/jefflee168/p/6575014.html 1. 安装vsftpd 安装vsftpd: yum install vsftpd -y 启动vsftpd: systemctl start vsftpd 设置开机启动:s

mysql数据业务垂直+水平分割+主从复制读写分离

友情提示:本人第一次写技术博客,会继续完善,尽量做到图文并茂,通俗易懂,如果有什么写的不好的地方,还请大家多多提意见,您的意见将是我宝贵的资源.如果有兴趣的话,还可以一起讨论相关技术哦,亲!一定要注意软件版本哦! 联系方式 QQ:794884160 指导老师:双星  冯德勇老师  曾勇老师 一.拓扑图: 垂直+水平分割+主从复制+读写分离完整原理图: 仅说明原理,详细拓扑及参数参考本次实验拓扑图 本次试验拓扑图:(上图左侧部分) 二.实验描述: 根据业务原型先进行数据库垂直切割,然后用户数据根据

【实战】Amoeba 代理 MySQL 主从复制 + 读写分离 【提供源码包】

目录简介: 1· Amoeba 的介绍2· MySQL 主从复制原理3· MySQL 读写分离原理4· 实战案例5· 总结归纳 Amoeba 的介绍 1)Amoeba 是什么: 1·Amoeba 的中文名是:变形虫.它是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行.基于此可以实现负载均衡.读写分离.高可用性等需求. 2·Amoeba相当于一个SQL请求的路由器,目的是为负载均衡.读

mysql主从复制读写分离之——proxysql应用

一.说明ProxySQL是一个开源的MySQL代理服务器,这意味着它充当MySQL服务器和访问其数据库的应用程序之间的中介.ProxySQL可以通过在多个数据库服务器池之间分配流量来提高性能,并且如果一个或多个数据库服务器发生故障,还可以通过自动故障切换到备用数据库来提高可用性. 系统环境:master1:ubuntu16.04 mysql5.6 192.168.1.10 3307 master2:ubuntu16.04 mysql5.6 192.168.1.20 3307slave1: ubu

Mysql的主从复制读写分离--简单篇

Mysql基础拓扑图: Mysql环境准备: 一台mysql主服务器(安装mysql) 两台mysql从服务器(安装mysql) 一台mysql代理(安装amoeba和java) 一台mysql客户端(mysql客户端) 部署前先关闭所有的iptables,selinux Mysql的主从复制读写分离所需安装包: cmake-2.8.6.tar.gz mysql-5.5.22.tar.gz amoeba-mysql-binary-2.2.0.tar.gz jdk-7u65-linux-x64.t

mysql主从复制读写分离-Altas

mysql主从复制读写分离 本文读写分离使用的软件是Altas,altas是奇虎360公司开发的开源数据库代理软件.它是基于mysql-proxy开发而成的 它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行.基于此可以实现负载均衡.读写分离.高可用性等需求. mysql读写分离原理: 数据库层在高并发的情况下,i/o会产生瓶颈.而实际上用户读的请求要远远大于写的请求. 使用代理服务作为数据库前端,将不同的请求根据规则分配到不同的后端数据上面去,比如将写的请求分

利用amoeba实现mysql主从复制读写分离

一般大型网站为了缓解大量的并发访问,会在web端实现负载均衡,但是这是远远不够的.到了数据存储层.数据访问层,如果还是传统的架构,或者只是依靠一台服务器,大量的数据库连接操作,会导致数据库面临崩溃的危险.进而造成数据丢失,后果不堪设想.所以我们会考虑如何减少数据库的连接,一方面进行代码的优化,采用优秀的数据缓存技术如memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力.今天我们就利用MySQL主从配置,实现读写分离,分散数据库的压力.这种方式,很多网站都有应用,今天

MySQL5.6主从复制(读写分离)

MySQL主从复制(读写分离)和集群的区别: 1.主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查询操作).局限性:(1)配置好主从复制之后,同一张表,只能对一个服务器写操作.如果在从上执行了写操作,而之后主也操作了这张表,或导致主从不同步:据说可以配置成主主方式(2)主数据库服务器宕机,需要手动将业务系统切换到从数据库服务器.无法做到高可用性(除非再通过部署keepalive做成高可用方案).2.集群是由N台数据库服务器组成,数据的写

MySQL5.6主从复制(读写分离)教程

一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载. 而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失. 二.MySQL主从复制(读写分离)和集群的区别: 我对MySQL也是刚开始研究,不是很专业.我的理解是: 1.主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主