一、概念

在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用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@bi7 ~]# 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@bi8 ~]# 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 mariadb

ss -tnl |grep 3306

LISTEN     0      80          :::3306                    :::*

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

[root@bi8 ~]# 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 Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the curbit 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)

--主2

MariaDB [(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 master

Master_Host: 192.168.11.7

Master_User: master

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 1087

Relay_Log_File: relay-mysql.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Connecting

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1087

Relay_Log_Space: 256

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_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: No

Last_IO_Errno: 2003

Last_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: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 0

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

Replicate_Do_Domain_Ids:

Replicate_Ignore_Domain_Ids:

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_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@bi7 ~]# firewall-cmd --add-port=3306/tcp

success

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

success

[root@bi8 ~]# firewall-cmd --add-port=3306/tcp

success

[root@bi8 ~]# 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 event

Master_Host: 192.168.11.8

Master_User: master

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 520

Relay_Log_File: relay-mysql.000002

Relay_Log_Pos: 555

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 520

Relay_Log_Space: 860

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_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: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 8

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

Replicate_Do_Domain_Ids:

Replicate_Ignore_Domain_Ids:

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_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 |

| bi |

+--------------------+

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)

mysql hma 分布式_mysql基础之mariadb集群双主(主主)架构相关推荐

  1. mysql pxc搭建_MySQL PXC 高可用集群搭建

    一些名词介绍: WS:write set写数据集IST: Incremental State Transfer增量同步SST:State Snapshot Transfer全量同步 pxc环境所涉及的 ...

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

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

  3. ES基础概念和集群概念

    前言 思考一个问题:当系统数据量上了10亿.100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题: 用什么数据库好?(mysql.sybase.oracle.达梦.神通.mongodb. ...

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

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

  5. 私有云Mariadb集群搭建

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

  6. 原创 【ReactJs+springBoot项目——租房】第13章:MySQL主从复制+MyCat数据库中间件+HAProxy+PXC集群

    分析目前系统架构中的数据库层存在的问题 分析MySQL数据库的集群方案 学习主从复制(读写分离)架构方案 掌握MyCat数据库中间件的使用 掌握HAProxy复制均衡的使用 掌握PXC集群的使用 多种 ...

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

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

  8. 第六天 - 安装第二、三台CentOS - SSH免密登陆 - hadoop全分布式安装、配置、集群启动

    第六天 - 安装第二.三台CentOS - SSH免密登陆 - hadoop全分布式安装.配置.集群启动 第六天 - 安装第二.三台CentOS - SSH免密登陆 - hadoop全分布式安装.配置 ...

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

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

最新文章

  1. system.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式-解决方法...
  2. 这些实验好习惯科研小白一定要先养成!
  3. Deep Learning 论文笔记 (2): Neural network regularization via robust weight factorization
  4. hbuilder打包ios_ios开发证书的作用及申请步骤
  5. JBoss的简单配置
  6. c语言程序设计教程本科,新编C语言程序设计教程(本科)第5篇.pdf
  7. MySQL性能优化(来源于简书)
  8. GitHub热榜第四!这套Python机器学习课,免费获取还易吸收 | 资源
  9. Java语音怎么输出翼型_] 靠增大翼型弯度来获得升力增加的操纵面是什么?
  10. VS2017 离线安装包下载
  11. 通用计算机实习周记,实习周记100篇通用版|绘图员实习周记范文
  12. java sw_APDU格式详解
  13. 下载网页上的视频、音频文件
  14. 关于{高级语言和低级语言}的。谬论!思想误区!解释。author:盗墓者是个丑奴儿
  15. Android verified boot 2.0 vbmeta 数据结构解析
  16. 等差数列前n项和公式证明
  17. The following packages have unmet dependencies: libx11-dev : Depends: libx11-6 (= 2:1.6.7-1+deb10u2
  18. 分数用计算机怎么分数除法,分数除法怎么算
  19. 【技术探讨】用户使用其他厂家433MHz无线模块时,购买样品OK,小批量100个就会出现偶尔无法收发数据的原因?
  20. 第九章——关系查询处理和查询优化

热门文章

  1. 对 带头结点的单链表 的操作
  2. 在 IE 中使用 HTML5 元素
  3. MFC多视图与重绘效率
  4. 牛客网--2019校招--丰收
  5. golang 升级到新版本_Scikit-learn新版本发布,一行代码秒升级
  6. Fatal Error[Pe1696]:cannot open source file “sys.h”
  7. 使用python的butter带通滤波器时出现RuntimeWarning
  8. OpenCV与图像处理学习八——图像边缘提取(Canny检测代码)
  9. Android实现网络音乐播放器
  10. ❤ CSDN精心打造一款插件,让你的浏览器:解锁黑科技、个性十足、沉浸式体验 ❤