前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Galera部署MariaDB集群

使用Galera部署MariaDB集群

原创
作者头像
圣人惠好可爱
发布2018-08-20 15:08:04
1.2K0
发布2018-08-20 15:08:04
举报
文章被收录于专栏:云计算教程系列

使用Galera进行MariaDB复制可为站点数据库添加冗余。通过数据库复制,多个服务器充当数据库集群。数据库群集对于高可用性网站配置特别有用。本教程使用三个单独的腾讯云CVM服务器来配置数据库复制,并创建相关数据库集群。

注意

节点之间的通信是未加密的。本教程假设您的CVM每个都配置了内网IP,并位于同一数据中心内。

由于Galera使用同步复制,因此集群性能能会形成木桶效应,数据库整体性能与您性能最差的服务器性能相当。

MariaDB 10.0在2019年3月停止使用。建议安装MariaDB 10.1及更高版本。

本教程需要三台已经设置好可以使用sudo命令的非root账号的Ubuntu或Debian服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

安装必需的软件包

  • 要安装所需的软件包,请首先添加Galera存储库的密钥。请注意,密钥可能会根据分发和MariaDB版本而更改。本教程将以Ubuntu 16.04上的MariaDB 10.1为例。默认情况下,安装MariaDB 10.0时,无法使用正确的密钥和存储库列表组合。
代码语言:javascript
复制
sudo apt install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

注意 在Debian 9及更高版本中,在导入密钥之前运行sudo apt install dirmngr

  • 添加存储库替换您的环境的版本和分配:
代码语言:javascript
复制
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.nodesdirect.com/mariadb/repo/10.1/ubuntu xenial main'

系统

秘钥

版本

存储库列表

Debian 9

0xF1656F24C74CD1D8

10.1

deb [arch = amd64,i386,ppc64el]http://mirror.nodesdirect.com/mariadb/repo/10.1/debianstretch main

Debian 8

0xcbcb082a1bb943db

10.0

deb [arch = amd64,i386,ppc64el]http://mirror.nodesdirect.com/mariadb/repo/10.0/debianjessie main

Ubuntu 16.04

0xF1656F24C74CD1D8

10.1

deb [arch = amd64,i386,ppc64el]http://mirror.nodesdirect.com/mariadb/repo/10.1/ubuntuxenial main

Ubuntu 16.04

0xF1656F24C74CD1D8

10.0

deb [arch = amd64,i386,ppc64el]http://mirror.nodesdirect.com/mariadb/repo/10.1/ubuntuxenial main

每个发行版可能没有发布的版本。例如,Debian 8的版本为10.0和10.1,而Debian 9的版本只有10.1。要查看所有可用的发行版,请访问MariaDB存储库下载页面

安装MariaDB,Galera和Rsync:

  • MariaDB 10.1及以上版本:
代码语言:javascript
复制
sudo apt update && sudo apt install -y rsync mariadb-server
  • MariaDB 10.0:
代码语言:javascript
复制
sudo apt update && sudo apt install -y rsync galera mariadb-galera-server

配置Galera

  • 使用以下内容在每个CVM上创建/etc/mysql/conf.d/galera.cnf文件。将wsrep_cluster_address部分中的IP地址替换为每个CVM的内网IP地址:
代码语言:javascript
复制
[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
​
#galera settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_wsrep_cluster"
wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
wsrep_node_address="192.168.1.1"
wsrep_node_name="node_1"
wsrep_sst_method=rsync
  • 重新启动群集中的两个非主服务器以启用新galera.cnf文件设置。
  • 安装后在每个CVM上停止MariaDB服务:
代码语言:javascript
复制
sudo service mysql stop
  • 使用--wsrep-new-cluster标志重新启动主要CVM上的MariaDB服务:
代码语言:javascript
复制
sudo mysqld --wsrep-new-cluster
  • 通过打开MariaDB监视器确认群集已启动:
代码语言:javascript
复制
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.1.29-MariaDB-1~xenial mariadb.org binary distribution
​
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
​
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
​
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_%';

或者,可以使用下面的命令进行检查:

代码语言:javascript
复制
$ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_%'"
Enter password:
+--------------------------+--------------------------------------+
| Variable_name            | Value                                |
+--------------------------+--------------------------------------+
| wsrep_cluster_conf_id    | 1                                    |
| wsrep_cluster_size       | 1                                    |
| wsrep_cluster_state_uuid | 8534672c-d39a-11e7-814b-aba9f331bda4 |
| wsrep_cluster_status     | Primary                              |
+--------------------------+--------------------------------------+
  • 在另外两个CVM上启动MariaDB服务。
代码语言:javascript
复制
sudo service mysql start

重新运行第五步中的命令以确保每个系统都已加入群集:

代码语言:javascript
复制
+--------------------------+--------------------------------------+
| Variable_name            | Value                                |
+--------------------------+--------------------------------------+
| wsrep_cluster_conf_id    | 3                                    |
| wsrep_cluster_size       | 3                                    |
| wsrep_cluster_state_uuid | 8534672c-d39a-11e7-814b-aba9f331bda4 |
| wsrep_cluster_status     | Primary                              |
+--------------------------+--------------------------------------+
  • 要防止启动时出现重复错误,请将/etc/mysql/debian.cnf文件从群集中的主要CVM复制到其他每个CVM,从而覆盖现有副本。
  • 重新启动两个辅助节点以应用新的debian.cnf设置。

防火墙设置

节点之间的通信是未加密的。即使使用专用IP,此信息也可能在数据中心内打开。

  • 启用UFW。
代码语言:javascript
复制
sudo ufw enable
  • 有四个安全端口。根据需要重复每个连接。
代码语言:javascript
复制
sudo ufw allow from 192.168.1.1 to any port 3306,4567,4568,4444 proto tcp
sudo ufw allow from 192.168.1.1 to any port 3306,4567,4568,4444 proto udp

每个端口的用途:

测试数据库复制

  • 在每个CVM上登录MariaDB:
代码语言:javascript
复制
mysql -u root -p
  • 创建一个测试数据库并在主要CVM上插入一行:
代码语言:javascript
复制
create database test;
create table test.flowers (`id` varchar(10));
  • 从每个其他服务器列出测试数据库中的表:
代码语言:javascript
复制
show tables in test;

您应该收到在上一步中创建的数据库和行的输出:

代码语言:javascript
复制
MariaDB [(none)]> show tables in test;
+----------------+
| Tables_in_test |
+----------------+
| flowers        |
+----------------+
1 row in set (0.00 sec)

恭喜,您现在已经使用Galera配置了MariaDB群集。

更详细的教程您可以参考MariaDB Galera集群入门教程最后,如果您的集群在公网上,您还需要设置SSL以保护数据在服务器之间移动时的数据。我推荐您使用腾讯云SSL证书服务。自行部署集群难免会遇到各种问题,我推荐您使用腾讯分布式服务框架进行集群管理,腾讯分布式框架,提供多维度应用、服务、机器的监控数据,助力服务性能优化;拥抱 Spring Cloud 开源社区。 配合腾讯云云关系型数据库,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。 更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《Set Up MariaDB Clusters with Galera Debian and Ubuntu》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装必需的软件包
  • 配置Galera
  • 防火墙设置
  • 测试数据库复制
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档