??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
MySQL+MMM 高可用集群部署(一)

转载   司徒晓宇   2018-11-15   浏览量:12


一、MMM的功能特点

MMM 即(Master-Master replication manager for MySQL)的简称,它是一套支持双主故障切换和双主日常管理的脚本程序,而MMM是用 Perl 语言所开发,其主要功能是:

第一、用来监控和管理 MySQL 数据库 主主复制(Master-Master),虽然是主主结构,但是由于数据库自身特性,在业务逻辑中,同一时刻,仅允许有一个主库写入,而另一个主库充当备份角色,一旦当前所使用的主库出现故障,将立马切换到另一个主库

第二、用来监控和管理 MySQL 数据库 主从复制(Master-Slave),而这里的主从复制,首先、从库的主要作用是进行 Read 负载均衡,其次,也充当备份角色。

MMM的优点:

1、开源免费、从产品面世到成型,经历了很长一段时间,有前辈们的成熟的技术支持

2、来源于 MySQL 内部,属于MySQL自己的技术

彩票开奖查询 www.kbyp.net 3、使用脚本控制管理,简单方便,易于理解

4、功能比较完善,自带各种牛X工具及套件

MMM的缺点:

1、由于 MMM 自身建构的局限性,只能有一个写入点,其扩展性在大型企业中将会是一个瓶颈。

2、对于读写分离、Read 负载均衡,其不能通过自身完成,需要企业自己手动处理,或者借助第三方软件完成。

二、MMM 架构解析

图片.png

如上图拓扑

1、箭头方向代表数据流向

2、对于主主结构,我们需要在两台主数据库(主A 和 主B)中配置互为主从,当其中任意一台主库(比如主A)处于可写入状态时,另外一台主库(比如主B)将同步到它(主A)刚写入的数据,反之亦然。

3、对于主从结构,当前,主B属于主库,则需要配置 从A 和 从B 两台数据库做为 主B 的从库即可,无论是 主A 还是 主B ,有数据写入时,都会同步到 从A 和 从B 。如果,当前,主A 处于可写入状态,它首先会向 主B 进行数据同步,再由 主B 向 从A 和 从B 进行数据同步。这种结构在进行数据同步时,如果数据量较大(大型企业),将可能存在一定延时。

4、由 Monitor 监控服务器同时对 主A、主B、从A、从B 4台数据库进行监控及管理,这里指的是监控4台数据库的状态(服务可达、服务不可达状态,在生产环境中,数据库一旦出现故障,那将是灾难性的,影响企业命运的。所以,生产环境中,假如有4台数据库服务器:双主双从,4台数据库服务器不可能同时出现故障,亦或者说2台主数据库同样不可能同时出现故障。),如果说,当前正在写入的主数据库(主A)由于硬件故障或者服务奔溃出现故障,Monitor 服务器将会立马将虚拟 IP 192.168.20.254 切换到另外一台主数据库(主B),这期间的时间,十分短暂,客户基本不会有任何察觉,从库亦是如此。

5、对于读写分离,我们在进行应用服务部署过程中,会进行手动配置(或者借助第三方软件实现),虚拟写 IP :192.168.20.254,在单独配置虚拟 读IP:192.168.20.252、192.168.20.253,做读写分离,其主要目的是负载均衡,降低服务器压力。

三、主从同步配置详解

    1、环境安装

        a、数据库规划,这里我们安装4台MySQL数据库和1台Monitor服务器,配置如下:

        图片.png

        b、虚拟IP规划:

        图片.png

        c、修改服务器 hosts 文件,将下面的内容粘贴进去(注意,每台服务器都要添加):

             192.168.20.134 masterA

             192.168.20.128 masterB

             192.168.20.129 slaveA

             192.168.20.130 slaveB

             192.168.20.131 cluster-proxy

             [[email protected] ~]# vim /etc/hosts

             图片.png

        d、关闭firewalld:

             [[email protected] ~]# systemctl stop firewalld

             [[email protected] ~]# systemctl disable firewalld

        e、关闭selinux

             [[email protected] ~]# setenforce 0

        f、配置yum源和epel源

             根据自己的需要进行配置,这里不进行赘述

        g、服务器做时间同步

             同步网络时间或者自己的时间服务器,这里不进行赘述

    2、安装MySQL

        关于MySQL的安装,请参考小弟我的另一篇文章://blog.51cto.com/4746316/2313577

    3、配置MySQL

        [[email protected] ~]# vim /etc/my.cnf

        [mysqld]

        basedir = /usr/local/mysql
        datadir = /wdata/mysql/data
        tmpdir = /wdata/mysql/temp
        plugin-dir = /usr/local/mysql/plugin
        server_id  =  1
        socket = /wdata/mysql/data/mysql.sock
        pid-file = /wdata/mysql/data/mysql.pid
        explicit_defaults_for_timestamp = true
        lower_case_table_names = 1
        open_files_limit = 65535
        event_scheduler = 1
        log_slave_updates = 1

