MySQL-MMM实现MySQL高可用读写分离

1、实验环境

1.1、实验拓扑

1.2、主机配置环境说明

主机名 IP地址 角色/用途 MySQL Server_ID
master1 192.168.80.101 MySQL主节点,可读写操作 11
master2 192.168.80.102 MySQL备节点,可读写操作 12
slave1 192.168.80.103 MySQL从节点,仅能读 13
slave2 192.168.80.104 MySQL从节点,仅能读 14
monitor 192.168.80.105 MMM管理端

1.3、虚拟IP环境说明

虚拟IP地址 用途 说明
192.168.80.200 写操作 有点类似VIP,该IP会在正常主节点上使用,那么此时只有主节点能写操作
192.168.80.201 读操作 将多个具有读操作的读虚拟IP应用到各从节点及主、备节点,能分担读操作。可以通过LVS、HAProxy对读VIP进行负载均衡
192.168.80.202 读操作
192.168.80.203 读操作
192.168.80.204 读操作

2、MySQL部署工作

2.1、安装MySQL

各节点部署MySQL 5.5.36 
下面演示master1节点部署MySQL

[[email protected] local]# groupadd -r mysql    # 创建mysql组[[email protected] local]# useradd -g mysql -r mysql  #创建mysql用户[[email protected] ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local/  # 将程序包解压至对应的路径下[[email protected] ~]# cd /usr/local/[[email protected] local]# ln -s mariadb-5.5.36-linux-x86_64/ mysql  #创建软连接[[email protected] local]# chown -R root.mysql mysql/*    #将mysql目录下所有的文件及文件夹赋权[[email protected] local]# cd mysql/[[email protected] mysql]# mkdir /etc/mysql/[[email protected] mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf  #拷贝配置文件至指定路径[[email protected] mysql]# vim /etc/mysql/my.cnf  #修改配置文件,在mysqld字段下修改和增加下面参数datadir=/mydata/data   #mysql 的数据目录read_only = 1         #设置所有的mysql都只是只读模式#备注:read_only参数对超级管理权限的用户无效log-bin=/mydata/binlogs/master1-bin  #设置二进制日志路径(建议)server-id       = 11    #设置不同的server-id,目的是为了防止环回复制relay-log       = /mydata/relaylogs/relay-log  # 设置中继日志路径[[email protected] mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld  #复制脚本文件至指定的路径[[email protected] mysql]# chmod +x /etc/rc.d/init.d/mysqld # 为脚本文件赋执行权限[[email protected] mysql]# chkconfig mysqld on   #设置开机自动启动[[email protected] ~]# mkdir -pv /mydata/{data,relaylogs,binlogs}  #创建数据文件、中继日志、二进制日志文件的文件夹[[email protected] ~]# chown mysql.mysql /mydata/*  # 为每个文件夹赋权[[email protected] mysql]# ./scripts/mysql_install_db --datadir=/mydata/data  #初始化mysql[[email protected] mysql]# service mysqld start  #启动服务[[email protected] mysql]# vim /etc/profile.d/mysql.sh   #由于默认PATH环境没有mysql客户端脚本,所以修改环境变量export PATH=/usr/local/mysql/bin:$PATH[[email protected] mysql]# source /etc/profile.d/mysql.sh  #让配置的环境变量立即生效

使用相同的二进制安装mysql的方式安装 master2、slave1、slave2服务器,注意,mysql配置文件中的my.cnf中的“server-id”一定要修改,否则造成环回复制。Slave1和slave2中的二进制日志可以关闭,因为从节点无需被其他从节点复制,所以关闭可以节省I/O压力。

2.2、创建复制账号权限

在master1和master2创建拥有复制的权限的账号和密码

MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO [email protected]‘192.168.80.%‘ IDENTIFIED BY ‘[email protected]‘;

2.3、设置各节点复制指向主节点

1、查看主节点master1的二进制日志的位置

MariaDB [(none)]> SHOW MASTER STATUS;

2、将复制的主节点指向master1,包括master2,slave1,slave2。而将master1复制主节点指向master2。

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=‘192.168.80.101‘,MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘[email protected]‘,MASTER_LOG_FILE=‘master1-bin.000004‘,MASTER_LOG_POS=421;

