主从架构

  • 异步同步:效率高,安全性低,有延迟
  • 实时同步:效率低,安全性高,无延迟
  • 主节点:可读可写 (dump thread)
  • 从节点:只读不写 (sql thread, i/o thread)

原理:

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。

主节点单点故障解决方案:

1.主主架构

互为主备,互相监控对方二进制日志文件进行同步

注意:当两个sql语句发生冲突的时候主主架构有可能出现数据不一致的现象

2.MHA(master high avalible)

需要多一台机器装上MHA,监控主从架构,当主节点宕了,会挑选数据与主节点最相近的从节点充当主节点。

MHA可以有多个配置文件,一个配置文件监控一个主从架构。

配置:

node1: 192.168.132.120

node2:192.168.132.121

主从关系:node1为主,node2为从

主节点

1. 修改配置文件

vim
/etc/my.cnf.d/server.cnf

在[mysqld]下加入以下

server-id=1

log-bin=mysql-bin

2. 重启mysql服务

systemctl restart mariadb

3.创建主从连接帐号与授权(sql命令行)

grant
replication slave on *.* to 'slave'@'%' identified by 'slave';

flush
privileges;

4.show
master status

从节点

1. 修改配置文件

vim
/etc/my.cnf.d/server.cnf

server-id=2

2. 重启mysql服务

service
mysqld restart

3.登录数据库

mysql
-uroot -proot

4. 建立主从连接

change
master to master_host='192.168.132.120', master_user='slave',
master_password='slave', master_log_file='mysql_bin.000001', master_log_pos=637;

#用的是当前的二进制日志文件与position

start
slave;      #同时启动I/O
线程和SQL线程

show slave
status\G      #\G竖排查看,后面不能再加分号

#如果Slave_IO_Running与 Slave_SQL_Running均为yes,则主从架构成功

可能出现的报错及解决方法:

报错1:

ERROR 1198
(HY000): This operation cannot be performed as you have a running slave ''; run
STOP SLAVE '' first

stop slave

执行建立主从连接的命令

start slave

报错2:

Got fatal
error 1236 from master when reading data from binary log: 'Could not find first
log file name in binary log index file'

stop slave;

reset
slave;

start slave

galera简介

  • galera集群又叫多主集群,用于数据库的同步,保证数据安全
  • 最少3台,最好是奇数台数,当一台机器宕掉时,因为仲裁机制,这台机器就会被踢出集群。
  • 通过wsrep协议监控其它节点状态
  • 实时同步,当一个事务在一台机器提交,所有机器同时提交。效率低,但是安全性高

galera集群搭建

准备

三台机器:

192.168.132.120

192.168.132.131

192.168.132.134

防火墙为开启状态,添加防火墙端口

setenforce
firewall-cmd --add-port=/tcp
firewall-cmd --add-port=/tcp
firewall-cmd --add-port=/tcp

配置

第一步:编辑配置文件

vim /etc/my.cnf.d/server.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so #库文件
wsrep_cluster_address="gcomm://192.168.132.120,192.168.132.131,192.168.132.134"
binlog_format=row #二进制日志指定为行模式,精确

第二步:初始化

其中1个节点执行,关机重启不需要再初始化,初始化一次就行。

mysqld_safe --wsrep_cluster_address=gcomm://192.168.132.120,192.168.132.131,192.168.132.134     #等待大约一分钟

第三步:启动数据库

执行初始化的节点:
systemctl stop mariadb
galera_new_cluster
其它节点:
systemctl restart mariadb

如果数据库启动失败,

vim /var/lib/mysql/grastate.dat

查看UUID是否是集群的UUID,如果不是需要手动修改为集群的UUID之后在启动

集群的UUID从执行初始化的节点查看

第四步:查看状态

show status like '%wsrep%';

关键参数:

wsrep_cluster_size | 3 | ##集群成员

wsrep_cluster_status | Primary | ##主服务器

wsrep_connected | ON | ##当前是否连接中

wsrep_incoming_addresses | 192.168.132.120:3306,192.168.132.131:3306,192.168.132.134:3306 | ##连接中的数据

wsrep_ready | ON | ##插件是否应用中

wsrep_cluster_state_uuid | b8ecf355-233a-11e8-825e-bb38179b0eb4 | ##UUID 集群唯一标记,每个节点UUID相同

