相关文章推荐

MariaDB是MySQL的一个分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可。

开发这个分支的原因之一是Oracle公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

Galera 是一个MySQL(也支持MariaDB,Percona) 的同步多主集群软件,目前只支持 InnoDB 引擎。

它有什么特点呢?

  • 真正的 multi-master,即所有的节点都可以读写数据库,无主备延迟的问题

  • 自动的节点成员控制,失效的节点自动清除

  • 新节点加入后,数据会自动复制进行同步

  • 真正的并行同步,行级

  • 用户连接集群后,使用跟 MySQL 基本一致。

  • 不会写binlog

  • 关于Galera是如何做到多主的,可以借助这张图来看看 image1

    来源: https://blog.csdn.net/weixin_42867972/article/details/84198696

    集群里的节点,实际上可以分为两种角色

  • 协调者:程序直接操作的节点

  • 参与者:被动同步的节点

  • 当你的程序往数据库写入数据时,做为协调者会经历下面4个步骤

  • 接收客户端请求

  • 广播请求到其他参与者(包括自己)

  • 作为参与者进行数据更新

  • 更新失败或者成功返回给客户端

  • 而做为参与者,只要接收协调者的广播请求,配合进行数据的更新即可。

    7.15.1 命令总结

    如何查看 mysqld 的参数选项

    mysqld --verbose --help
    

    获取最新节点

    # 执行后查看日志
    mysqld --wsrep-recover
    # 执行后会输出到屏幕
    /usr/bin/galera_recovery
    # 首次作为发起人,此处为空,不向任何人同步数据。不为空,则向这些机器同步数据。
    # 感觉这里不应该包括自己的ip
    wsrep_cluster_address='gcomm://172.20.20.202,172.20.20.203'
    # 本机的主机名
    wsrep_node_name='rehl-14'
    # 本机的 IP 地址
    wsrep_node_address='192.168.10.14'
    #同步数据时,使用的账号密码,各个集群节点应该一致。
    wsrep_sst_auth=mary:123123
    #同步数据时使用的组件
    wsrep_sst_method=rsync
    

    更多的配置详情,可以查看

    7.15.3 启动方法

    主要有两种启动方法:

  • mysqld

  • mysqld_safe

  • mysqld_safe相当于多了一个守护进程,mysqld挂了会自动把mysqld进程拉起来

  • 可以读取的配置部分[mysqld],[server],[myslqd_safe],为了兼容mysql_safe也会读取[safe_mysqld]中的配

  • 调用的mysqld是可以在[mysqld_safe]中用-mysqld, –mysqld-version指定

  • $ mysqld_safe --defaluts-file=/etc/mysql/my.cnf &
    $ mysqld --defaults-file=/etc/mysql/my.cnf &
    

    启动集群,4567 是wsrep使用的默认端口。

    $ /usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &
    $service mysql start --wsrep_cluster_address=gcomm://
    是什么关系?有什么区别呢?

  • mysqld_safe是服务端工具,用于启动mysqld,并且是mysqld的守护进程,mysqld_safe加&在后台运行$BASEDIR/bin/mysqld_safe

  • 因为mysqld_safe是mysqld的守护进程,所以mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。

  • 直接使用mysqld_safe启动mysqld时,mysqld_safe可以使用参数选项见mysqld_safe –help,此时可以使用其他配置文件,相当于mysqld_safe把参数传递给mysqld

  • mysql.server脚本其实也是调用mysqld_safe脚本去启动MySQL服务器的,但此时mysqld_safe不能使用参数选项即不能mysqld_safe –defaults-file这样的模式,此时只能使用默认的/etc/my.cnf配置文件,就算是ps -ef|grep mysql显式看到的信息也只是parse_server_arguments函数指定的参数,也是来自my.cnf,相当于mysql.server把my.cnf中的参数传递给mysqld_safe,mysqld_safe再传递给mysqld,如下看到的–datadir也是来自my.cnf

  • mysqld_safe指定的–defaults-file会覆盖my.cnf中的配置

    ./bin/mysqld_safe --defaults-file=/etc/my.cnf2
    
  • mysqld_safe指定的–datadir参数会覆盖my.cnf中的配置

    ./bin/mysqld_safe --datadir=/mysql/mysql57/data2 &
    

    mysqld_safe中这条语句they are added to mysqld command line to override settings from my.cnf

    它们被添加到mysqld命令行以覆盖my.cnf中的设置

  • mysqld直接启动使用–datadi参数,也会覆盖my.cnf中的配置

    &BASEDIR/bin/mysqld –datadir=/mysql/mysql57/data2 –user=root &

  • mysqld_safe多长时间检测一次mysqld呢,即多长时间去把mysqld拉起

    这是linux的机制,不是mysql的机制,因为mysqld_safe是父进程,mysqld是子进程,一旦子进程奔溃,linux信号机制下父进程马上就知道自己名下的子进程出问题了,会立即重新fork出一个新的子进程

  • mysqld的端口默认3306,mysqld_safe没有端口

  • 7.15.5 查看集群状态

    使用 mysql status

    show status like '%wsrep%';
    

    选几个比较重要的说下,监测状态说明

  • 集群完整性检查wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群. wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值. wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接. wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况

  • wsrep_incoming_addresses:列出了构成当前集群所有的节点

  • 节点状态检查wsrep_ready:该值为ON,则说明可以接受SQL负载。如果为Off,则需要检查wsrep_connected. wsrep_connected:如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志) wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因。

  • 复制健康检查wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止,可优化wsrep_slave_threads的值来改善. wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多。 wsrep_flow_control_sent:表示该节点已经停止复制了多少次. wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.

  • wsrep_flow_control_sent 和 wsrep_local_recv_queue_avg 的值越高,该节点的速度相对来说会更慢,所以这两个值应尽量低。

  • 检测慢网络问题

    wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶

  • 冲突或死锁的数目

    wsrep_last_committed:最后提交的事务数目

    wsrep_local_cert_failureswsrep_local_bf_aborts:回滚,检测到的冲突数目

  • https://blog.csdn.net/weixin_42867972/article/details/84198696

  • http://www.360doc.com/content/13/0817/15/834950_307820923.shtml

  • http://blog.itpub.net/30126024/viewspace-2221483/

  •  
    推荐文章