3、上述配置在每个节点配置完成后,每个节点开启复制进程

MariaDB [(none)]> START SLAVE;

4、查看从节点的状态

主要留意”Slave_IO_Running”和“Slave_IO_Running” 是否处于“Yes”状态

Slave_IO_Running: YesSlave_SQL_Running: Yes

2.4、测试复制功能

在主节点master1上创建testdb数据库,用于测试各节点复制功能是否正常

MariaDB [(none)]> CREATE DATABASE testdb;MariaDB [(none)]> SHOW DATABASES;

再各节点使用命令“SHOW DATABASES”查看,是否已经复制成功。如果各节点均能查看到此数据库,表示复制正常。

3、在MMM服务器安装MMM套件

1、配置好epel源

[epel]name=Extra Packages for Enterprise Linux 6 - $basearch#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearchmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearchfailovermethod=priorityenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6[epel-debuginfo]name=Extra Packages for Enterprise Linux 6 - $basearch - Debug#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debugmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearchfailovermethod=priorityenabled=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

2、monitor安装所有mmm套件

[[email protected] ~]# yum -y install mysql-mmm*

3、安装完后的配置文件说明

默认配置文件目录为/etc/mysql-mmm

  • mmm_mon.conf:定义监控参数,只需在服务器端配置
  • mmm_common.conf: 设置读、写节点的IP及配置虚拟,每个节点均需一样
  • mmm_agent.conf:设置每个节点的标识

4、修改mmm_common.conf配置文件

[[email protected] mysql-mmm]# vim mmm_common.confactive_master_role      writer   #前面安装mysql时,设定read_only=1参数,而这里的参数是MMM是判断某个节点状态,会自动在可写的节点上设置“set global read_only=0”,那么此时就打开了写的权限,而其他还是只读的状态<host default>                  #定义默认主机信息    cluster_interface       eth0   #配置的网络接口    pid_path                /var/run/mysql-mmm/mmm_agentd.pid   #pdi文件路径    bin_path                /usr/libexec/mysql-mmm/     # MMM可执行文件路径    replication_user        repluser    # 拥有复制权限的账号    replication_password    [email protected]   # 拥有复制权限的密码    agent_user              mmm_agent   # 更改只读操作用户的账号    agent_password          agent_password  #更改只读操作用户的密码</host> <host db1>                  #设置db1的配置信息,该名字在mmm_agent.conf中间中定义    ip      192.168.80.101    # db1的物理IP地址    mode    master          # db1角色,可选有master 和 slave     peer    db2             # 设置与db1对等的主机名,表示db1和db2均为master角色</host><host db2>    ip      192.168.80.102    mode    master    peer    db1</host><host db3>    ip      192.168.80.103    mode    slave        # 设置db3的角色为 slave</host><host db4>    ip      192.168.80.104    mode    slave</host><role writer>                   #设置具有可写mysql操作的角色模式    hosts   db1, db2          # 指定可具有写操作的主机    ips     192.168.80.200    # 具有写操作的虚拟IP地址    mode    exclusive        # 设置角色的模式为互斥,表示同一时间,只有一台主机具有此IP</role><role reader>                   # 设置具有可读操作的角色模式hosts   db1,  db2,  db3, db4  # 指定可读操作的主机ips     192.168.80.201, 192.168.80.202, 192.168.80.203, 192.168.80.204.   #指定可读操作的虚拟IP地址mode    balanced            # 负载均衡模式,上面指定的虚拟IP地址会均衡废品到各只读操作的主机上。这类表示轮训</role>

5、将mmm_common.conf配置文件拷贝到各节点上

[[email protected] mysql-mmm]# scp mmm_common.conf 192.168.80.101:/etc/mysql-mmm/[[email protected] mysql-mmm]# scp mmm_common.conf 192.168.80.102:/etc/mysql-mmm/[[email protected] mysql-mmm]# scp mmm_common.conf 192.168.80.103:/etc/mysql-mmm/[[email protected] mysql-mmm]# scp mmm_common.conf 192.168.80.104:/etc/mysql-mmm/

