MySQL的Galera Cluster配置说明
Galera Cluster介绍 Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件,目前只支持InnoDB引擎。 主要功能: 同步复制 真正的multi-master,即所有节点可以同时读写数据库 自动的节点成员控制,失效节点自动被清除 新节点加入数据自动复制 真正的
Galera Cluster介绍
Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件,目前只支持InnoDB引擎。
主要功能:
- 同步复制
- 真正的multi-master,即所有节点可以同时读写数据库
- 自动的节点成员控制,失效节点自动被清除
- 新节点加入数据自动复制
- 真正的并行复制,行级
- 用户可以直接连接集群,使用感受上与MySQL完全一致
优势:
因为是多主,所以不存在Slave lag(延迟)
不存在丢失交易的情况
同时具有读和写的扩展能力
更小的客户端延迟
节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的
技术:
Galera集群的复制功能基于Galera library实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。
MariaDB介绍
MariaDB是MySQL的一个分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可。
开发这个分支的原因之一是Oracle公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。
方案总览
- haproxy作为MariaDB Galera Cluster的前端
- 2台haproxy用keepalived避免单点故障
- 3台MariaDB和一个garbd仲裁节点组成集群,仲裁节点上无数据
- Galera的SST采用Percona提供的XtraBackup(防止锁表,非阻塞)
环境描述
OS: CentOS 6.0 64bit
MariaDB server1: |
192.168.0.171 |
MariaDB server2: |
192.168.0.172 |
MariaDB server3: |
192.168.0.173 |
HAProxy server1: |
192.168.0.151 |
HAProxy server2: |
192.168.0.152 |
HAProxy共享的VIP: |
192.168.0.170 |
MySQL root password: |
q1w2e3!@# |
Cluster root username: |
clusteroot |
Cluster root password: |
q1w2e3!@# |
Galera SST user: |
sst |
Galera SST password: |
sstpass123 |
环境准备
以下操作以MariaDB server1为示例。
1.准备hosts文件
编辑上述每台服务器的/etc/hosts,添加如下内容:
192.168.0.151 haproxy1.cluster.local haproxy1 192.168.0.152 haproxy2.cluster.local haproxy2 192.168.0.171 galera1.cluster.local galera1 192.168.0.172 galera2.cluster.local galera2 127.0.0.1 ::1 |
2.安装163,epel,Percona,MariaDB的YUM源
[root@mdb-01 ~]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
[root@mdb-01 ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@mdb-01 ~]# cat CentOS6-Base-163.repo > /etc/yum.repos.d/CentOS-Base.repo
[root@mdb-01 ~]# vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 5.5 CentOS repository list - created 2013-05-16 01:58 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 |
[root@mdb-01 ~]# rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
[root@mdb-01 ~]# vi /etc/yum.repos.d/Percona.repo
[percona] name = CentOS $releasever - Percona baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/ enabled = 1 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona gpgcheck = 1 |
[root@mdb-01 ~]# wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-percona http://www.percona.com/downloads/RPM-GPG-KEY-percona
[root@mdb-01 ~]# yum makecache
Galera Cluster的配置
1.安装MariaDB、galera、xtrabackup
[root@mdb-01 ~]#
[root@mdb-01 ~]#
2.设置开机启动MariaDB
[root@mdb-01 ~]#
[root@mdb-01 ~]#
3.设置MariaDB的root密码,并做安全加固
[root@mdb-01 ~]#
4.确认MariaDB已正确安装并处于运行状态
[root@mdb-01 ~]#
Enter password:
Welcome to the MariaDB monitor.
Your MariaDB connection id is 11
Server version: 5.5.29-MariaDB MariaDB Server, wsrep_23.7.3.rXXXX
Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
注意查看是否有"wsrep_23.7.3.rXXXX"的输出。
5.创建用于同步数据库的SST帐号
[root@mdb-01 ~]#
mysql> GRANT USAGE ON *.* to sst@'%' IDENTIFIED BY 'sstpass123';
mysql> GRANT ALL PRIVILEGES on *.* to sst@'%';
mysql> FLUSH PRIVILEGES;
mysql> quit
6.创建wsrep.cnf文件
[root@mdb-01 ~]#
[root@mdb-01 ~]#
只需要修改如下4行:
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://"
wsrep_sst_auth=sst:sstpass123
wsrep_sst_method=xtrabackup
注意:
"gcomm://" 是特殊的地址,仅仅是Galera cluster初始化启动时候使用。
如果集群启动以后,我们关闭了第一个节点,那么再次启动的时候必须先修改
"gcomm://"为其他节点的集群地址,例如
wsrep_cluster_address="gcomm://192.168.0.172:4567"
7.在/etc/my.cnf中加入如下一行
!includedir /etc/my.cnf.d/
8.确认本机防火墙上开放了所需TCP 3306和TCP 4567的端口
[root@mdb-01 ~]#
[root@mdb-01 ~]#
9.重起MariaDB服务
[root@mdb-01 ~]#
10.确认MySQL的3306端口和wsrep的4567端口处于监听状态
[root@mdb-01 ~]#
tcp
tcp
至此,集群的第一个节点配置完毕。
11.为集群增加其他节点
在Galera Cluster中,新接入的节点叫Joiner,给joiner提供复制的节点叫Donor。
对于生产环境使用,建议设立一个专用的"参考节点",这个"参考节点"不执行任何客户端的SQL请求。
上图中红色的NODE A即为"参考节点",这样做的好处有如下几条:
1.数据一致性:
因为"参考节点"本身不执行任何客户端SQL,所以在这个节点上发生transaction冲突的可能性最小。
因此如果发现集群有数据不一致的时候,"参考节点"上的数据应该是集群中最准确的。
2.数据安全性:
因为"参考节点"本身不执行任何客户端SQL,所以在这个节点上发生灾难事件的可能性最小。
因此当整个集群宕掉的时候,"参考节点"应该是恢复集群的最佳节点。
3.高可用
"参考节点"可以作为专门state snapshot donor。
因为"参考节点"不服务于客户端,因此当使用此节点进行SST的时候,不会影响用户体验,并且前端的负载均衡设备也不需要重新配置。
构造如上图的结构,新节点的操作步骤如下:
1.按照上述1-9的步骤安装MariaDB和Galera library
2.除了第5步wsrep_cluster_address的配置稍有不同:
wsrep_cluster_address="gcomm://Node-A-IP:4567"
3.重起MariaDB
4.按上述步骤配置下一个节点,将其wsrep_cluster_address指向其前一个节点,例如:
Node C -> Node B, Node D -> Node C, … , Node N -> …
5.配置Node A重新加入集群,修改/etc/my.cnf.d/wsrep.cnf中的wsrep_cluster_address地址指向Node N。
wsrep_cluster_address="gcomm://Node-N-IP:4567"
修改节点的wsrep_cluster_address有两种方式:
1)修改配置文件中的wsrep_cluster_address,然后重启MySQL
2)直接修改MySQL全局变量
mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address'; +-----------------------+----------------------------+ | Variable_name +-----------------------+----------------------------+ | wsrep_cluster_address | gcomm://192.168.0.172:4567 | +-----------------------+----------------------------+ 1 row in set (0.00 sec) mysql> set global wsrep_cluster_address="gcomm://192.168.0.172:4567,192.168.0.173:4567"; Query OK, 0 rows affected (2.20 sec) mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address'; +-----------------------+-------------------------------------------------------+ | Variable_name +-----------------------+-------------------------------------------------------+ | wsrep_cluster_address | gcomm://192.168.0.172:4567,192.168.0.173:4567 +-----------------------+-------------------------------------------------------+ 1 row in set (0.00 sec) |
12.确认galera集群正确安装和运行
[root@mdb-01 ~]#
wsrep_ready 为ON,则说明MariaDB Galera集群已经正确运行了。
wsrep_cluster_size 标明了组成集群的节点个数。
13.给集群加入Galera arbitrator
对于只有2个节点的Galera Cluster和其他集群软件一样,需要面对极端情况下的"脑裂"状态。
为了避免这种问题,Galera引入了"arbitrator(仲裁人)"。
"仲裁人"节点上没有数据,它在集群中的作用就是在集群发生分裂时进行仲裁,集群中可以有多个"仲裁人"节点。
"仲裁人"节点加入集群的方法很简单,运行如下命令即可:
[root@arbt ~]# garbd -a gcomm://192.168.0.171:4567 -g my_wsrep_cluster -d
参数说明:
-d 以daemon模式运行
-a 集群地址
-g 集群名称
Haproxy的相关配置
1.创建用于后端MySQL服务器健康检查的数据库帐号
haproxy现在支持option mysql-check,这个检查会向后端服务器发送2个包,一个用于客户端认证,一个用于关闭连接。这个检查需要在每个节点上都需要创建一个无密码的MySQL帐号。
[root@mdb-01 ~]#
Enter password:
mysql> INSERT INTO mysql.user (host,user) values ('%','haproxy');
mysql> FLUSH PRIVILEGES;
mysql> quit
2.编译haproxy和keepalived(过程略,可参考我这篇博文:http://blog.sina.com.cn/s/blog_704836f40101gm11.html)
3.配置keepalived(此处只列出Master的配置)
vrrp_script chk_haproxy { |
4.配置haproxy
defaults |
其他相关
1.Galera Cluster部署的前置检查
在要转成Galera Cluster的数据库上执行如下SQL语句:
SELECT DISTINCT |
上述SQL检索数据库,输出不符合使用Galera的表的信息,对应的5个字段顺序为:表,表引擎,是否无主键,是否有全文索引,是否有空间索引。
找到不符合的原因,对应修改即可。
2.MySQL Galera监控
监控状态参数说明:
参考文档:
MariaDB和Galera Cluster相关文档
http://www.alexwilliams.ca/blog/2009/08/10/using-haproxy-for-mysql-failover-and-redundancy/
https://github.com/olafz/percona-clustercheck
https://mariadb.com/blog/setup-mariadb-enterprise-cluster-part-3-setup-ha-proxy-load-balancer-read-and-write-pools
http://www.sebastien-han.fr/blog/2012/04/08/mysql-galera-cluster-with-haproxy/
http://www.alexwilliams.ca/blog/2009/08/10/using-haproxy-for-mysql-failover-and-redundancy/
http://blog.secaserver.com/2011/07/install-mysql-replication-and-cluster-using-galera/
http://weetinyworld.blogspot.tw/2013/04/setting-up-mariadb-galera-cluster-from.html
http://blog.wu-boy.com/2013/03/galera-cluster-for-mysql-multi-master-replication/
http://www.sebastien-han.fr/blog/2012/08/29/setup-galera-with-sst-xtrabackup-method/
http://blog.secaserver.com/2011/07/install-mysql-replication-and-cluster-using-galera/
http://blog.secaserver.com/2012/02/high-availability-mysql-cluster-galera-haproxy/
http://www.severalnines.com/resources/clustercontrol-mysql-haproxy-load-balancing-tutorial
http://opentodo.net/2012/12/mysql-multi-master-replication-with-galera/
http://www.planetlarg.net/open-source-cookbook/data-storage/replace-mysql-mysql-galera
http://www.sebastien-han.fr/blog/2012/04/08/mysql-galera-cluster-with-haproxy/
http://www.zrwm.com/?cat=130
http://openquery.com/blog/galera-predeployment-check
http://www.percona.com/files/presentations/percona-live/nyc-2012/PLNY12-galera-cluster-best-practices.pdf
https://groups.google.com/forum/#!msg/codership-team/OUxATjcznPI/H8ftsjZwptAJ
http://www.zrwm.com/?p=5844
http://beerpla.net/2008/09/05/mysql-slave-lag-delay-explained-and-7-ways-to-battle-it/
http://wiki.vps.net/vps-net-features/cloud-servers/template-information/galeramysql-recommended-cluster-configuration/
http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
GTID和mysqlfailover相关文档
http://scriptingmysql.wordpress.com/2012/12/06/using-the-mysql-script-mysqlfailover-for-automatic-failover-with-mysql-5-6-gtid-replication/
http://svenmysql.blogspot.se/2012/10/failover-and-flexible-replication.html
http://svenmysql.blogspot.tw/2012/10/advanced-use-of-global-transaction.html
http://svenmysql.blogspot.se/2013/03/flexible-fail-over-policies-using-mysql.html
http://www.percona.com/sites/default/files/presentations/MHA_Toronto_Presentation.pdf
http://hickey.in/?p=78
http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-howto.html
http://huoding.com/2011/04/05/59
http://www.cnblogs.com/hustcat/archive/2009/12/19/1627525.html
http://dev.mysql.com/doc/refman/5.5/en/replication-howto-masterstatus.html

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

優雅安裝 MySQL 的關鍵在於添加 MySQL 官方倉庫。具體步驟如下:下載 MySQL 官方 GPG 密鑰,防止釣魚攻擊。添加 MySQL 倉庫文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 倉庫緩存:yum update安裝 MySQL:yum install mysql-server啟動 MySQL 服務:systemctl start mysqld設置開機自啟動

在 CentOS 上安裝 MySQL 涉及以下步驟:添加合適的 MySQL yum 源。執行 yum install mysql-server 命令以安裝 MySQL 服務器。使用 mysql_secure_installation 命令進行安全設置,例如設置 root 用戶密碼。根據需要自定義 MySQL 配置文件。調整 MySQL 參數和優化數據庫以提升性能。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。
