• MariaDB Galera Cluster 集群介绍

  • MariaDB Galera Cluster(下文简称MGC集群),是一套在MySQL innodb存储引擎上面实现多主、数据实时同步以及强一致性的关系存储架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去,在数据方面完全兼容 MariaDB 和 MySQL。

  • MGC 是基于 Galera 协议的高可用方案:
    Galera 是 Codership 提供的多主数据同步复制机制,可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据一致性。
  • MGC 集群是由节点组成的,推荐配置至少 3 个节点,但是也可以运行在 2 个节点上。
  • 每个节点都包含完整的数据副本。
  • MGC 最大的优势:强一致性、无同步延迟

  • MGC 的优点:

        1、同步复制 Synchronous replication

        2、Active-active multi-master 拓扑逻辑

        3、可对集群中任一节点进行数据读写

        4、自动成员控制,故障节点自动从集群中移除

        5、自动节点加入

        6、真正并行的复制,基于行级

        7、直接客户端连接,原生的 MySQL 接口

        8、每个节点都包含完整的数据副本

        9、多台数据库中数据同步由 wsrep 接口实现

  • MGC 的缺点:

    1、目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制

        2、DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.

        3、在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…

        4、查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。

        5、允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。

        6、由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

        7、XA事务不支持,由于在提交上可能回滚。

        8、整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

        9、集群节点建议最少3个。

        10、如果DDL语句有问题将破坏集群。

  • MGC 原理描述
    MGC 会使用大概 4 个端口号
    3306:数据库对外服务的端口号
    4444:请求 SST。 SST: 指数据镜象传输端口,使用方法 xtrabackup , rsync ,mysqldump
    4567: 组成员之间进行沟通的一个端口号
    4568: 传输 IST 用的。相对于 SST 来说的一个增量。
    PXC 的架构示意图
  • 部署 MGC 高可用集群

  • 集群 统一使用 CentOS 7.9
     主  机  名 IP 地 址 版  本
    mysql1 192.168.1.231 MariaDB 10.7
    mysql2 192.168.1.232 MariaDB 10.7
    mysql3 192.168.1.233 MariaDB 10.7
  • 首先配置好主机名、静态IP、关闭 firewalld 防火墙、SElinux、交换分区 swap、修改内核参数、配置阿里云 repo 源、配置时间同步等等

  • 安装 MGC 集群
    Installing MariaDB with yum/dnf - MariaDB Knowledge Base

  • MGC 属于 Multi-master Replication(多主复制)。
  • 多主复制意味着支持对任意节点的读写,数据会同步复制到其他节点。
  • 配置 yum 源

  • 分别在 mysql1 、mysql2 和 mysql3 上做如下操作:
    vim /etc/yum.repos.d/MariaDB.repo

    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.7/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1或者使用国内yum源
    [mariadb]
    name=mariadb
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.7/centos7-amd64/
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    


    导入 KEY
    rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    #安装 qpress
    yum -y install https://repo.percona.com/yum/release/7/RPMS/x86_64/qpress-11-1.el7.x86_64.rpm

    yum -y install MariaDB-server galera-4 MariaDB-client MariaDB-shared MariaDB-backup MariaDB-common  MariaDB-server-debuginfo MariaDB-client-debuginfo MariaDB-shared-debuginfo MariaDB-backup-debuginfo MariaDB-common-debuginfo

  • 修改数据库 root 密码

  • 三个节点都安装完软件包之后,接下来只对第一个节点 mysql1 进行修改密码操作。

    #先启动 maridbd服务。
    systemctl start mysqld

    使用空密码登录 MySQL
    mysql -u root -p
    更改 root 用户的密码,之后退出。
    mysql> alter user 'root'@'localhost' identified by 'NEWPASSWORD';
    mysql> exit
    关闭 MySQL 服务。
    systemctl stop mysqld

  • 注意:以上修改密码操作只需在第一个节点进行即可。配置好第二个和第三个节点,启动服务操作后会自动复制到其他节点中。

  • mysql2 和 mysql3 上的 mysql 服务,现在不需要启动。

  • 配置 MGC 集群第 1 个节点
    配置第一个节点 mysql1 的 /etc/my.cnf.d/server.cnf
    vim /etc/my.cnf.d/server.cnf

    [client]
    socket=/var/lib/mysql/mysql.sock[mysqld]
    server-id=1
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    binlog_expire_logs_seconds=604800
    skip-external-locking
    skip-name-resolve
    max_connections=5000
    connect_timeout=5
    wait_timeout=600
    max_allowed_packet=16M
    thread_cache_size=128
    sort_buffer_size=4M
    bulk_insert_buffer_size=16M
    tmp_table_size=32M
    max_heap_table_size=32Mcharacter-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'wsrep_causal_reads=ON
    wsrep_provider_options="gcache.size=128M"
    wsrep_certify_nonPK=ON
    log-bin=/data/mariadb/data/mysql-bin
    log_slave_updates=1
    query_cache_size=0
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
    wsrep_cluster_name=MGC-Cluster
    wsrep_cluster_address=gcomm://192.168.1.231,192.168.1.232,192.168.1.233
    wsrep_node_name=mysql1
    wsrep_node_address=192.168.1.231
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_method=rsync
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    wsrep_slave_threads=8
    innodb_flush_log_at_trx_commit=0
    innodb_buffer_pool_size=500M
    

    /etc/my.cnf.d/server.cnf 增加的参数说明:
    # 集群通讯地址
    wsrep_cluster_address=gcomm://192.168.1.231,192.168.1.232,192.168.1.233
    # 本节点的地址
    wsrep_node_address=192.168.1.231
    # 本节点的名称
    wsrep_node_name= mysql1

    这些内容也同样对 mysql2.和 mysql3 进行配置,只有两个参数 wsrep_node_name, wsrep_node_address 配置的值需要修改一下

  • 扩展:主配置文件 my.cnf 其他参数说明
    wsrep_provider #指定 Galera 库的路径。
    wsrep_cluster_name #指定集群的逻辑名称,集群内的所有节点,这个名称必须一致。
    wsrep_cluster_address #指定集群内节点的 IP 地址,建议将集群节点都配上。
    wsrep_node_name #指定单个节点的逻辑名称,如果没有指定,将使用 hostname 作为逻辑名称。
    wsrep_node_address #指定此特定节点的 IP 地址。
    wsrep_sst_method #默认的使用 Percona Xtrabackup 进行 State Snapshot Transfer 
    (SST),强烈建议使用 wsrep_sst_method=xtrabackup-v2
    binlog_format #Galera 只支持 row-level replication,默认设置为 binlog_format=ROW。
    innodb_autoinc_lock_mode #Galera 只支持 lock mode 为 2 的 InnoDB 引擎,默认设置为 innodb_autoinc_lock_mode=2。

  • 引导 GRC 集群启动并将其他节点加到集群中

  • 1、在第一个节点上引导 GRC 集群启动
    在第一个节点 mysql1 使用如下命令引导 PXC 集群启动
    galera_new_cluster

    为确保初始化完成,可以使用如下命令查看
    登录 MySQL
    mysql -u root -p
    mysql> show status like 'wsrep%';

  • 可以看到集群数量是 1,本节点为 Synced 状态,表示连接成功,并且准备好进行 write-set replication。

  • 注意:所有其他节点的数据和配置都会被第一个节点的数据覆盖,不要同时加入多个节点,避免数据或网络开销过大。等一个节点加入成功后,再加入另一个新节点。

  • 启动第二个节点

  • systemctl start mysqld
    启动完成后,mysql2 会接到 mysql1的数据,可以使用如下命令查看状态
    mysql -u root -p
    登录到 MySQL 后,输入如下命令
    mysql> show status like 'wsrep%';

    可以看到 wsrep_cluster_size 的值是 2 表示集群已经有 2 个节点了。
    wsrep_local_state_comment 的值是 Synced 表示已经同步了。

  • 注意 如果 wsrep_local_state_comment 的状态是 Joiner,表示正在同步,请不要启动第三个节点的服务。
  • 启动第三个节点

  • 注意:确认好第二个节点的状态为 Synced 后,再启动第三个节点。
    步骤与启动第二个节点相同
    systemctl start mysqld
    启动完成后,mysql3 会接到集群,可以使用如下命令查看状态
    mysql -u root -p
    登录到 MySQL 后,输入如下命令
    mysql> show status like 'wsrep%';

  • 测试数据同步

  • 在 mysql3 上删除 test 库
    drop database test;

  • 模拟故障

  • 测试 单点故障

  • 首先停止 mysql3
  • 在 mysql2 上观察

  •  停止 mysql1

  • 测试 全部故障

  • 这时候直接 start 发现无法启动

  • 因为是同时关闭,seqno 号无法提供有效的信息,无从判断最后的有效节点

  • 在任意节点

  • 模拟 2台故障

  • MGC 集群只有有任意节点存活,其他节点即可加入。

  • seqno 选择数值大的优先启动

  • 全新节点加入

  • 配置好主机名、静态IP、关闭 firewalld 防火墙、SElinux、交换分区 swap、修改内核参数、配置阿里云 repo 源、配置时间同步等等
  • 所有节点都要添加 新节点的 IP和主机名
  • 准备工作做完后,在新节点安装 MGC
  • yum -y install MariaDB-server  MariaDB-Galera-server galera-4 MariaDB-client MariaDB-shared MariaDB-backup MariaDB-common MariaDB-server-debuginfo MariaDB-client-debuginfo MariaDB-shared-debuginfo MariaDB-backup-debuginfo MariaDB-common-debuginfo
  • 启动 mysql

  • 加入 slave 节点
  • 创建 slave 复制用户

