阅读更多

1顶
0踩

数据库

转载新闻 如何快速部署MariaDB集群

2015-07-03 14:00 by 副主编 mengyidan1988 评论(1) 有7529人浏览
MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。

MariaDB Galera Cluster 介绍
MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎(虽然有对MyISAM实验支持 - 看wsrep_replicate_myisam系统变量)。
主要功能:
  • 同步复制
  • 真正的multi-master,即所有节点可以同时读写数据库
  • 自动的节点成员控制,失效节点自动被清除
  • 新节点加入数据自动复制
  • 真正的并行复制,行级
  • 用户可以直接连接集群,使用感受上与MySQL完全一致

优势:
  • 因为是多主,所以不存在Slavelag(延迟)
  • 不存在丢失事务的情况
  • 同时具有读和写的扩展能力
  • 更小的客户端延迟
  • 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

技术:

Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。

Galera插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制,工作原理如下图:



当客户端发出一个commit的指令,在事务被提交之前,所有对数据库的更改都会被 write-set 收集起来,并且将 write-set 纪录的内容发送给其他节点。

write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。

如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。

1 安装环境准备

安装MariaDB集群至少需要3台服务器(如果只有两台的话需要特殊配置,请参照官方文档)

在这里,我列出试验机器的配置:

操作系统版本:centos7

node4:10.128.20.16 node5:10.128.20.17 node6:10.128.20.18

以第一行为例,node4为 hostname ,10.128.20.16为 ip ,在三台机器修改 /etc/hosts 文件,我的文件如下:
10.128.20.16 node4
10.128.20.17 node5
10.128.20.18 node6

为了保证节点间相互通信,需要禁用防火墙设置(如果需要防火墙,则参照官方网站增加防火墙信息设置)

在三个节点分别执行命令:
systemctl stop firewalld

然后将 /etc/sysconfig/selinux 的 selinux 设置成 disabled ,这样初始化环境就完成了。

2 安装 MariaDB Galera Cluster
[root@node4 ~]# yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync

[root@node5 ~]# yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync

[root@node6 ~]# yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync

3 配置 MariaDB Galera Cluster

初始化数据库服务,只在一个节点进行
[root@node4 mariadb]# systemctl start mariadb
[root@node4 mariadb]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] n
 ... skipping.

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] n
 ... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

关闭数据库,修改 /etc/my.cnf.d/galera.cnf
[root@node4 mariadb]# systemctl stop mariadb

[root@node4 ~]# vim /etc/my.cnf.d/galera.cnf

修改以下内容:
[mysqld]
......
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://node4,node5,node6"
wsrep_node_name = node4
wsrep_node_address=10.128.20.16
#wsrep_provider_options="socket.ssl_key=/etc/pki/galera/galera.key; socket.ssl_cert=/etc/pki/galera/galera.crt;"

提示:如果不用ssl的方式认证的话,请把 wsrep_provider_options 注释掉。

将此文件复制到node5、node6,注意要把 wsrep_node_name 和 wsrep_node_address 改成相应节点的 hostname 和 ip。

4 启动MariaDB Galera Cluster服务
[root@node4 ~]# /usr/libexec/mysqld --wsrep-new-cluster --user=root &

观察日志:
[root@node4 ~]# tail -f /var/log/mariadb/mariadb.log
150701 19:54:17 [Note] WSREP: wsrep_load(): loading provider library 'none'
150701 19:54:17 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.5.40-MariaDB-wsrep'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server, wsrep_25.11.r4026

出现 ready for connections ,证明我们启动成功,继续启动其他节点:
[root@node5 ~]# systemctl start mariadb

[root@node6 ~]# systemctl start mariadb

可以查看 /var/log/mariadb/mariadb.log,在日志可以看到节点均加入了集群中。

警告⚠:--wsrep-new-cluster 这个参数只能在初始化集群使用,且只能在一个节点使用。

5 查看集群状态



我们可以关注几个关键的参数:

wsrep_connected = on 链接已开启

wsrep_local_index = 1 在集群中的索引值

