前言

先来了解下它的身世,Galera Cluster是Codership公司开发的一套免费开源的高可用方案

官网为http://galeracluster.com。Galera Cluster即为安装了Galera的Mariadb集群(本文只介绍Mariadb Garela集群)

其本身具有multi-master特性,支持多点写入

Galera Cluster的三个(或多个)节点是对等关系,每个节点均支持写入,集群内部会保证写入数据的一致性与完整性

下面是这个架构的一些特性:

• 真正的多主集群,Active-Active架构;

• 同步复制,没有复制延迟;

• 多线程复制;

• 没有主从切换操作,无需使用虚IP;

• 热备份,单个节点故障期间不会影响数据库业务;

• 支持节点自动加入,无需手动拷贝数据;

• 支持InnoDB存储引擎;

• 对应用程序透明,原生MySQL接口;

• 无需做读写分离;

• 部署使用简单。

安装部署

环境说明

系统:centos7.7 galera1:192.168.191.128 galera2:192.168.191.129 galera3:192.168.191.130

安装操作

1)上传带有galera补丁的数据库包(下载地址,提取码:8888 )

##三台节点同时进行以下操作
[root@galera1 ~]# yum -y install lrzsz vim #工具包
[root@galera1 ~]# mkdir galera
[root@galera1 ~]# cd galera

2)哦噢,对了要把系统默认关于数据库的一切全部卸载

#三台节点同时进行以下操作
[root@galera1 galera]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@galera1 galera]# rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps #强制卸载

3)关闭防火墙

##三台节点同时进行以下操作
[root@galera1 galera]# setenforce 0;systemctl stop firewalld

4)上才艺,要安装咯要安装咯!

##三台节点同时进行以下操作
[root@galera1 galera]# yum -y install mysql-wsrep-client-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-common-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-devel-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-compat-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-server-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-test-5.7-5.7.31-25.23.el7.x86_64.rpm #先安依赖 [root@galera1 galera]# yum -y install galera-3-25.3.31-1.el7.x86_64.rpm mysql-wsrep-5.7-5.7.31-25.23.el7.x86_64.rpm ##这是有galera补丁的数据库

5)先启动数据库,给节点三兄弟配个集群通信账号(重点哦~)

##三台节点同时进行以下操作
[root@galera1 galera]# systemctl start mysqld
[root@galera1 galera]# systemctl status mysqld #状态running启动成功
[root@galera1 galera]# new=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'`;mysqladmin -p"$new" password "ghy@6666" #设置数据库root的密码
[root@galera1 galera]# mysql -uroot -pghy@6666 #登录数据库
mysql> grant all on *.* to ghy@"%" identified by 'ghy@6666'; #授权创建数据库账户
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; ##刷新权限
Query OK, 0 rows affected (0.00 sec)

6)修改数据库配置文件,创建galera集群(这个是真的重点哦很容易出错)

