一、概念

  在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动。因此,如果是双主或者多主,就会增加mysql入口,增加高可用。不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题。

单点故障解决方案:
  主主架构:
    互为主备,互相监控对方二进制日志文件进行同步
    note:当两个sql语句发生冲突的时候主主架构有可能出现数据不一致的现象;
  MHA(master high availability):
    HMA可以有多个配置文件,一个配置文件监控一个主从架构

二、主主架构思路

1、两台mysql都可读可写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

2、masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

3、两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);

4、所有提供服务的从服务器与masterB进行主从同步(双主多从);

5、建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);

三、演示步骤

环境(主1服务器端IP:192.168.11.7;主2服务器端IP:192.168.11.8)

1、修改配置文件,配置服务器编号,开启bin-log

[root@ren7 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=7
log_bin=mysql-bin
binlog_format=row
relay-log=relay-mysql
relay-log-index=relay-mysql.index
log_slave_updates=on
auto-increment-increment=2
auto-increment-offset=1

[root@ren8 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=8
log_bin=mysql-bin
binlog_format=row
relay-log=relay-mysql
relay-log-index=relay-mysql.index
log_slave_updates=on
auto-increment-increment=2
auto-increment-offset=2

2、重启mysql服务(两台主机)

 systemctl restart mariadbss -tnl |grep 3306 LISTEN     0      80          :::3306                    :::*

3、创建复制用的用户(两台主机)

[root@ren8 ~]# mysql -uroot -proot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.2.26-MariaDB-log MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> grant replication slave on *.* to 'master'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

4、(若第一次同步可忽略此步骤)这里可以清空两台主机的master和slave日志(若之前有开启过同步的,需要先停止同步:stop slave;)
在mysql命令行中输入:
  reset master;
  reset slave;

5、查看二进制日志文件的位置

--主1 MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |     1087 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

--主2MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      520 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

6、为防止配置同步的同时又数据写入,可给数据库加读锁(两台主机):

MariaDB [(none)]> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

7、两台服务器互相连接

--主1连接主2
MariaDB [(none)]> change master to master_host='192.168.11.8',master_user='master',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=520;
Query OK, 0 rows affected (0.01 sec)
--主2连接主1
MariaDB [(none)]> change master to master_host='192.168.11.7',master_user='master',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=1087;
Query OK, 0 rows affected (0.05 sec)

8、启动slave(两台主机)

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.01 sec)

9、检查连接状态(两台主机)

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Connecting to masterMaster_Host: 192.168.11.7Master_User: masterMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 1087Relay_Log_File: relay-mysql.000001Relay_Log_Pos: 4Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: ConnectingSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 1087Relay_Log_Space: 256Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 2003Last_IO_Error: error connecting to master 'master@192.168.11.7:3306' - retry-time: 60  maximum-retries: 86400  message: Can't connect to MySQL server on '192.168.11.7' (113 "No route to host")Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 0Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: NoGtid_IO_Pos: Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservativeSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
1 row in set (0.00 sec)

10、添加防火墙规则

[root@ren7 ~]# firewall-cmd --add-port=3306/tcp
success
[root@ren7 ~]# firewall-cmd --add-port=3306/tcp --permanent
success
[root@ren8 ~]# firewall-cmd --add-port=3306/tcp
success
[root@ren8 ~]# firewall-cmd --add-port=3306/tcp --permanent
success

11、再次检查连接状态(两台主机)

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.11.8Master_User: masterMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 520Relay_Log_File: relay-mysql.000002Relay_Log_Pos: 555Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 520Relay_Log_Space: 860Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 8Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: NoGtid_IO_Pos: Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservativeSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
1 row in set (0.00 sec)

12、测试

--解锁(两台主机)MariaDB [(none)]> unlock tables;
Query OK, 0 rows affected (0.00 sec)

--查看主1的原本数据库MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| ren                |
+--------------------+
4 rows in set (0.00 sec)
--在主1上创建新库yang
MariaDB [(none)]> create database if not exists yang default character set utf8;
Query OK, 1 row affected (0.00 sec)

--查看主2是否有新建的数据库MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| yang               |
+--------------------+
4 rows in set (0.10 sec)--使用yang数据库
MariaDB [(none)]> use yang;
Database changed--在主2上创建新表hello,并插入一条数据
MariaDB [yang]> create table hello(id tinyint unsigned primary key auto_increment not null,name varchar(20));
Query OK, 0 rows affected (0.03 sec)
MariaDB [yang]> insert into hello values(0,'李国祥');
Query OK, 1 row affected (0.00 sec)
MariaDB [yang]> select * from hello;
+----+-----------+
| id | name      |
+----+-----------+
|  2 | 李国祥    |
+----+-----------+
1 row in set (0.00 sec)

--查看主1是否新插入的数据MariaDB [(none)]> use yang;
Database changed
MariaDB [yang]> select * from hello;
+----+-----------+
| id | name      |
+----+-----------+
|  2 | 李国祥    |
+----+-----------+
1 row in set (0.01 sec)

转载于:https://www.cnblogs.com/renyz/p/11488236.html

mysql基础之mariadb集群双主(主主)架构相关推荐

  1. mysql hma 分布式_mysql基础之mariadb集群双主(主主)架构

    一.概念 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加m ...

  2. Mysql 集群双主双从安装使用详细讲解

    文章目录 下载Mysql 安装单机Mysql 配置Mysql集群 双Master配置 master1配置 master2配置 配置说明 双Slave配置 Slave1配置 Slave2配置 双 Mas ...

  3. MySQL数据库集群(双主双从)

    文章目录 MySQL数据库集群(双主双从) 实验环境 双主双从 双主 双从 进行测试 MySQL数据库集群(双主双从) 实验环境 保证每台centos7服务器配置静态的IP,初始化服务器,关闭防火前和 ...

  4. mysql多主集群_mysql galera多主集群

    1.特性 基于行复制的完全并行同步复制 实时多主架构,任意节点可读写 无延迟复制,事务零丢失,可靠健壮的读写体验. 自动化节点关系控制:节点故障自动摘除,节点加入自动协调 接近原生的MySQL数据库连 ...

  5. mysql galera 恢复_galera mariadb集群恢复策略

    1 galera mariadb 首先MariaDB是一个数据库,可以看成是MySQL的一个分支,由于MySQL被SUN收购,所以MySQL面临着闭源的风险,当时MySQL之父Widenius并没有加 ...

  6. mariadb集群与nginx负载均衡配置--centos7版本

    这里配置得是单nginx主机..先准备4台主机,三台mariadb集群,一台nginx. ------------------------------------------------------- ...

  7. 搭建pxc集群时需要先安装mysql么_完美起航-高可用MySQL数据库之PXC集群

    高可用MySQL数据库之PXC集群 前言 在上一篇文章介绍了时下流行的几种数据库产品后(公众号发送"NewSQL"查看),有不少小伙伴表示对自动集群的数据库感兴趣,特别是Cockr ...

  8. 私有云Mariadb集群搭建

    MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性, 同时提高系统的负载能力,集群部署是必不可少的. MariaDB Gale ...

  9. Centos 6.4下 MySQL配置主从服务(集群)

    Centos 6.4下 MySQL配置主从服务(集群) 我们前面两篇文章都分别介绍了Mysql的安装及配置.备份及还原,今天我们继续前面的环境介绍一下Centos 6.4下MySQL配置主从实现数据同 ...

  10. 技术实践|Redis基础知识及集群搭建(上)

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.本篇文章围绕Redis基础知识及集群搭建相关内容进行了分享,希 ...

最新文章

  1. 美国公司欲联合大电脑商阻止绿坝推广
  2. 关闭Visual Studio中的自动代码分析
  3. 五天带你学完《计算机网络》·第三天·传输层
  4. Bochs调试加载符号文件的问题
  5. Ihttphander获取session
  6. python flask热更新_python(flask)+apscheduler定时邮件重发两次的问题
  7. C语言字符篇(五)内存函数
  8. jdk自带压测工具_jstack性能分析工具
  9. MySql实战篇:写一个简单的存储过程,完成订单定时任务
  10. 适合女孩子的高颜值蓝牙耳机推荐?2020新款高人气蓝牙耳机
  11. LabVIEW相关工具包与模块安装
  12. Windows 性能监视器API
  13. DID会固定年份吗_你了解渐进式DID平行趋势图的几种画法吗?
  14. 浮点数I-EEE规范
  15. HTML5期末大作业:仿唯品会购物网站设计——仿唯品会购物商城(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 商城网站设计
  16. excel多条件筛选公式
  17. Asterisk支持通话录音前语音提示
  18. iPhone中取得LAC和cellid等信息
  19. C语言 请给小学生随机出10道加减法的练习题,要求:10以内的加减法,并且能批改。
  20. 基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放

热门文章

  1. 如何在 MacBook Pro 上调整显示设置?
  2. Mac控制中心使用方法
  3. Oracle 11gR2 RAC 常用维护操作 说明
  4. 新时代的web与app开发
  5. 《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一第 2 章 工程师怎样进行设计思维―理性模型 2.0...
  6. 正在经历变革的 Linux 系统管理员技能
  7. 统一对外的接口,支持requestBody以及表单提交的坑
  8. Andrew Ng(coursera)单变量线性回归(LINEAR REGRESSION WITH ONE VARIABLE)
  9. javascript设置首页,加入收藏
  10. bnuoj16491