[[email protected] ~]# vim /etc/my.cnf

                [mysqld]

                basedir = /usr/local/mysql
                datadir = /wdata/mysql/data
                tmpdir = /wdata/mysql/temp
                plugin-dir = /usr/local/mysql/plugin
                server_id  =  2
                socket = /wdata/mysql/data/mysql.sock
                pid-file = /wdata/mysql/data/mysql.pid
                explicit_defaults_for_timestamp = true
                lower_case_table_names = 1
                open_files_limit = 65535
                event_scheduler = 1
                log_slave_updates = 1

[[email protected] ~]# vim /etc/my.cnf

                [mysqld]

                basedir = /usr/local/mysql
                datadir = /wdata/mysql/data
                tmpdir = /wdata/mysql/temp
                plugin-dir = /usr/local/mysql/plugin
                server_id  =  3
                socket = /wdata/mysql/data/mysql.sock
                pid-file = /wdata/mysql/data/mysql.pid
                explicit_defaults_for_timestamp = true
                lower_case_table_names = 1
                open_files_limit = 65535
                event_scheduler = 1
                log_slave_updates = 1

[[email protected] ~]# vim /etc/my.cnf

                [mysqld]

                basedir = /usr/local/mysql
                datadir = /wdata/mysql/data
                tmpdir = /wdata/mysql/temp
                plugin-dir = /usr/local/mysql/plugin
                server_id  =  4
                socket = /wdata/mysql/data/mysql.sock
                pid-file = /wdata/mysql/data/mysql.pid
                explicit_defaults_for_timestamp = true
                lower_case_table_names = 1
                open_files_limit = 65535
                event_scheduler = 1
                log_slave_updates = 1


        切记,在修改配置文件时,一定要加入级联复制选项(即:log_slave_updates = 1)

4、重启4台服务器的MySQL数据库

    [[email protected] ~]# service mysqld restart

5、配置MySQL主从同步

    a、配置主主结构

        在mastera、masterb数据库中创建主从同步所需要的用户

        mysql> grant replication slave on *.* to [email protected]"192.168.20.%" identified by "123456";

        mastera

        (1)、查看master状态

        mysql> show master status;

        图片.png

        (2)、设置主数据库信息,包括主数据库IP、主数据库用户名、主数据库密码、主数据库日志文件、主数据库日志文件偏移量

        mysql> change master to master_host="192.168.20.128",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000007",master_log_pos=3766631;

        图片.png

        (3)、启动从库

        mysql> start slave;

        图片.png

        (4)、查看从库状态

        mysql> show slave status\G;

        图片.png

        说明:

        1、master_host:主数据库IP地址,这里设置问masterb的IP地址

        2、master_log_file:主数据库的日志文件名称,通过在 masterb 中使用 show master status; 查询获得。

        3、master_log_file:著数据库的日志文件偏移量,也通过在 masterb 中使用 show master status; 查询获得。

        masterb

        (1)、查看master状态

        mysql> show master status;

        图片.png

        (2)、设置主数据库信息,包括主数据库IP、主数据库用户名、主数据库密码、主数据库日志文件、主数据库日志文件偏移量

        mysql> change master to master_host="192.168.20.134",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000005",master_log_pos=3766317;

        图片.png

        (3)、启动从库

        mysql> start slave;

        图片.png

        (4)、查看从库状态

        mysql> show slave status\G;

        图片.png

        说明:

                在执行完 show slave status\G; 命令时,我们会看到从库当前的详细信息,但是又三个地方需要特别注意,如下图:

                图片.png

                1、Slave_IO_Running 和 Slave_SQL_Running 的值必须为 Yes ,否则将无法进行主从同步

                     Slave_IO_Running:I/O线程监控

                     Slave_SQL_Running:SQL线程监控

                2、Master_UUID:这个值必须是唯一的,主数据库、从数据库的UUID不能相同,如果是克隆的服务器,这个UUID的值应该是相同的,此时,需要在MySQL数据目录下修改 auto.cnf 中的内容即可(不知道                                 怎么修改的,可随便改一位就行),如图:

                     [[email protected] data]# vim auto.cnf

                     图片.png

                3、Slave_SQL_Running_State 记录SQL线程的状态,一般当SQL线程为 NO 或者 Connecting 时,这里会提示出详细的错误原因,可根据这里的提示,进行排错。

                4、Slave_IO_Running 值为 NO 时,一般为主数据库的 IP地址,用户名、密码设置有误,重新设置并重启 slave 可恢复正常。而 Slave_SQL_Running 值为 NO 或者为 Connecting 时,其出错原因比较丰富,需                         要根据提示进行排错。

    b、配置主从结构

        按照前面主主结构的配置模式,分别在 slavea 和 slaveb 中MySQL命令行中执行下面语句:

        mysql> change master to master_host="192.168.20.128",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000007",master_log_pos=3766631;

        mysql> start  slave;

        mysql> show slave status\G;

        图片.png