6、配置mmm_mon.conf配置文件

[[email protected] mysql-mmm]# vim mmm_mon.confinclude mmm_common.conf<monitor>    ip                  127.0.0.1    # 仅在本地监听,为了使安全,mmm_mond默认监听的端口是99988    pid_path            /var/run/mysql-mmm/mmm_mond.pid  #PDI文件位置    bin_path            /usr/libexec/mysql-mmm              # 可执行文件位置    status_path         /var/lib/mysql-mmm/mmm_mond.status   # 集群状态文件ping_ips            192.168.80.101, 192.168.80.102, 192.168.80.103, 192.168.80.104, 192.168.80.1#用于测试可用性的IP地址清单    auto_set_online     60      # 是否自动上线,如果此值大于0,表示抖动的主机在抖动范围后,会自动上线。抖动时间范围是3600s     # The kill_host_bin does not exist by default, though the monitor will    # throw a warning about it missing.  See the section 5.10 "Kill Host    # Functionality" in the PDF documentation.    #    # kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host    #</monitor><host default>    monitor_user        mmm_monitor         # monitor user的账号    monitor_password    monitor_password    # monitor password密码</host>debug 0

4、安装MySQL MMM 客户端

1、 使用上面的方法各节点配置好epel源 
2、各节点安装mysql-mmm-agent

[[email protected] mysql]# yum -y install mysql-mmm-agent

3、在各节点上创建下列两个账号

  • Monitor user账号:用于MMM管理服务器对MySQL服务器做健康状态检查
  • Monitor agent账号:用于切换只读模式和同步master信息
MariaDB [(none)]> GRANT REPLICATION CLIENT ON *.* TO ‘mmm_monitor‘@‘192.168.80.%‘ IDENTIFIED BY ‘monitor_password‘;MariaDB [(none)]> GRANT SUPER,REPLICATION CLIENT,PROCESS ON *.* TO ‘mmm_agent‘@‘192.168.80.%‘ IDENTIFIED BY ‘agent_password‘;

4、配置mysql-mmm-agent

[[email protected] ~]# vim /etc/default/mysql-mmm-agent# mysql-mmm-agent defaultsENABLED=1       # 表示agent是否启用状态

5、配置mmm_agent.conf

[[email protected] mysql-mmm]# vim mmm_agent.confinclude mmm_common.confthis db1      # mmm_common.conf中标识的名称,那么剩余的节点名称分别为db2,db3,db4,请根据要求再各节点上进行修改,这里不再详细列举。

5、启动MMM服务,并查看MMM集群状态

1、MMM服务端的服务为 mysql-mmm-monitor,在服务端启动服务,并设置开机自动启动

[[email protected] ~]# service mysql-mmm-monitor start[[email protected] ~]# chkconfig mysql-mmm-monitor on

2、MMM客户端的服务为 mysql-mmm-agent,再各节点启动服务,并设置开机自动启动

[[email protected] mysql-mmm]# service mysql-mmm-agent start[[email protected] ~]# chkconfig mysql-mmm-agent on

3、mmm_control命令介绍

在安装MMM后,可以通过mmm_contril管理MMM集群,MMM集群的运行日志一般保存在/var/log/mysql_mmm目录下,下面介绍mmm_control使用

[[email protected] ~]# mmm_control mode    help                              #显示帮助信息    ping                              #测试网络运行状态    show                             #显示MMM节点的状态    checks [<host>|all [<check>|all]] - show checks status  #显示MMM集群中指定节点/所有节点的状态    set_online <host>                 # 将某个节点设置为online状态    set_offline <host>                 # 将某个节点设置为offline状态    mode                           #显示MMM运行模式    set_active                        #切换MMM集群为active模式.    set_manual                       #切换MMM集群为manual模式.    set_passive                       #切换MMM集群为passive模式.    move_role [--force] <role> <host> - move exclusive role <role> to host <host>                                    # 在互斥模式下切换角色       set_ip <ip> <host>                #在被动模式下操作角色

4、mmm_control checks all显示所有节点详细运行状态