垣份手游 娱乐平台-手游公益服

Linux 搭建 MariaDB Galera Cluster 高可用集群相关推荐

  1. Linux HA Cluster高可用集群之HeartBeat2

    一.阐述Linux HA Cluster的使用背景: 1.1 高可用集群定义: 高可用集群全称:High Availability Cluster,简单的说,集群就是一组高可扩展.高可用性.高性价比的 ...

  2. kubeadm一键搭建kubernetes1.14.1高可用集群

    一,基础环境配置 环境 版本 debian09 Debian 4.9.144-3 (2019-02-02) x86_64 GNU/Linux kubectl 1.14.1 kubeadmin 1.14 ...

  3. mariadb galera Cluster 多主集群安装实录

    1: 创建MariaDB.repo #vim /etc/yum.repos.d/MariaDB.repo # MariaDB 10.0 CentOS repository list - created ...

  4. 采用 redis主从 + 哨兵(sentinel) + vip漂移搭建一套redis高可用集群

    一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份( ...

  5. Ansible搭建hadoop3.1.3高可用集群

    一.节点信息 内核版本:3.10.0-1062.el7.x86_64 系统版本:Red Hat Enterprise Linux Server release 7.7 (Maipo) 节点 ip 内存 ...

  6. 采用ipvsadm管理工具,及Keepalived软件检测服务器的状态,搭建负载均衡的高可用集群

    前言 ipvsadm是Linux虚拟服务器的管理命令,是用于设置.维护和检查Linux内核中虚拟服务器列表的命令.Linux虚拟服务器可用于基于两个或更多个节点的集群构建可扩展的网络服务.群集的活动节 ...

  7. MHA+Cetus+Mysql搭建读写分离的高可用集群

    架构图 Centos配置 免密登录 #先修改hostname(也会影响relay-log的名字,如果主从复制已经开始了,再修改hostname会导致主从复制断开),避免后续ssh key相互覆盖 ho ...

  8. rhce linux下如何配置lvs高可用集群

    LVS 功能 : 有实现三种IP负载均衡技术和八种连接调度算法的IPVS软件.在IPVS内部实现上,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相关的ICMP消息(有些商品化的系统反而 ...

  9. 手动搭建k8s-1.16.6高可用集群之部署worker节点-部署kubelet组件

    kubelet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如 exec.run.logs 等. kubelet 启动时自动向 ...

最新文章

  1. jvm:虚方法与非虚方法
  2. pandas 合并数据
  3. asp按钮跳转页面代码_重磅更新!全新Web编辑页面、编辑规则快速跳转、状态栏变色、富文本再次升级!...
  4. 五大常用经典算法—回溯算法
  5. java instanceof 动态_Java关键字instanceof用法及实现策略
  6. Java提高篇 —— Java关键字之final的几种用法
  7. Python编程进阶,Python如何实现多进程?
  8. unset MAILCHECK
  9. 2017年闰秒linux_2017年Linux专业人员的4个热门技能
  10. xss攻击和csrf攻击
  11. 情人节,给你们发点福利。
  12. debug使用方法(概念篇)
  13. MATLAB 粒子群算法,例题与常用模版
  14. Unicode与GB18030、GBK、GB2312
  15. 2022年PC推荐-组装机及品牌机 2022年8月16日(持续更新)
  16. python的numpy库安装_Python库之numpy库的安装教程
  17. 英语绕口令(转)[Blog synchronous]
  18. 贝叶斯学派:先验分布、后验分布、共轭分布、共轭先验分布
  19. 利用迭代公式求平方根。
  20. Intel Turbo Boost (睿频)技术简介

热门文章

  1. 糯米团—重制“iPhone团购信息客户端”(二)
  2. Java面向对象 --- 吃货联盟订餐系统(完整版)
  3. 面试结束时要说的那句话
  4. 深入探讨:标签(Tag)的各种设计方案
  5. CSS3学习(五):display 属性
  6. 力扣leetcode之Java刷题121买卖股票的最佳时机
  7. 计量经济学之回归分析学习笔记(均值回归、分位数回归、岭回归、Lasso回归、ENet回归)——基于R(一)
  8. Maven中央仓库地址配置大全
  9. Linux 信号signal\sigaction
  10. Android中Listview(七)--排序ListView