###第一台节点先配置
[root@galera1 galera]# vim /etc/my.cnf #最下面添加
server-id=1 #三个节点id不能一样
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2 wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera' #集群名称
wsrep_cluster_address='gcomm://' #第一个节点配置时暂时不加入ip,表示新创建集群的意思,一但加ip会报配置文件错误。需要在后续集群创建完成加入各个节点后在回来填写ip
wsrep_node_name='galera1' #集群中这个节点的名称不不能与其他节点重复
wsrep_node_address='192.168.191.128'
wsrep_sst_auth=ghy:"ghy@6666"
wsrep_sst_method=rsync #注意没有rsync需要yum下载
[root@galera1 galera]# systemctl restart mysqld ##重启数据库
[root@galera1 galera]# mysql -uroot -pghy@6666
mysql> show status like 'wsrep_incoming%'; #galera集群创建成功目前只有一个节点
+--------------------------+----------------------+
| Variable_name | Value |
+--------------------------+----------------------+
| wsrep_incoming_addresses | 192.168.191.128:3306 |
+--------------------------+----------------------+
1 row in set (0.01 sec) ###第二台节点配置如下
[root@galera2 galera]# vim /etc/my.cnf
server-id=2
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2 wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.130' ##这里的ip要写第一台节点的ip,作用用于引导此节点加入galera集群。如果空着不写表示新创建集群
wsrep_node_name='galera2'
wsrep_node_address='192.168.191.129'
wsrep_sst_auth=ghy:"ghy@6666"
wsrep_sst_method=rsync
[root@galera2 galera]# systemctl restart mysqld
[root@galera2 galera]# mysql -uroot -pghy@6666
mysql> show status like 'wsrep_incoming%'; ##此时galera集群中已加入此节点
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306 |
+--------------------------+-------------------------------------------+
1 row in set (0.01 sec) ###第三台节点配置如下
[root@galera3 galera]# vim /etc/my.cnf
server-id=3
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2 wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.129' ##引导地址写前两个节点的ip
wsrep_node_name='galera3'
wsrep_node_address='192.168.191.130'
wsrep_sst_auth=ghy:"ghy@6666"
wsrep_sst_method=rsync
[root@galera3 galera]# systemctl restart mysqld
[root@galera3 galera]# mysql -uroot -pghy@6666
mysql> show status like 'wsrep_incoming%'; ##此时三台节点已加入
+--------------------------+----------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
+--------------------------+----------------------------------------------------------------+
1 row in set (0.00 sec) mysql> show status like '%wsrep%';
+------------------------------+----------------------------------------------------------+
| Variable_name | Value |
+------------------------------+----------------------------------------------------------+
| wsrep_local_state_uuid | e142ca9d-497f-11eb-845a-ee955e84fe5b |
| wsrep_protocol_version | 7 |
| wsrep_last_committed | 47297 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_received | 216 |
| wsrep_received_bytes | 786352 |
| wsrep_local_commits | 0 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_send_queue_avg | 0.000000 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_max | 61 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_recv_queue_avg | 8.648148 |
| wsrep_local_cached_downto | 47086 |
| wsrep_flow_control_paused_ns | 1012209 |
| wsrep_flow_control_paused | 0.000010 |
| wsrep_flow_control_sent | 0 |
| wsrep_flow_control_recv | 1 |
| wsrep_cert_deps_distance | 26.429245 |
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 1.000000 |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 1.000000 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_cert_index_size | 148 |
| wsrep_causal_reads | 0 |
| wsrep_cert_interval | 2.580189 |
| wsrep_incoming_addresses | vm10-11-0-131:3306,vm10-11-0-133:3306,vm10-11-0-132:3306 |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 0.000684446/0.000684446/0.000684446/0/1 |
| wsrep_evs_state | OPERATIONAL |
| wsrep_gcomm_uuid | 86abfa4d-49b8-11eb-a0d7-b7a96cc64b5d |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | e142ca9d-497f-11eb-845a-ee955e84fe5b |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 2 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 3.12(r9921e73) |
| wsrep_ready | ON |
+------------------------------+----------------------------------------------------------+
56 rows in set (0.01 sec) 监测状态说明
1. 集群完整性检查:
wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.
wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.
wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.
wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况.
2. 节点状态检查:
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,则可以从该项查看原因.
3. 复制健康检查:
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瓶颈的预兆. ########最后我们在把三个节点的引导地址配置完全
只改一行,三台节点依次修改,改一台节点需重启一次数据库服务,不能等全部改完一起重启,切记!
[root@galera1 galera]# vim /etc/my.cnf
wsrep_cluster_address='gcomm://192.168.191.129,192.168.191.130,192.168.191.128'
[root@galera1 galera]# systemctl restart mysqld mysql> show status like 'wsrep_incoming%'; #仍然为三节点
+--------------------------+----------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
+--------------------------+----------------------------------------------------------------+
1 row in set (0.35 sec)

7)测试集群

###这里我简单的测试下,实际情况我已测试过多边。此处只做演示
[root@galera1 galera]# mysql -uroot -pghy@6666 #节点1
mysql> create database hya;
Query OK, 1 row affected (0.01 sec)
[root@galera2 galera]# mysql -uroot -pghy@6666 #节点2
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hya |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec) [root@galera3 galera]# mysql -uroot -pghy@6666
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hya |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

备注:

