MySQL의 인스턴스 배포 아키텍처 --mmm

음 소스 아키텍처

  • 우리 모두가 알고, MySQL은 그 자체가 마스터 - 슬레이브 복제 기능을 제공으로, 당신은 쉽게 양방향 마스터 마스터 복제를 달성 할 수있는 다음 마스터 노드 슬레이브 중 하나에 대한 라이브러리를 구축 할 수 있습니다. MySQL의-MMM의 기본 아키텍처의이 실현 : MASTER1와 MASTER2 사이의 양방향 복제도 MASTER1와 SLAVE1 사이에 마스터 - 슬레이브 복제입니다.
  • 이 방법으로 전체 시스템에서 두 개의 석사, 외국인이 정상적인 상황에서 서비스를 작성 제공의 마스터가 있습니다. 당신이 정상적인 클러스터 마스터 노드가 여전히 있지만, 응용 프로그램을 계속 사용할 수 있지만, 장애 조치 전환 할 수있는 기능이없는 MySQL은 그 자체가 외부 마스터 계획되지 않은 다운 타임에 서비스를 제공합니다. mysql을 - 음이 문제가 태어 해결하는 것입니다.

아키텍처의 음 원리

  • MySQL의-MMM은 짧은 MySQL을위한 마스터 - 마스터 복제 관리자 (MySQL의 마스터 마스터 복제 관리자), 구글의 오픈 소스 프로젝트 (펄 스크립트)이며, 주로 모니터링 및 메이크업 mysql을 마스터 마스터 복제 장애 복구하는 데 사용된다
  • 원리는 전용 쓰기 IP, 다중 읽기의 IP가 VIP이 쓰기,이,이 가상 IP에 초점을 맞추고, 가상 IP (VIP) 집합에 매핑되는 실제 데이터베이스 노드 IP (RIP)입니다 장애 조치 전환 달성하기 위해, 실제 IP 개의 석사 (RIP) 클러스터 데이터베이스를 매핑, 다른 하나는 (균형)을 읽는 균형 VIP를 읽을 수 있습니다.

음 기관의 장점과 단점

이점

  • 사용 펄 스크립트 언어와 완전히 오픈 소스
  • 읽기 및 쓰기 VIP (가상 IP), 프런트 엔드 응용 프로그램에 투명 서버 역할 변화 제공
  • MMM은 서버에서 대기 시간 모니터링을 제공합니다
  • MMM은 새로운 주에 서버에서 기본 데이터베이스 장애 복구 재 동기화를 제공합니다
  • 그것은 다시 온라인으로 실패한 기본 데이터베이스에 대한 쉬운

결점

  • 새로운 MySQL의 복제 기능을 지원하지 않는 이전 게시 (기반 GTID 복제)
  • 로드 밸런싱 기능을 읽어 보지 않았
  • 원인 데이터 손실, 마스터와 슬레이브 전환
  • 실패 MMM 모니터링 서비스의 단일 지점

음 아키텍처 다이어그램

MySQL의 인스턴스 배포 아키텍처 --mmm

파일럿 배포

환경 배포

master1IP地址:192.168.144.167
master2IP地址:192.168.144.151
slave1IP地址:192.168.144.168
slave2IP地址:192.168.144.145
monitorIP地址:192.168.144.164

MASTER1 \ MASTER2 \ SLAVE1 \ slave2 서버에 MySQL 데이터베이스를 설치

