首页 » Web前端 » phpmariadb集群技巧_MariaDB集群搭建Galera

phpmariadb集群技巧_MariaDB集群搭建Galera

访客 2024-12-12 0

扫一扫用手机浏览

文章目录 [+]

三台做事器ubuntu14.04

192.168.3.1

phpmariadb集群技巧_MariaDB集群搭建Galera

192.168.3.2

phpmariadb集群技巧_MariaDB集群搭建Galera
(图片来自网络侵删)

192.168.3.3

MariaDB(10.1,由于10.1之后自带Gelera,无需单独安装)

Gelera(10.1之前版本须要单独安装)

rsync (集群相互学习利用的默认同步办法)

1. 软件安装

sudo apt-get install software-properties-common

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.1/ubuntu trusty main'

sudo apt-get update

sudo apt-get install rsync mariadb-server

安装软件后,首先把mysql做事停掉,完成配置后在启动。

2. 配置项

这里集群最少3台做事器,防止网络颠簸涌现脑裂问题。
3个做事器配置是相同的,如下:

vim /etc/mysql/my.cnf

# Galera-related settings

#

[galera]

# Mandatory settings

wsrep_on=ON

wsrep_provider=/usr/lib/libgalera_smm.so

wsrep_cluster_address=\"大众gcomm://192.168.3.1,192.168.3.2,192.168.3.3\"大众

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

wsrep_cluster_name=\公众MariaDB_Cluster\公众

#

# Allow server to accept connections on all interfaces.

#

bind-address=0.0.0.0

#

# Optional setting

#wsrep_slave_threads=1

#innodb_flush_log_at_trx_commit=0

3. 启动集群

这里顺序比较主要,在个中一台做事器上实行语句:

service mysql start --wsrep-new-cluster

该语句是利用此节点创建一个集群节点,作为初始节点。
其他两台做事器利用正常的启动就可以了,不须要利用其他参数:如下

service mysql start

如果碰着问题:ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

由于集群中利用debian-sys-maint用户登录,而用户的密码是配置在debian.cnf中的,所有办理办法:

找到debian.cnf中的password,并修正成例如newxxx

利用语句重新设置debian-sys-maint的密码。
语句见下面

重新启动集群。

set password for 'debian-sys-maint'@'localhost'=password('newxxx');

4. 验证集群

分别登录3个节点

mysql -uxxx -pxxxx

利用语句查看集群状态,wsrep_cluster_size = 3,其他参数把稳不雅观察,对后续运维很主要。

show status like 'wsrep_';

last_comitted故障规复利用

箭头参数,运维把稳

5.集群解释(有看头)

虽然多个数据库节点实现了高可用,但这里带来一个架构问题,数据同等性问题,在并发较高,对事务哀求比较严格的运用中会涌现问题。

业务场景:

会员A在平台预定了一个产品,在9点整自动下单,此时会从会员中扣除用度。
如果在扣费的过程中,A也充值了,很可能就会涌现问题。

最根本的缘故原由:事务没有锁住会员账户。
这里牵扯到了两个事务,分别是扣费事务和充值事务。
而这两个事务很可能不在同一个数据库节点上,例如扣费事务在01节点锁住账户,并更新余额。
02节点没来得及学习,充值事务就来了,02节点也锁住了账户,完成了更新,并开释锁落后修了01的更新,导致02节点丢失了充值事务的操作。

有频繁更新且对事务哀求比较严格的时候,就不要考虑利用这种办法,这种办法适宜写多、并发更新少的场景。

Q:有办法避免事务不一致的问题吗?

A:改为读写分离的代码实现,完美办理上述问题。
选择个中两个节点做VIP,其余一个做Master。
把稳利用sharding-jdbc,引入maven后数据源配置如下。

代码示例:

用图片看代码更爽

把稳:同一线程且同一数据库连接内,如有写入操作,往后的读操作均从主库读取,用于担保数据同等性。
所有利用这种办法,能知足绝大多数业务场景了。

感谢您的阅读,不敷之处,还望示正。
有疑问,可留言。

标签:

相关文章

极差提成php技巧_提成制是好方法吗

民企很喜好说的一句话:以古迹论英雄,发卖回款多的人,自然可以多得到提成。然而,古迹达成只是“果”,担保古迹达成的“因”是什么,却少...

Web前端 2024-12-14 阅读0 评论0