MariaDB是MySQL的一个分支,由MySQL的创始人Michael
Widenius主导开发,采用GPL授权许可。
开发这个分支的原因之一是Oracle公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
Galera 是一个MySQL(也支持MariaDB,Percona)
的同步多主集群软件,目前只支持 InnoDB 引擎。
它有什么特点呢?
真正的 multi-master,即所有的节点都可以读写数据库,无主备延迟的问题
自动的节点成员控制,失效的节点自动清除
新节点加入后,数据会自动复制进行同步
真正的并行同步,行级
用户连接集群后,使用跟 MySQL 基本一致。
不会写binlog
关于Galera是如何做到多主的,可以借助这张图来看看
来源:
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_failures
和wsrep_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/