| wsrep_received | 35 | ##数据复制接收次数

注意

如果启动集群出错可参考以下方案

哪个节点最后关闭,就在哪个节点执行galera_new_cluster,其余节点systemctl start mariadb

可以查看/var/lib/mysql/grastate.dat文件的safe_to_bootstrap: 1参数,如果为1代表此节点最后关闭

搭建数据库galera集群的更多相关文章

  1. Linux下MySQL/MariaDB Galera集群搭建过程【转】

    MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...

  2. Linux下MySQL/MariaDB Galera集群搭建过程

    MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...

  3. 使用GTID给Galera集群做数据库异步复制

    一.为什么要做Galera集群异步复制 Galera集群解决了数据库高可用的问题,但是存在局限性,例如耗时的事务处理可能会导致集群性能急剧下降,甚至出现阻塞现象.而不幸的是,类似报表等业务需求就需要做 ...

  4. 基于keepalived搭建MySQL热机集群

    背景 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,M ...

  5. mysql主从配置和galera集群

    mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...

  6. Docker 版ansible galera集群

    1. 部署galera集群 利用四台主机cicd.node1.node2.node3来搭建galera集群. 1> 上传压缩包至cicd,解压得到ansible配置文件 [root@cicd ~ ...

  7. mysql基础之mariadb galera集群(多主)

    一.概念 galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性. galera集群是基于wsrep协议(端口4 ...

  8. Linux下搭建Lotus Domino集群

    Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...

  9. MariaDB Galera集群部署--技术流ken

    Galera集群介绍 MariaDB集群是MariaDB同步多主机集群.它仅支持XtraDB/ InnoDB存储引擎. 主要功能 同步复制 真正的multi-master,即所有节点可以同时读写数据库 ...

随机推荐

  1. 使用注解的Hibernate one-to-many映射

    One to many映射关系指的是两个实体间一个实体可以和多个实体有关联关系,但是多的这一端只能和一的这一端的一个实例有关系.它是一个1 到 n的关系.例如在任何的公司员工可以注册多个银行账户,一个 ...

  2. idea中pom如何加载jar包依赖

    1.需求分析    在特定需求的情况下,idea需要加载jar包,那么如何在idea中正确的配置jar依赖呢?今天博主就这个问题给大伙讲解下,希望对大伙有所帮助 2.实现方案①在工程src目录下新建l ...

  3. java IO流 之 FIle类基础

    package IO; import java.io.File;import java.io.IOException; public class FileIO { /** * 构建及获取文件名信息 * ...

  4. python 38 线程队列与协程

    目录 1. 线程队列 1.1 先进先出(FIFO) 1.2 后进先出(LIFO)堆栈 1.3 优先级队列 2. 事件event 3. 协程 4. Greenlet 模块 5. Gevent模块 1. ...

  5. python画混淆矩阵(confusion matrix)

    混淆矩阵(Confusion Matrix),是一种在深度学习中常用的辅助工具,可以让你直观地了解你的模型在哪一类样本里面表现得不是很好. 如上图,我们就可以看到,有一个样本原本是0的,却被预测成了1 ...

  6. Java集合框架之Set接口浅析

    Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...

  7. NLP(二十) 利用词向量实现高维词在二维空间的可视化

    准备 Alice in Wonderland数据集可用于单词抽取,结合稠密网络可实现其单词的可视化,这与编码器-解码器架构类似. 代码 from __future__ import print_fun ...

  8. Spring Boot2 系列教程(一)纯 Java 搭建 SSM 项目

    在 Spring Boot 项目中,正常来说是不存在 XML 配置,这是因为 Spring Boot 不推荐使用 XML ,注意,并非不支持,Spring Boot 推荐开发者使用 Java 配置来搭 ...

  9. poj 3468 A Simple Problem with Integers(原来是一道简单的线段树区间修改用来练练splay)

    题目链接:http://poj.org/problem?id=3468 题解:splay功能比线段树强大当然代价就是有些操作比线段树慢,这题用splay实现的比线段树慢上一倍.线段树用lazy标记差不 ...

  10. Codefroces 939 C Convenient For Everybody

    939 C 题意:若干年以后地球会变成n个时区, 为了方便计时, 每个时区的时间从1:00开始到n:00点结束, 现在将要举行一场c赛, 每个时区内都有ai个人参加,并且比赛开始时间不早于当地时间s: ...