MySQL复制: Galera
mysql
主从复制
大纲
- MySQL复制: Galera
- 前言
- Galera Replication简介
- MariaDB-Galera-Server
- 环境部署
- 配置步骤
- 总结
前言
之前介绍了
MySQL
复制的各种解决方案, 但是我个人还是感觉Galera
最好用也最实用, 什么是Galera
, 它强大在哪里, 这篇文章就带你认识这个强大的工具
Galera Replication简介
Galera Repplication
- Galera复制发生在事务提交时, 通过广播事务写集群应用
- 客户端直接连接到 Galera Cluster DMBS就和连接到原生的DBMS一样
- wsrep API, 定义了Galera和DBMS之间的接口
Galera Cluster的特点
Galera是为MySQL提供的一个真正意义上的多主(M/M)集群, Galera Cluster是一个易于使用的高可用解决方案, 可提高系统的平均无故障时间, 并且提供数据的可靠性和集群的可扩展性
Galera Cluster的强大功能
- 同步复制
- 多主模型
- 可以在任意节点读写
- 自动控制各个节点的升级和降级
- 行级的并行控制
- 规模较小的客户端延迟
Galera-Cluster在网络拓扑所处的位置
MariaDB-Galera-Server
好吧、这里和标题不符合, 因为我目前只有
MariaDB-Galera
的包, 所以有使用MariaDB-5.5
来做实验了, 其实配置过程和MySQL-5.5
并无区别还有要注意的一点: Galera集群不需要提前配置MySQL复制, 并且也不需要基于MySQL复制
安装
MariaDB-Galear-Server
前, 不能安装MariaDB, 其实MariaDB-Gelera算是MariaDB的一个分支
环境部署
实验环境
node1.anyisalin.com IP_addr=172.16.1.2
node2.anyisalin.com IP_addr=172.16.1.3
node3.anyisalin.com IP_addr=172.16.1.4
安装Galera-Cluster
我这里通过官方下载下来的rpm包做成了一个yum源来安装, 大家安装也可以指向官方的yum源
[[email protected] ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y[[email protected] ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y[[email protected] ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y
配置步骤
首先配置node1
[[email protected] ~]# vim /etc/my.cnf.d/server.cnf #修改配置文件mysqld段为如下
[mysqld] wsrep_provider = /usr/lib64/galera/libgalera_smm.so wsrep_cluster_address = "gcomm://172.16.1.2,172.16.1.3,172.16.1.4" wsrep_cluster_name = ‘mycluster‘ wsrep_node_name = ‘node1‘ wsrep_node_address = ‘172.16.1.2‘ binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 server_id=1
配置node2
[root@node2 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld] wsrep_provider = /usr/lib64/galera/libgalera_smm.so wsrep_cluster_address = "gcomm://172.16.1.2,172.16.1.3,172.16.1.4" wsrep_cluster_name = ‘mycluster‘ wsrep_node_name = ‘node2‘ #注意修改 wsrep_node_address = ‘172.16.1.3‘ #这里改为自己的IP binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 server_id=2 #server_id一定要改
配置node3
[root@node2 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld] wsrep_provider = /usr/lib64/galera/libgalera_smm.so wsrep_cluster_address = "gcomm://172.16.1.2,172.16.1.3,172.16.1.4" wsrep_cluster_name = ‘mycluster‘ wsrep_node_name = ‘node3‘ #注意修改 wsrep_node_address = ‘172.16.1.4‘ #这里改为自己的IP binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 server_id=3 #server_id一定要改
启动服务
首先我们要在一个节点初始化集群
[[email protected] ~]# service mysql start --wsrep-new-cluster #注意:这里是mysql不是mysqldStarting MySQL.... [ OK ]
依次在其他节点启动
[root@node2 ~]# service mysql start #可能有点慢, 耐心等待Starting MySQL............................SST in progress, setting sleep higher.
[root@node3 ~]# service mysql start #可能有点慢, 耐心等待Starting MySQL......SST in progress, setting sleep higher.
测试同步
[root@node1 ~]# mysql #这里是node1
MariaDB [(none)]> CREATE DATABASE galeradb; #在node1上创建数据库Query OK, 1 row affected (0.00 sec)
[root@node2 ~]# mysql #这里是node1
MariaDB [(none)]> SHOW DATABASES; #在node2上能够看到node1创建的数据库+--------------------+| Database |+--------------------+| information_schema || galeradb || mysql || performance_schema || test |+--------------------+5 rows in set (0.00 sec)
MariaDB [(none)]> use galeradb; #在node2上创建表Database changed
MariaDB [galeradb]> CREATE TABLE t1 (id int auto_increment primary key, name char(4));Query OK, 0 rows affected (0.02 sec)
[root@node3 ~]# mysql #这里是node1
MariaDB [(none)]> USE galeradb;Database changed
MariaDB [galeradb]> DESC t1; #在node3能够看到node2创建的表+-------+---------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | char(4) | YES | | NULL | |+-------+---------+------+-----+---------+----------------+2 rows in set (0.00 sec)
MariaDB [galeradb]> SHOW STATUS LIKE ‘wsrep%‘; #通过这个命令可以看到galera集群的相关信息+----------------------------+-------------------------------------------------+| Variable_name | Value |+----------------------------+-------------------------------------------------+| wsrep_local_state_uuid | 57ba6356-0d44-11e6-8ed8-2fa7f726428a || wsrep_protocol_version | 4 || wsrep_last_committed | 2 || wsrep_replicated | 0 || wsrep_replicated_bytes | 0 || wsrep_received | 5 || wsrep_received_bytes | 630 || wsrep_local_commits | 0 || wsrep_local_cert_failures | 0 || wsrep_local_bf_aborts | 0 || wsrep_local_replays | 0 || wsrep_local_send_queue | 0 || wsrep_local_send_queue_avg | 0.000000 || wsrep_local_recv_queue | 0 || wsrep_local_recv_queue_avg | 0.000000 || wsrep_flow_control_paused | 0.000000 || wsrep_flow_control_sent | 0 || wsrep_flow_control_recv | 0 || wsrep_cert_deps_distance | 1.000000 || wsrep_apply_oooe | 0.000000 || wsrep_apply_oool | 0.000000 || wsrep_apply_window | 0.000000 || wsrep_commit_oooe | 0.000000 || wsrep_commit_oool | 0.000000 || wsrep_commit_window | 0.000000 || wsrep_local_state | 4 || wsrep_local_state_comment | Synced || wsrep_cert_index_size | 3 || wsrep_causal_reads | 0 || wsrep_incoming_addresses | 172.16.1.2:3306,172.16.1.3:3306,172.16.1.4:3306 || wsrep_cluster_conf_id | 3 || wsrep_cluster_size | 3 || wsrep_cluster_state_uuid | 57ba6356-0d44-11e6-8ed8-2fa7f726428a || wsrep_cluster_status | Primary || wsrep_connected | ON || wsrep_local_index | 2 || wsrep_provider_name | Galera || wsrep_provider_vendor | Codership Oy <[email protected]> || wsrep_provider_version | 23.2.6(r152) || wsrep_ready | ON |+----------------------------+-------------------------------------------------+40 rows in set (0.00 sec)
#完成
总结
怎么样,是不是很简单的就配置了一个高可用的MySQL复制集群, 我们在前端加上一个负载均衡器就可以负载均衡
MySQL
了作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感谢: MageEdu