wsrep_cluster_size =3 集群中节点的数量

wsrep_incoming_addresses = 10.128.20.17:3306,10.128.20.16:3306,10.128.20.18:3306 集群中节点的访问地址

6 验证数据同步

我们在 node4 上新建数据库 galera_test ,然后在 node5 和 node6 上查询,如果可以查询到 galera_test 这个库,说明数据同步成功,集群运行正常。
[root@node4 ~]# mysql  -uroot  -proot  -e  "create database galera_test"

[root@node5 ~]# mysql  -uroot  -proot  -e  "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| galera_test        |
| mysql              |
| performance_schema |
+--------------------+

[root@node6 ~]# mysql  -uroot  -proot  -e  "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| galera_test        |
| mysql              |
| performance_schema |
+--------------------+

至此,我们的 MariaDB Galera Cluster 已经成功部署。

参考文章:
http://galeracluster.com/documentation-webpages/
https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/
  • 大小: 172.8 KB
  • 大小: 321.7 KB
1
0
评论 共 1 条 请登录后发表评论
1 楼 dsjt 2015-07-06 19:06
分布式存储为什么这么多,简直眼花缭乱

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • MariaDB集群部署手册

    MariaDB集群部署手册 至少三台机器 做成集群 每台可以同时提供读和写,相当漂亮

  • MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)

    MariaDB 作为 Mysql 的一个分支,在开源项目中已经广泛使用,例如大热的 openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。 MariaDB Galera Cluster 介绍 MariaDB 集群是 ...

  • docker mariadb集群_docker-compose部署mariadb集群

    环境主机名机器IP10.0.102.214node110.0.102.220node210.0.102.116node3部署compose-mariadb.yaml文件说明[root@k8s-node-1 ~]# vim compose-mariadb.yamlversion: '3'services:mariadb_galera0: #名称修改下便于...

  • MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)

    MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证...MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎(虽然有对MyISAM实验支持 - 看wsrep_replicat

  • Ansible部署MariaDB galera集群(多主)

    MariaDB Galera集群是一套基于同步复制的、多主的MySQL集群解决方案,使用节点没有单点故障,可用性高,读写性能高,可扩展性好。

  • mariadb集群部署

    【代码】mariadb集群部署。

  • K8S 部署 MariaDB

    k8s 部署 MariaDB

  • MariaDB集群搭建

    MariaDB集群搭建 一、环境简介 序列 主机名 IP OS版本 1 db136 192.168.142.136 CentOS7.6 2 db137 192.168.142.137 CentOS7.6 3 db138 192.168.142.138 CentOS7.6 Galera版本:galera-4-26.4.3-1....

  • mariadb集群配置

    一、mariadb主从同步 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构...

  • 无人机图像目标检测.zip

    目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行

  • 数据结构《数据结构》经典算法代码.zip

    【数据结构】《数据结构》经典算法代码.zip 栈 待更新 队列 括号匹配(搞定) 用栈实现递归式的非递归代码P90 树 的考察在于各种树的特点,以及树的遍历算法 先序 递归 非递归 后序 递归 非递归 中序 递归 非递归 层序 线索化 求二叉树的高度 递归 非递归 平衡二叉树 判断一棵树是否为平衡二叉树 (2019-9-6)

  • Microsoft Remote Desktop for mac

    Microsoft Remote Desktop for mac

  • Axelrod-1.10.0-py2.py3-none-any.whl.zip

    Axelrod-1.10.0-py2.py3-none-any.whl.zip

  • 支持易码支付的聚合支付最新破解去后门源码.zip

    最新源支付系统源码 ∨7版全开源 免授权 附详细撘建教程 站长亲测YPay是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。它采用全新轻量化的界面U!,让您能更方便快捷地解决知识付费和运营赞助的难题。同时,它基于高性能的thinkphp 6.1.4+layui2.9.3+PearAdmin架构,提供实时监控和管理功能,让您随时随地掌握系统运营情况。 运行环境 Nignx/Apache/llS PHP 8.1 Mysql 5.6 ~ 5.7 Redis Supervison

  • 基于JSP的图书管理系统.zip

    基于JSP的图书管理系统 项目简介 本项目是一个基于JSP的图书管理系统,旨在提供一个简单的图书管理解决方案。系统包含了图书信息管理、借阅信息管理、读者信息管理以及用户认证等核心功能。 功能模块 图书信息管理 book.java: 定义了一个图书对象的属性及其对应的getter和setter方法。包含图书编号、图书名称、作者、出版社、价格、类型编号和备注等属性。 借阅信息管理 borrow.java: 表示借款信息相关的Bean,包含借款编号、图书编号、借款日期、还款日期、实际还款日期、借款金额和借款状态等属性。 读者信息管理 Reader.java: 代表一个读者对象,包含读者编号、姓名、性别、部门、联系电话、身份证号码、读者类型、创建时间和状态等属性。 用户认证 USER.java: 简单的用户信息类,包含用户名和密码两个属性,并提供对应的getter和setter方法。 字符编码过滤 CharFilter.java: 一个Servlet过滤器,用于处理字符编码问题,确保请求中的字符数据以UTF8编码进行处理。 技术栈 编

  • Axelrod-1.17.1-py2.py3-none-any.whl.zip

    Axelrod-1.17.1-py2.py3-none-any.whl.zip

  • 基于yolov8的西红柿缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面.zip

    【测试环境】 windows10 anaconda3+python3.8 torch==1.9.0+cu111 ultralytics==8.2.70 【模型可以检测出类别】 Bad Good Unripe 更多实现细节参考博文:https://blog.csdn.net/FL1623863129/article/details/141931442

  • 基于Spring Boot框架的OA管理系统.zip

    基于Spring Boot框架的OA管理系统 项目简介 本项目是一个基于Spring Boot框架开发的OA管理系统,专注于提供高效、稳定的企业办公自动化解决方案。系统集成了用户管理、安全控制、数据处理和报表生成等功能,旨在提升企业内部管理效率和数据处理能力。 主要功能 用户管理 用户信息管理通过UserInfo类管理用户的基本信息,包括账号、姓名、密码、电子邮件等。 用户状态管理支持用户账号的启用和禁用,以及用户信息的删除标记。 安全控制 登录认证通过SecurityController实现用户登录功能,包括账号验证、密码检查和状态判断。 数据访问控制通过SecurityMapper和SecurityService实现用户信息的数据库查询和业务逻辑处理。 数据处理 分页处理通过PageUtils工具类实现数据的分页显示,支持动态页码处理。 Excel报表生成通过ExcelUtils工具类生成Excel报表,支持自定义表头和内容。 错误处理 API响应处理通过BitResult类统一处理API调用的结果,包括操作成功与否、数据和错误信息

  • 基于Spring Boot框架的微信课程学习系统.zip

    基于Spring Boot框架的微信课程学习系统 项目概述 本项目是一个基于Spring Boot框架开发的微信课程学习系统,专注于提供丰富的课程资源和学习互动功能。系统集成了微信消息处理、课程管理、用户签到、试卷管理等多个模块,旨在为学生和教师提供一个高效、便捷的学习和教学环境。 功能模块 微信消息处理 基础事件处理处理微信事件的基本信息,如消息的发送方和接收方、消息创建时间、消息类型和事件类型等。 地理位置事件存储和处理用户的地理位置信息,用于签到和位置相关的功能。 菜单事件处理微信自定义菜单相关的事件,如点击菜单按钮后的响应。 二维码事件处理扫描二维码相关的事件,包括事件的标识和换取二维码所需的票据。 关注事件处理微信中的关注或取消关注事件。 课程管理 资源上传教师可以上传课程资源,如文档、视频等。 课程论坛学生和教师可以在课程论坛中进行讨论和互动。 申请入班学生可以申请加入班级,教师可以审核学生的申请。 用户签到 签到功能学生可以通过系统进行签到,记录签到时间和位置。 签到详情教师可以查看学生的签到详情,包括签到时间和位置。

Global site tag (gtag.js) - Google Analytics