Mariadb galera 集群
部署galera 多主架构 (galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性。)
环境准备:三台服务器
master:192.168.206.3
master1:192.168.206.5
master2:192.168.206.6
yum配置
操作系统:CentOS7.3
数据库版本:MariaDB-10.3.7
1>yum配置,(三端数据库信息保持一致)
[mariadb]
name=MariaDB
baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
2>关闭防火墙
3>三个主机都要互相解析
vim /etc/hosts
4>主节点编辑配置文件
vim /etc/my.cnf.d/server.cnf
在 [ galera ] 下面
wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so #galera的库文件的地址
wsrep_cluster_address="gcomm://192.168.206.3,192.168.206.5,192.168.206.6" #各节点的ip
wsrep_node_name=node1 #节点主机名
wsrep_node_address=192.168.206.3 #节点ip
binlog_format=row #二进制日志设置为行模式 row (安全性最高,性能最低)
default_storage_engine=InnoDB #使用的默认引擎 innoDB 支持事务
innodb_autoinc_lock_mode=2 #2为性能最好
wsrep_slave_threads=1 #并发线程数
innodb_flush_log_at_trx_commit=0 #0.log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在
事务提交的时候,不会主动触发写入磁盘的操作,#1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该 模式为系统默 认。
#2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同
时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作
innodb_buffer_pool_size=120M #设置缓存池大小
wsrep_sst_method=rsync #远程同步
wsrep_causal_reads=ON #避免各个节点的数据不一致,这种情况需要等待全同步复制 将此文件复制到master1、master2,注意要把 wsrep_node_name 和 wsrep_node_address 改成相应 节点的 hostname 和 ip。
注:graler 集群最好至少三个,两个的话。如果出现网络波动可能会出现脑裂;
三端都需要配置
5>第一次启动需要初始化
&1
mysqld_safe--wsrep_cluster_address=gcomm://192.168.206.3,192.168.206.5,192.168.206.6
这里会hang住 ,等他执行一段时间就好,
&2 执行 /bin/galera_new_cluster
6>另外两端启动数据库
service mariadb restart
7>查看集群状态(进程和端口)(查看wsrep 状态也可以)
确保 wsrep 端口 :4567 与 mariadb端口: 3306 打开
&show status like ‘wsrep%'
8>测试
&master端
&master1端
&master2端
同步成功!
注: 若三台主机 关机了,再起就起不来了。
执行以下操作
vim /var/lib/mysql/grastate.dat
把safe_to_bootstrap更改为1
# GALERA saved state
version: 2.1 uuid: a393feef-f639-11e8-9b89-4e75f9b8fb0f
seqno: -1
safe_to_bootstrap: 1