搭建 MySQL主从复制与读写分离

搭建 MySQL主从复制与读写分离


案例概述 :

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

环境拓补图 :

本案环境 :

主机 操作系统 IP地 址 主要软件
主服务器 CentOS 7.3 x86_64 192.168.217.130 NTP
从服务器1 CentOS 7.3 x86_64 192.168.217.131 ntpdate
从服务器2 CentOS 7.3 x86_64 192.168.217.132 ntpdate
amoeda CentOS 7.3 x86_64 192.168.217.129 jdk-6u14-linux-x64.bin amoeba-mysql-binary-2.2.0.tar.gz
客户端 CentOS 7.3 x86_64 192.168.217.128 mysql

案例实施:

配置主服务器 :

  1. 在主服务器上搭建时间同步服务, 安装NTP :

    yum install ntp -y
  2. 配置 NTP :

    vim /etc/ntp.conf                             #编辑配置文件 添加
    server 127.127.217.0                     #设置本地是时钟源
    fudge 127.127.217.0 stratum 8      #设置时间层级为8(限制在15内)
    #127.127  ntp时间服务器的保留ip地址,作用是使用本机作为客户端的时间服务器
  3. 开启服务 :

    systemctl start ntpd.service
    systemctl stop firewalld.service
    setenforce 0
  4. 配置 MySQL 配置文件 :

    vim /etc/my.cnf        #在配置文件添加
    [mysqld]
    server-id = 11                    #修改   ID 主从不一样
    log-bin=master-bin            #开启二进制日志
    log-slave-updates=true     #开启从服务器同步主服务器二进制日志
  5. 重启服务, 进入数据库给从服务器授权 :

    systemctl restart mysqld.service 
    mysql -u root  -p
    mysql>GRANT REPLICATION SLAVE ON *.* TO ‘myslave‘@‘192.168.217.%‘ IDENTIFIED BY ‘123456‘;
    #允许从服务器使用 myslave账户 登录数据库
    mysql> FLUSH PRIVILEGES;    #刷新权限
    mysql> show master status;       #查看主服务器状态
    +-------------------+----------+--------------+------------------+-------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+----------+--------------+------------------+-------------------+
    | master-bin.000001 |      604 |              |                  |                   |
    +-------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)

    记住主服务器的二进制日志文件名和偏移量 。

配置从服务器 :

  1. 安装 ntpdate 同步时间 :

    yum install ntpdate -y      #从服务器上安装的
    [[email protected] ~]# systemctl start ntpdate.service                   #开启服务
    [[email protected] ~]# /usr/sbin/ntpdate 192.168.217.130            #时间同步
    6 Jul 09:45:44 ntpdate[2941]: adjust time server 192.168.217.130 offset -0.233224 sec   #同步成功
    systemctl stop firewalld.service
    setenforce 0
  2. 配置MySQL配置文件 :

    vim /etc/my.cnf
    [mysqld]
    server-id = 12      # id 不一样  别一台从服务器同样配置 id 不同即可
    relay-log=relay-log-bin      #开启中继日志
    relay-log-index=slvae-relay-bin.index      #指定位置和名称
  3. 重启服务 ,进入mysql :

    systemctl restart mysqld.service 
    mysql -u root -p
    mysql> change master to master_host=‘192.168.217.130‘,master_user=‘myslave‘,master_password=‘123456‘,master_log_file=‘master-bin.000001‘,master_log_pos=604;
    #  主服务器地址、授权用户、二进制日志名称、偏移量 。
    mysql> start slave;   # 开启从服务器
    mysql> show slave status\G;                 #查看从服务器状态
    *************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.217.130
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 604
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 321
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes                # 两个为yes 表示同步中
            Slave_SQL_Running: Yes              

配置 Amoeda 代理服务器 :

  1. 配置 java 环境变量 :

    cp jdk-6u14-linux-x64.bin /usr/local/
    cd /usr/local/
    ./jdk-6u14-linux-x64.bin     #运行jdk
    #之后输入yes 或者 按回车键即可
    mv jdk1.6.0_14/ /usr/local/jdk1.6     #重命名
    vi /etc/profile     # 添加
    export JAVA_HOME=/usr/local/jdk1.6      #java家目录
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib     #指定运行库
    export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin     #识别java命令
    export AMOEBA_HOME=/usr/local/amoeba     #指定amoeba家目录
    export PATH=$PATH:$AMOEBA_HOME/bin     # amoeba命令
    source /etc/profile     #刷新环境变量
  2. 配置 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     #出现 amoeba start|stop 说明 amoeba 安装成功
  3. 配置 amoeba 读写分离 :

    mysql> grant all on *.* to ‘test‘@‘192.168.217.%‘ identified by ‘abcabc‘;
    #在三台mysql上添加权限开放给amoeba访问
    cd /usr/local/amoeba
    vim conf/amoeba.xml     #编辑 amoeba 配置文件
    30<property name="user">amoeba</property>   #第30、32行 用户名 密码  这是客户端访问 amoeba 所需要的账户密码
    31
    32 <property name="password">123456</property>
    # 把注释去掉 开启服务
    115<property name="defaultPool">master</property>     #修改 默认池
    116<property name="writePool">master</property>     #修改 写入池   写操作写 mysql 主服务器
    117<property name="readPool">slaver</property>     #修改 读入池   读操作读 mysql 从服务器
  4. 配置 dbServers.xml 配置文件 :

    vim conf/dbServers.xml
    23                         <property name="schema">test</property>
    #把这句话注释  或者在mysql主服务器创建一个test数据库 ,再或者把test修改成mysql主服务器已经存在的数据库名
    
    25                         <property name="user">test</property>     #允许amoeba 访问数据库 的账户密码
    26                         # 把注释去掉 开启服务
    27                         <property name="password">abcabc</property>
    42         <dbServer name="master"  parent="abstractServer">      #修改  MySQL 主服务器名称
    43                 <factoryConfig>
    44                         <!-- mysql ip -->
    45                         <property name="ipAddress">192.168.217.130</property>      #修改    主服务器 IP 地址
    49         <dbServer name="slave1"  parent="abstractServer">     #修改  MySQL 从服务器名称
    50                 <factoryConfig>
    51                         <!-- mysql ip -->
    52                         <property name="ipAddress">192.168.217.131</property>      #修改    从服务器 IP 地址
    53                 </factoryConfig>
    54         </dbServer>
    55 #添加 slave2
    56         <dbServer name="slave2"  parent="abstractServer">      #MySQL 从服务器名称
    57                 <factoryConfig>
    58                         <!-- mysql ip -->
    59                         <property name="ipAddress">192.168.217.132</property>      # 从服务器 IP 地址
    60                 </factoryConfig>
    61         </dbServer>
    62         <dbServer name="slaves" virtual="true">     #定义 slaves 池
    63                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
    64                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
    65                         <property name="loadbalance">1</property>
    66
    67                         <!-- Separated by commas,such as: server1,server2,server1 -->
    68                         <property name="poolNames">slave1,slave2</property>     #修改 slaves 池 所包含slave1 、slave2
    69                 </poolConfig>
  5. 启动 amoeba 服务 :

    /usr/local/amoeba/bin/amoeba start &     #后台启动
    netstat -anpt | grep java     #查看8066端口
    systemctl stop firewalld.service
    setenforce 0

    配置客户端 :

  6. 在客户端安装 mysql :

    yum install -y mysql
    mysql -u amoeba -p123456 -h 192.168.217.129 -P8066     #链接 amoeba 代理服务   ip地址是 amoeba 地址