--wsrep-new-cluster   在第一台只第一次启动需要加这个参数来启动集群或者拿service mysql start --wsrep-new-cluster命令启动
nohup /usr/sbin/mysqld --wsrep-new-cluster --defaults-file=/data/mysql/dragonclouddb/my.cnf --user=mysql &
pkill mysql

Galera_Cluster_Mysql部署的更多相关文章

  1. [原]CentOS7.2部署node-mapnik

    转载请注明表作者think8848及出处(http://think8848.cnblogs.com) node-mapnik依赖项中要求g++ >= 5, toolchain (>= GL ...

  2. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  3. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  4. 结合Jexus + Kestrel 部署 asp.net core 生产环境

    ASP.NET Core 是微软的全新的框架.这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖. 获得下面三个方面的优势,你可以把它认为是一个C# 版本的NodeJS: ...

  5. 4.Windows Server2012 R2里面部署 MVC 的网站

    网站部署之~Windows Server | 本地部署:http://www.cnblogs.com/dunitian/p/4822808.html#iis 后期会在博客首发更新:http://dnt ...

  6. Win10 IIS本地部署MVC网站时不能运行?

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 部署后出现这个错误: 打开文件目录后发现是可以看见目录的,静态页面也是可以打开的 ...

  7. 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)

    上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net. 连接第二个 instance 到 ...

  8. 将 instance 部署到 OVS Local Network - 每天5分钟玩转 OpenStack(130)

    上一节创建了 OVS 本地网络 first_local_net,今天我们会部署一个 instance 到该网络并分析网络结构.launch 一个 instance,选择 first_local_net ...

  9. 从零开始编写自己的C#框架(25)——网站部署

    导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...

  10. Oracle安装部署,版本升级,应用补丁快速参考

    一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...

随机推荐

  1. 一个能够生成 Markdown 表格的 Bash 脚本

    哈喽大家好,我是咸鱼. 今天分享一个很实用的 bash 脚本,可以通过手动提供单元格内容和列数或者将带有分隔符的文件(如 CSV.TSV 文件)转换为 Markdown 表格. 源代码在文末哦!原文链 ...

  2. MFC中CString转int,double

    CString str=L"123"; int n=_wtoi(str); //n=123 double d=_wtof(str); //d=123.0000 Vs2012中编译

  3. win指令学习收集

    要执行多句,需要用到逻辑判断 1 & 2 1成不成功都会执行2 1 && 2 1成功才会执行2 1 || 2 1不成功才会执行2

  4. vue中代理解决跨域

    跨域是什么 简单的讲就是你在一个地方使用另一个地方的资源,被浏览器给挡下来了,不让不用!当然,它挡下来是有自己理由的:为了安全(╬▔皿▔)╯. 解决跨域 我是用vue开发的,就vue代理模式解决跨域说 ...

  5. netcore高级知识点,内存对齐,原理与示例

    最近几年一直从事物联网开发,与硬件打交道越来越多,发现越接近底层开发对性能的追求越高,毕竟硬件资源相对上层应用来实在是太缺乏了.今天想和大家一起分享关于C#中的内存对齐,希望通过理解和优化内存对齐,可 ...

  6. t-io 学习笔记(一)

        基础介绍理解篇 序:本文也是在t-io官网学习的基础上写的理解学习笔记:1.什么是t-io? t-io是基于JVM的网络编程框架,和netty属同类,所以netty能做的t-io都能做,考虑到 ...

  7. Java在线数据导入导出Excel

    利用hutool 导入导出 Excel 导入maven <dependency> <groupId>cn.hutool</groupId> <artifact ...

  8. 使用composer创建项目时报错:Composer could not find the config file?

    使用composer创建项目时报错:Composer could not find the config file:C:\Composer ....? 一般报这个错就是composer安装的时候配置了 ...

  9. Linux:/proc/meminfo参数详细解释

    Linux:/proc/meminfo参数详细解释 一.Linux内存总览图 二.meminfo参数的详细介绍 /proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的&qu ...

  10. 37 .vue2数组和对象的区别 ?

    vue2中的数组不能使用索引实现响应式 ,因为vue没有给数组元素添加get和set函数  : 追加对象的属性的时候不是响应式,要使用 $set 追加响应式  :