[root@master1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo   //获取源地址
[root@master1 ~]# yum -y install epel-release      //安装epel源
[root@master1 ~]# yum clean all && yum makecache     //yum缓存清空
[root@master1 ~]# yum -y install mariadb-server mariadb      //安装mariadb数据库
[root@master1 ~]# systemctl stop firewalld.service       //关闭防火墙
[root@master1 ~]# setenforce 0
[root@master1 ~]# systemctl start mariadb.service        //开启数据库

데이터베이스 구성 파일을 수정 MASTER1

[root@master1 ~]# vim /etc/my.cnf        //进入编辑配置文件
[mysqld]
log_error=/var/lib/mysql/mysql.err        //错误日志文件
log=/var/lib/mysql/mysql_log.log           //主从日志存放位置
log_slow_queries=/var/lib/mysql_slow_queris.log     //man日志
binlog-ignore-db=mysql,information_schema         //二进制文件
character_set_server=utf8        //字符集
log_bin=mysql_bin             //二进制日志文件
server_id=11            //服务id(不能相同)
log_slave_updates=true   //允许从服务器更新
sync_binlog=1            //同步日志
auto_increment_increment=2    //自增列
auto_increment_offset=1               //起始点
[root@master1 ~]# systemctl restart mariadb.service   //重启数据库

사용 SCP 다른 MySQL 데이터베이스 구성 서비스에 파일을 복사하고, 다른 MySQL의 서버에서 SERVER_ID을 수정하는 방법

[root@master1 ~]# scp /etc/my.cnf [email protected]:/etc/   (server-id=22)
[root@master1 ~]# scp /etc/my.cnf [email protected]:/etc/   (server-id=33)
[root@master1 ~]# scp /etc/my.cnf [email protected]:/etc/   (server-id=44)
[root@master1 ~]# netstat -anpt | grep 3306       //查看端口3306
tcp      0   0 0.0.0.0:3306     0.0.0.0:*         LISTEN      4235/mysqld  

마스터 마스터 복제 구성

MASTER1

[root@master1 ~]# mysql   ##进入数据库

MariaDB [(none)]> show master status;   ##查看主服务器的状态信息
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 |      245 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> grant replication slave on *.* to 'replication'@'192.168.144.%' identified by '123456';     //授权给144段的网段复制的权限用户名replication密码123456
Query OK, 0 rows affected (0.00 sec)

MASTER2

MariaDB [(none)]> change master to master_host='192.168.144.167',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;     //在master2上同步master1服务器
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant replication slave on *.* to 'replication'@'192.168.144.%' identified by '123456';    //在master2上授权复制权限
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show master status;       //查看master2的服务器的状态信息
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 |      410 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> flush privileges;     //刷新权限
Query OK, 0 rows affected (0.00 sec)

MASTER1

MariaDB [(none)]> change master to master_host='192.168.144.151',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=410;       //master1同步master2服务器数据库
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MASTER1 개방 동기 MASTER2

MariaDB [(none)]> start slave;              //开启同步
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show slave status\G;       //查看同步状态信息
                         ...
                         Slave_IO_Running: Yes
                        Slave_SQL_Running: Yes
                        ...

SLAVE1는 동기화에서 명령 해 slave2

MariaDB [(none)]> change master to master_host='192.168.144.167',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;       //在从服务器上同步master1主服务器
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;       //刷新权限
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> start slave;       //开启同步
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show slave status\G;        //查看同步的状态信息
                             ...
                             Slave_IO_Running: Yes
                            Slave_SQL_Running: Yes
                            ...

마스터 동기화 상태 테스트 마스터, 마스터 - 슬레이브

마스터 MASTER1

MariaDB [(none)]> create database school;   //创建数据库
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;   //查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| test               |
+--------------------+
5 rows in set (0.00 sec)

슬레이브 데이터베이스 서버에보기

MariaDB [(none)]> show databases;    //实现主主,主从同步
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| test               |
+--------------------+
5 rows in set (0.00 sec)

모니터 구성 서버 EPEL 출시 소스는 MMM을 캐시를 비우 다음 설치

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum -y install epel-release

yum clean all && yum makecache

yum -y install mysql-mmm*

음 모든 MySQL의 서버에 설치

yum -y install mysql-mmm*

모든 서버는 음하도록 구성되어 있습니다

 [root@master1 ~]# vim /etc/mysql-mmm/mmm_common.conf     //所有主机上都要配置,直接复制多份

……
<host default>
        cluster_interface       ens33    //修改网卡
        replication_user        replication      //修改用户名
        replication_password    123456         //密码
        agent_user              mmm_agent
        agent_password          123456         //密码

<host db1>
        ip      192.168.144.167   //master1地址
        mode    master
        peer    db2
</host>

<host db2>
        ip      192.168.144.151   //master2地址
        mode    master
        peer    db1
</host>

<host db3>
        ip      192.168.144.168   //slave1地址
        mode    slave
</host>

<host db4>
        ip      192.168.144.145   //slave2地址
        mode    slave
</host>

<role writer>
        hosts   db1, db2      ##写服务器虚拟ip
        ips     192.168.144.250
        mode    exclusive
</role>

<role reader> 
        hosts   db3, db4    ##读服务器虚拟ip
        ips     192.168.144.251, 192.168.144.252
        mode    balanced
</role>

##复制到其他的服务器中
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
[email protected]'s password: 
mmm_common.conf                               100%  836   267.1KB/s   00:00    
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
[email protected]'s password: 
mmm_common.conf                               100%  836   863.2KB/s   00:00    
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
[email protected]'s password: 
mmm_common.conf                               100%  836   904.7KB/s   00:00    
[root@master1 ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/

모니터 서버 구성에

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf
<host default>
        monitor_user        mmm_monitor
        monitor_password    123456    ##修改monitor的密码
</host>

모든 데이터베이스 mmm_agent 프록시 인증 모니터링 mmm_monitor에 대한 권한 부여에

MariaDB [(none)]> grant super, replication client, process on *.* to 'mmm_agent'@'192.168.144.%' identified by '123456';     //授权代理
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant replication client on *.* to 'mmm_monitor'@'192.168.144.%' identified by '123456';        //授权监控
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;       //刷新权限
Query OK, 0 rows affected (0.00 sec)

수정은 모든 데이터베이스를 mmm_agent.conf

[root@master1 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db1 //根据规划进行逐一调整
[root@master2 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db2 //根据规划进行逐一调整
[root@slave1 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db3 //根据规划进行逐一调整
[root@slave2 ~]# vim /etc/mysql-mmm/mmm_agent.conf
this db4 //根据规划进行逐一调整
##所有数据库开启
[root@master1 ~]systemctl start mysql-mmm-agent.service        //开启代理服务
[root@master1 ~]systemctl enable mysql-mmm-agent.service        //加入开机自启动

모니터 구성에

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf
<monitor>
        ip                  127.0.0.1
        pid_path            /run/mysql-mmm-monitor.pid
        bin_path            /usr/libexec/mysql-mmm
        status_path         /var/lib/mysql-mmm/mmm_mond.status
        ping_ips            192.168.144.167,192.168.144.151,192.168.144.168,192.168.144.145    //所有数据库服务器地址
        auto_set_online     10        //自动在线时间
[root@monitor ~]# systemctl stop firewalld.service        //关闭防火墙
[root@monitor ~]# setenforce 0
[root@monitor ~]# systemctl start mysql-mmm-monitor.service       /开启监控服务
[root@monitor ~]# mmm_control show            //查看主从的飘逸地址
    db1(192.168.144.167) master/ONLINE. Roles: writer(192.168.144.250)
    db2(192.168.144.151) master/ONLINE. Roles: 
    db3(192.168.144.168) slave/ONLINE. Roles: reader(192.168.144.252)
    db4(192.168.144.145) slave/ONLINE. Roles: reader(192.168.144.251)

테스트 드리프트 주소

[root@master1 ~]# systemctl stop mariadb.service     //模拟停止master1服务器

모니터 서버를 확인

[root@monitor ~]# mmm_control show
    db1(192.168.144.167) master/HARD_OFFLINE. Roles: 
    db2(192.168.144.151) master/ONLINE. Roles: writer(192.168.144.250)
    db3(192.168.144.168) slave/ONLINE. Roles: reader(192.168.144.252)
    db4(192.168.144.145) slave/ONLINE. Roles: reader(192.168.144.251)
(重启master1数据库服务,虚拟地址不会被抢占到master1)
mmm_control checks all //需要各种OK
mmm_control move_role writer db1      //可以切换虚拟地址

테스트 가상 머신으로 모니터에서 MySQL을 설치하면 데이터베이스를 다운로드 IP

[root@monitor ~]# yum install mysql -y

//master1服务器上授权monitor地址访问//

MariaDB [(none)]> grant all on *.* to 'testdba'@'192.168.144.164' identified by '123456';
##授权monitor地址访问
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;   ##刷新权限
Query OK, 0 rows affected (0.00 sec)

[root@monitor ~]# mysql -utestdba -p -h 192.168.144.250   ##使用虚拟地址即可登录数据库
Enter password: 

MariaDB [(none)]> 

추천

출처blog.51cto.com/14473285/2458541