MySQL复制: Galera

MySQL复制: Galera

mysql 主从复制

前言

之前介绍了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在网络拓扑所处的位置 

下载 (2).png

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源

[root@node1 ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y
[root@node2 ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y
[root@node3 ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y

配置步骤

首先配置node1

[root@node1 ~]# 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一定要改

启动服务

首先我们要在一个节点初始化集群

[root@node1 ~]# service mysql start --wsrep-new-cluster   #注意:这里是mysql不是mysqld
Starting 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 <info@codership.com>               |
| wsrep_provider_version     | 23.2.6(r152)                                    |
| wsrep_ready                | ON                                              |
+----------------------------+-------------------------------------------------+
40 rows in set (0.00 sec)



#完成

总结

怎么样,是不是很简单的就配置了一个高可用的MySQL复制集群, 我们在前端加上一个负载均衡器就可以负载均衡MySQL

作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~ 
作者: AnyISaIln QQ: 1449472454 
感谢: MageEdu

原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:http://www.178linux.com/15709

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-04-28
下一篇 2016-04-29

相关推荐

  • 文本处理三剑客之grep

    文本处理三剑客之grep 正则表达式(regex) 文本处理工具 grep egrep 试验环境:CentOS 7.2 正则表达式 Linux的哲学之一“一切皆文件”,学习Linux应得掌握其基本的文本处理工具,这些工具主要包括: 文件内容:less和cat 文件截取:head和tail 文件抽取:cut 关键字搜索:grep 正则表达式是计算机科…

    Linux干货 2016-08-07
  • 磁盘管理

    设备类型分为字符设备和块设备 主设备号用来标识设备类型,次设备号标识同一类型下的不同设备 硬盘设备命名: scsi,sata,sas,usb:/dev/sd 不同设备/dev/sda  /dev/sdb 同一设备不同分区:/dev/sda1,/dev/sdb2…… 硬盘: 一片磁盘的一面叫做盘面,一张盘片有两个盘面 每个盘面有一个磁头,最多有256…

    Linux干货 2016-08-30
  • 搜索引擎-倒排索引基础知识

    1.单词——文档矩阵        单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。          …

    Linux干货 2015-12-10
  • 第四周

    第四周 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限。 [root@node1 ~]# cp -r /etc/skel/ /home/tuser1 [root@node1 ~]# chmod -R go= /home/tuser1 [root@node1 ~]# ls -…

    Linux干货 2017-07-26
  • 磁盘及文件系统管理

    磁盘管理     MBR:master boot record 主引导记录。位于磁盘的0磁道0扇区共512字节,独立于操作系统之外的。512字节的划分               …

    Linux干货 2016-08-25
  • 手动编译内核+busybox+dropbear+nginx

    我们需要先在宿主机上添加一个磁盘,然后,把这个磁盘做好分区和文件系统: fdisk /dev/sdb 创建第一个分区: n p 1 +512M 创建第二个分区: n p 2 +10G 保存退出: w 为分区提供文件系统: kpartx /dev/sdb 为分区提供文件系统: mke2fs -t ext4 /dev/sd…

    Linux干货 2015-09-24