c、验证主从同步

    1、在 mastera 中创建games数据库,在其他数据库服务器中查看是否存在。

    mysql> create database games;

    图片.png

    2、在其他三台服务器中查看刚创建的数据库是否存在

                                    masterb                                                                       slavea                                                                         slaveb

    图片.png图片.png图片.png

    上三图表示,由mastera向其他三台数据库同步正常

    3、在masterb 中创建用户mmmagent、monitor、discuz,在其他三台数据库服务器中查看是否存在

    mysql> grant all privileges on *.*  to [email protected]"192.168.20.%" identified by "123456";

    mysql> grant all privileges on *.*  to [email protected]"192.168.20.%" identified by "123456";

    图片.png

    4、在其他三台服务器中查看刚创建的账号是否存在

                                                mastera                                                                                    slavea                                                                                slaveb

    图片.png图片.png图片.png

    上三图表示,由masterb向其他三台数据库同步正常

主从同步到此,部署完成,下期,我们开始本章核心环节,MMM配置。


未完待续,下期再见,敬请期待。。。。。。


    

    

转载自://blog.51cto.com/4746316/2317579

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



MySQL8.0简介
MySQL8.0正式版8.0.11已发布,官方表示MySQL8要比MySQL5.7快2倍,还带来了大量的改进和更快的性能!注意:从MySQL5.7升级到MySQL8.0仅支持通过使用in-place方式进行升级,并且不支持从MySQL8.0降级到MySQL5.7(或从某个MySQL8.0版本降级到任意一个更早的MySQL8.0版本)。唯...
MYSQL5.7基于SSL的主从复制
本文档使用的是mysql版本为5.7.22,linux内核为3.10.0-862.el7.x86_64。一、首先主从复制的原理:1、master服务器的binarylog(二进制)将用户输入的增删改的SQL语句通过二进制日志记录下来,并通知存储引擎提交事务。2、slave将master的binarylog复制到自己的中继日志。首先,slave开启一个工作线程(I/O线程),I/O线程在master
【超简单】MySQL存储引擎的选择与配置
【超简单】MySQL存储引擎的选择与配置存储引擎简介MySQL中的数据用各种不同的技术存储在文件(或内存)中。每一种技术都使用不同的存储机构,索引技巧,锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称为存储引擎。下面就为大家介绍两种MySQL中比较常见的两种存储引擎:MyISAM和
MYSQL主从环境搭建
MYSQL主从环境搭建
MySQL 5.6中的变量
这篇文章介绍的是MySQL?5.6中的变量,基本是我以前学习MySQL5.6手册时整理而来。?基础概念MySQL中的变量可分为以下几种:1、MySQL系统变量:该类型变量反映了MySQL服务器是如何配置的。每一个系统变量都有一个默认值。系统变量可以在MySQL配置文件中进行设置,或使用MySQL启动选项进行设置。大多数系统变量都可以在MySQL运行时使用SET命令进行动态修改。2、
MySQL 5.6中的字符集
这篇文章介绍的是MySQL5.6中的字符集,基本是我以前学习MySQL5.6手册时整理而来。?概论基础概念字符集(characterset)是编码和字符符号的映射集合。排序规则(collation)是用于比较字符集中字符的规则集。?现在我们自定义一个简单的字符集characterset。假设我们有一个仅有四个字母的字母表:A、B、a、b。我们给每个字母一个数字:A=0,B
【纯干货、小技巧】遗忘MySQL用户密码怎么办?
遗忘MySQL用户密码怎么办?在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。数据库,就是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。数据库指的是以一定方式储存在一起、能为多个用户共享
MySQL逻辑架构(一)
MySQL逻辑系统架构:可以分为连接器,连接池,Sql接口,解释器,优化库,缓冲区,缓存,引擎MySQL逻辑结构刻意看成二层架构,第一层通常叫做SQLLayer在数据库系统处理底层数据包括权限判断,SQL解析执行计划优化,querychche的出理等等第二层就是存储引擎,通常叫做storageEngineLayer也就是底层数据存取操作的实现部分有多种存储引擎共同组成MySQL存储引擎介绍:MyS
Centos7安装默认mariadb5.5
一、安装MariaDB1、安装$yum-yinstallmariadbmariadb-server2、启动MariaDB$systemctlstartmariadb3、设置开机启动$systemctlenablemariadb4、配置安全策略$mysql_secure_installation首先设置密码,会提示先输入密码Entercurrentpasswordforroot(enterforno
MySQL5.7查询性能改进
MySQL5.7查询性能改进