美文网首页
MariaDB Galera Cluster

MariaDB Galera Cluster

作者: yuanzicheng | 来源:发表于2017-05-16 18:48 被阅读880次

    MariaDB Galera Cluster是一种同步多主机集群方案,目前它支持XtraDB/ InnoDB存储引擎,为MySQL/MariaDB的高可用架构提供了一种实现基础。

    首先引用《MySQL高可用方案选型参考》这篇文章中关于Gelera优缺点的分析。

    优势:

    • 服务高可用;
    • 数据同步复制(并发复制),几乎无延迟;
    • 多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让galera解决数据冲突;
    • 新节点可以自动部署,部署操作简单;
    • 数据严格一致性,尤其适合电商类应用;
    • 完全兼容MySQL;

    劣势:

    • 只支持InnoDB引擎;
    • 所有表都要有主键;
    • 不支持LOCK TABLE等显式锁操作;
    • 锁冲突、死锁问题相对更多;
    • 不支持XA;
    • 集群吞吐量/性能取决于短板;
    • 新加入节点采用SST时代价高;
    • 存在写扩大问题;
    • 如果并发事务量很大的话,建议采用InfiniBand网络,降低网络延迟;

    接下来动手实践,用虚拟机完成MariaDB Galera Cluster的搭建。

    1.环境准备

    CentOS 7.3
    MariaDB 10.1.23
    host: 192.168.1.103,192.168.1.105,192.168.1.106

    2.修改MariaDB配置文件

    192.168.1.103

    cat << EOF > /etc/my.cnf.d/server.cnf
    [galera]
    # Mandatory settings
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.1.103,192.168.1.105,192.168.1.106"
    wsrep_node_name=node1
    wsrep_node_address=192.168.1.103
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    # Allow server to accept connections on all interfaces.
    # bind-address=0.0.0.0
    # Optional setting
    wsrep_slave_threads=1
    innodb_flush_log_at_trx_commit=0
    EOF
    

    192.168.1.105

    cat << EOF > /etc/my.cnf.d/server.cnf
    [galera]
    # Mandatory settings
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.1.103,192.168.1.105,192.168.1.106"
    wsrep_node_name=node2
    wsrep_node_address=192.168.1.105
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    # Allow server to accept connections on all interfaces.
    # bind-address=0.0.0.0
    # Optional setting
    wsrep_slave_threads=1
    innodb_flush_log_at_trx_commit=0
    EOF
    

    192.168.1.106

    cat << EOF > /etc/my.cnf.d/server.cnf
    [galera]
    # Mandatory settings
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.1.103,192.168.1.105,192.168.1.106"
    wsrep_node_name=node3
    wsrep_node_address=192.168.1.106
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    # Allow server to accept connections on all interfaces.
    # bind-address=0.0.0.0
    # Optional setting
    wsrep_slave_threads=1
    innodb_flush_log_at_trx_commit=0
    EOF
    

    3.初始化集群

    # 在第一个节点上启动galera cluster
    galera_new_cluster
    # 或
    /usr/sbin/mysqld --wsrep-new-cluster --user=root &
    # 其它节点重启mariadb
    systemctl restart mariadb.service
    # 特别提醒:如果其它节点无法启动,需要关闭selinux
    # /etc/selinux/config中,SELINUX=enforcing改为SELINUX=disabled,重启后永久生效
    

    4.查询集群中的节点

    # 查看节点数量
    MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 3     |
    +--------------------+-------+
    # 查看更多信息
    MariaDB [(none)]> SHOW STATUS LIKE 'wsrep%';
    

    5.测试

    • 向任意节点数据库写入数据,无论是对数据库、表还是对表中数据的操作,都会更新到其它节点;
    • 任意使一个节点上的MariaDB下线,集群会自动将该节点从集群中clean up;MariaDB再次上线时,集群又自动将该节点添加进来。

    具体的测试过程就不摆出来了,集群搭建好后这些结果是没有什么悬念的。

    总结:以上只是如何搭建集群,如果要对这种集群方案有深刻的认识和理解,需要对其原理进一步研究!建议阅读官方文档及其它文章。

    参考文章:
    Galera replication for MySQL(包括Galera replication原理)
    MySQL的Galera Cluster配置说明
    如何修復 MariaDB Galera Cluster

    相关文章

      网友评论

          本文标题:MariaDB Galera Cluster

          本文链接:https://www.haomeiwen.com/subject/aaifxxtx.html