[[email protected] ~]# mmm_control checks all

5、查看集群运行状态

[[email protected] ~]# mmm_control checks all

集群节点的状态有以下几种

  • ONLINE:表示节点运行正常,处于在线状态
  • ADMIN_OFFLINE:表示节点是管理员关闭的
  • HARD_OFFLINE:表示节点处于离线状态,有可能是因为MMM集群测试ping时失败或检测MySQL失败而切换的一种状态
  • AWAITING_RECOVERY:表示等待恢复状态,若集群mode设置是active运行模式,那么此状态会自动回复到ONLINE状态
  • REPLICATION_FAIL:表示主从复制失败状态,一般是复制主线程(IO线程)没有运行
  • REPLICATION_DELAY:表示复制日志有延时,一般由于检查日志失败导致。

6、创建允许mysql用户

在主节点上创建mysql用户,允许让客户端能允许访问mysql

MariaDB [(none)]> CREATE USER [email protected]192.168.80.107 IDENTIFIED BY ‘redhat‘;MariaDB [(none)]> GRANT CREATE ON *.* TO [email protected]192.168.80.107;

7、测试MMM实现MySQL高可用

7.1、测试写操作

1、在主节点master1上查看IP地址

[[email protected] ~]# ip addr#可以看到write IP位于主节点master1上

2、使用客户端mysql-client连接写节点的VIP

[[email protected] ~]# mysql -u pangxie1 -h 192.168.80.200 -p

3、创建数据库

mysql> CREATE DATABASE pangxiedb;Query OK, 1 row affected (0.01 sec)

4、查看创建完成后的数据库列表

mysql> SHOW DATABASES;

5、查看此时连入的mysql主机名称

mysql> SHOW VARIABLES LIKE "%hostname%";#可以看到,Write IP对应的VIP是主节点master1上

6、在其他从节点上查看数据库列表,可以看到此时其他的从节点能复制主节点新创建的数据库。

7.2、测试读操作

1、使用客户端mysql-client连接读权限的VIP

[[email protected] ~]# mysql -u pangxie1 -h 192.168.80.201 –p

2、查看数据库表

3、查看当前mysql主机名

mysql> SHOW VARIABLES LIKE "%hostname%";

4、测试写操作

mysql> CREATE DATABASE testdb1;#可以看到是无法写操作的

7.3、模拟主节点故障

1、在主节点master1关闭mysql服务

[[email protected] ~]# service mysqld stop

2、在monitor上查看各节点状态

[[email protected] ~]# mmm_control show# 可以看到主节点master1已经检测到为OFFLINE

3、在从节点slave1上查看从节点状态

MariaDB [(none)]> SHOW SLAVE STATUS\G#可以看到从节点已经将主服务器指向备节点

4、在备节点master2查看IP地址

[[email protected] ~]# ip addr

5、在备节点master2创建MS2db数据库,然后再次查看数据库列表

6、使用mysql-client使用上面的方法,再次测试读写操作,结果和预想一致。

7.4、模拟故障恢复

1、在主节点master1启动mysqld服务

[[email protected] ~]# service mysqld startStarting MySQL.. SUCCESS!

2、在monitor重新查看节点状态

[[email protected] ~]# mmm_control show#经过一段时间后,master1节点恢复ONLINE状态。

至此,MySQL-MMM实现MySQL的高可用就配置完成。

8、需要注意地方及建议

1、 在配置MySQL时,需要留意Server-id,一定要保证各节点的Server-id不一致,否则会导致出现环回复制的情况,这种情况一般是在实现双主模型时出现 
2、 数据文件、二进制日志文件、中继日志文件建议最好是分开存放,或者说是独立存放,不使用默认路径。二进制日志在MySQL复制中尤为重要。 
3、 为保证数据不出现脑裂情况,要在mysql配置文件中my.cnf的mysqld中配置“read_only=1”,设置此项目的就是为了防止脑裂。 
4、如果使用到iptables,请记得放行mysql的端口,以及IO进程访问主服务器端的端口。

时间: 2024-08-02 04:34:05

MySQL-MMM实现MySQL高可用读写分离的相关文章