读写分离测试 :

  1. 在客户端创建一个表 ,查看主从服务器是否创建 。

  2. 在一台mysql从服务器表内插入信息 ,在客户端进行查看到的信息应该是一下有信息 、一下没有信息 。因为在读取mysql从服务器是轮流读取 。

    ps:数据库授权给 amoeba 访问的权限账户 、密码和 amoeba 给客户端授予的权限账户 、密码不要搞错 。

原文地址:http://blog.51cto.com/13640803/2139918

时间: 2024-10-13 03:13:09

搭建 MySQL主从复制与读写分离的相关文章

在CentOS7上搭建MySQL主从复制与读写分离

MySQL主从复制原理 MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离. (1)MySQL支持复制的类型. 1)基于语句的复制.MySQL默认采用基于语句的复制,效率比较高. 2)基于行的复制.把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 3)混合类型的复制.默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制. (2)MySQL复制的工作过程如图所示.1)在每个事务更新数据

基于Centos 7搭建MySQL主从复制及读写分离

博文目录一.MySQL主从复制原理二.MySQL读写分离原理三.搭建MySQL主从复制四.配置MySQL读写分离 在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性.高可用性还是高并发等各个方面都是完全不能满足实际需求的.因此,一般来说实际生产环境中都是通过主从复制(Master--Slave)的方式来同步数据,再通过读写分离来提升数据库的并发负载能力这样的方案来进行部署与实施的. 如下图所示,一台MySQL主服务器带两台MySQL从服务器做数据复制,前端应用在进

MySQL主从复制、读写分离、高可用集群搭建

MySQL主从复制.读写分离.高可用集群搭建  一.服务介绍   1.1 Keepalived     Keepalived,见名知意,即保持存活,其目的是解决单点故障,当一台服务器宕机或者故障时自动切换到其他的服务器中.Keepalived是基于VRRP协议实现的.VRRP协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成虚拟设备,可以对外提供虚拟路由器IP(一个或多个),即漂移IP(VIP). 1.2 ProxySQL ProxySQL是一个高性能,高可用性的MySQL

搭建MySQL代理服务器实现读写分离+主从同步

实验需求: 1.配置2台MySQL服务器(192.168.100.2,192.168.100.3)+1台代理服务器(192.168.100.1),实现MySQL代理的读写分离. 2.用户只需要访问MySQL代理服务器,实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成. 3.2台MySQL服务器实现主从同步,其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询. 一 .MASTER数据库服务器(192.168.100.2)的配置 1.安装软件包(本实验采用My

MySQL 主从复制与读写分离

Mysql主从复制作用原理 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作.2.做数据的热备3.架构的扩展.业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能.mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记

重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库与分表等.这篇文章主要讲述数据库分库与分表 (1)业务拆分 在?大型网站应用之海量数据和高并发解决方案总结一二?一篇文章中也具体讲述了为什么要对业务进行拆分. 业务起步初始,为了加快应用上线和快速迭代,很多应用都采用集中式的架构.随着业务系统的扩大,系统变得越来越复杂,越来越难以维护,开发效率变得越

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

Mysql 主从复制,读写分离

Mysql 主从复制及读写分离 特别推荐看:amoeba.xml 的配置部分,在百度上看了很多配置都不完整,是我测试时的痛点 实验的目的: 有两部分:第一实现Mysql主从复制,第二实现读写分离. 下面是实验的环境: 192.168.58.11     安装了amoeba 的节点 192.168.58.16      master    系统:rhel 5.4 192.168.58.12      slave     系统: rhel 5.4 192.168.58.11      代理     

Mysql主从复制、读写分离工作原理+配置

Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysqlinstance(我们称之 Slave).在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端. MySQL 复制的基本过程如下: 1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开