MMM架构实现MySQL高可用读写分离(进阶版,包含Amoeba)

前两天逛博客偶然发现了某大神写的关于MMM的文章,看完就迫不及待的自己试了一下,大神写的很顺畅,以为自己也能操作的很顺畅,但是实际情况是手脚太不麻利,碰到很多坑,如果大神的文章是"平地起高楼",那我这篇则是"平房起别墅",因为我生产环境中已经有两台Mysql做双主同步,这篇文章说的是如何改造升级现有架构! 环境介绍: IP 操作系统 数据库 软件 角色/VIP 192.168.6.109 CentOS7.2 Mysql5.6-34 mysql-mmm2.2.1-15

【视频分享】基于MyCat的MySQL高可用读写分离集群

# [视频分享]基于MyCat的MySQL高可用读写分离集群 ## 获取方式 **方式一:****链接:**[百度网盘](https://pan.baidu.com/s/137KFcoCE-i75vA8FE_OYFQ)==关注公众号极客萧(xiaoyxyj),并且回复关键字:mycat 即可获取下载链接和提取码(注意大小写别错)====如果链接失效,请及时联系我== 原文地址:https://www.cnblogs.com/icefirebug/p/11784738.html

MySQL深入10-利用Ameoba实现读写分离

本篇博文主要介绍利用Ameoba实现MySQL的读写分离功能,而MySQL官方的mysql-proxy需要自己编写复杂的lua脚本才能实现同样的功能,故个人还是倾向使用amoeba哦: =================================================================== 1 简介 2 准备 2.1 时间同步 2.2 配置MySQL主从复制架构 3 ameoba安装配置 3.1 安装配置JDK 3.2 安装ameoba 3.3 配置ameoba 3

分享MYSQL中的各种高可用技术(源自姜承尧大牛)

图片和资料来源于MYSQL大牛姜承尧老师(MYSQL技术内幕作者) 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发 mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工商银行,数据不能丢失 可用的是服务:服务器不能宕机 灵活运用MYSQL的各种高可用技术来达到下面各种级别的高可用要求 要达到99.9%:使用MYSQL复制技术 要达到99.99%:使用MYSQL NDB 集群和虚拟化技术 要达到99.999%:使用share

MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 转载

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

linux下mysql基于mycat做主从复制和读写分离之基础篇

Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , mycat1.6-RELEASE jdk1.7及其以上版本2.实现步骤一(mycat实现读写分离) 1.首先在两台服务器安装mysql 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rp

Mysql一主多从和读写分离配置简记

Mysql一主多从和读写分离配置简记 标签: mysql数据库服务器class数据库servermanager 2012-05-30 16:44 14981人阅读 评论(1) 收藏 举报  分类: 数据库 版权声明:本文为博主原创文章,未经博主允许不得转载. 近期开发的系统中使用MySql作为数据库,由于数据涉及到Money,所以不得不慎重.同时,用户对最大访问量也提出了要求.为了避免Mysql成为性能瓶颈并具备很好的容错能力,特此实现主从热备和读写分离.在此简做纪要,以备日后所用! 一.配置主

基于heartbeat v1配置mysql和httpd的高可用双主模型

一.配置高可用集群的前提:(以两节点的heartbeat为例) ⑴时间必须保持同步 ⑵节点之间必须用名称互相通信 建议使用/etc/hosts,而不要用DNS 集群中使用的主机名为`uname -n`表示的主机名: ⑶ping node(仅偶数节点才需要) ⑷ssh密钥认证进行无障碍通信: 二.heartbeat v1的配置 程序主配置文件:ha.cf 认证密钥:authkeys, 其权限必须为组和其它无权访问: 资源配置文件:haresources /usr/share/doc/heartbe

mysql主主+keepalived高可用

mysql主主+keepalived高可用 1.两台主机 host: db1 外网:11.0.0.51 内网:172.16.1.51 db2 外网:11.0.0.52 内网:172.16.1.52 2.两台主机分别下载mysql cd /usr/chris/src wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-linux-glibc2.12-x86_64.tar.gz useradd mysql -u 550 -s