当前位置:硬件测评 > centos MariaDB10.1.X galera集群

centos MariaDB10.1.X galera集群

  • 发布:2023-10-10 08:03

-->
[mariadb]
名称 = MariaDB
基本网址 = http://www.sychzs.cn/10.1.12/centos6-amd64
gpgkey=https://www.sychzs.cn/RPM-GPG-KEY-MariaDB
gpg检查=1

最近在做这方面的一些调优,就顺便记录一下。

1。 MariaDB Galera 集群概述:

1。简要说明:

MariaDB Galera Cluster是在mysql innodb存储引擎上实现多主、数据实时同步的系统架构。业务层面不需要分离读写,数据库读写压力可以按照既定的规则分配到各个节点。上。数据端完全兼容MariaDB和MySQL。

2。特点:

(1)。同步复制

(2).双活多主拓扑逻辑

(3)。集群内任意节点均可读写数据

(4)。自动成员控制,故障节点自动从集群中移除

(5)。自动加入节点

(6)。真正的并行复制,基于行级别

(7)。直接客户端连接,原生MySQL接口

(8)。每个节点都包含数据的完整副本

(9)。通过wsrep接口实现多数据库数据同步

3.局限性

(1)。当前复制仅支持InnoDB存储引擎。任何写入其他引擎的表,包括 mysql.* 表都不会被复制,但 DDL 语句将被复制,因此创建的用户将被复制。但是插入到mysql.user...不会被复制。

(2)。 DELETE操作不支持没有主键的表。没有主键的表的顺序在不同的节点上会有所不同。如果执行 SELECT...LIMIT...,将会出现不同的结果集。

(3)。在多主环境中,不支持LOCK/UNLOCK TABLES,并且锁定函数GET_LOCK()、RELEASE_LOCK()…

(4)。查询日志不能保存在表中。如果查询日志开启,则只能保存到文件中。

(5)。允许的最大事务大小由 wsrep_max_ws_rows 和 wsrep_max_ws_size 定义。任何大型操作都将被拒绝。比如大的LOAD DATA操作。

(6)。由于集群对并发控制持乐观态度,事务提交可能会在这个阶段中止。如果两个事务在集群中的不同节点上写入并提交到同一行,则失败的节点将中止。对于集群级别的中止,集群会返回死锁错误代码(错误:1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK))。

(7).XA 事务不受支持,因为提交时可能会回滚。

(8)。整个集群的写吞吐量受到最弱节点的限制。如果一个节点变慢,那么整个集群也会变慢。为了稳定的高性能要求,所有节点应该使用统一的硬件。

(9)。建议至少有 3 个集群节点。

(10)。如果DDL语句出现问题,集群就会被破坏。

使用快速百胜方法。

MariaDB.repo

[mariadb]
名称 = MariaDB
基本网址 = http://www.sychzs.cn/10.1.13/centos6-amd64
gpgkey=https://www.sychzs.cn/RPM-GPG-KEY-MariaDB
gpg检查=1

版本可以参考baseurl中的连接,替换数字,以及系统位数

使用 yumclearnall 清除缓存

10.1.X之后的版本与之前的版本有所不同。没有 Mariadb galera 服务器包。

yum -y install MariaDB-client MariaDB-common MariaDB-devel MariaDB-server MariaDB-shared galera

你也可以自己使用cmake。 (我觉得没必要)

然后更改配置文件(根据自己的系统优化)

[服务器] [mysqld]
日志错误 = /data/mysql/error.log
跳过名称解析
跳过主机缓存
跳过外部锁定 #设置客户端(root除外)
init_connect = '设置自动提交 = 0'
init_connect = '设置名称 utf8'
init_connect = '设置character_set_client = utf8'
init_connect = '设置字符集结果 = utf8'
init_connect = '设置字符集连接 = utf8'
跳过字符集客户端握手 #日志
#log-bin = /data/mysql/mysql_logs/binary_log/dbtest-bin
#log-bin-index = /data/mysql/mysql_logs/binary_log/dbtest-bin.index
#网络
等待超时= 10
最大允许数据包 = 64M 最大连接数 = 300
最大连接错误数 = 6000 事件调度器 = 开 innodb_buffer_pool_instances = 8
innodb_file_per_table = 1 #每张表一个数据文件
innodb_log_files_in_group = 3
innodb_log_file_size = 768M
innodb_log_buffer_size = 16M
innodb_data_file_path = ibdata1:500M;ibdata2:500M:自动扩展
innodb_buffer_pool_size = 22G
innodb_flush_log_at_trx_commit = 2 #可以提高性能,gslera保证不丢数据 innodb_max_dirty_pages_pct = 90
innodb_thread_concurrency = 0 #使用线程池时设置为0
innodb_thread_sleep_delay = 500
innodb_concurrency_tickets = 5000
innodb_read_io_threads = 8
innodb_write_io_threads = 4
#innodb_io_capacity = 2000
innodb_lock_wait_timeout = 30
innodb_purge_threads = 1
innodb_purge_batch_size = 300
innodb_open_files = 2000
innodb_read_ahead_threshold = 56 innodb_flush_method = O_DIRECT
innodb_use_native_aio = 开启
innodb_use_sys_malloc = 开启
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_dump_now = 1
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_load_now = 1 默认存储引擎=InnoDB
sql-mode =“STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
表打开缓存 = 2000
open_files_limit = 65535
排序缓冲区大小 = 2M
线程缓存大小 = 300
tmp_table_size = 128M
key_buffer_size = 1024M
读取缓冲区大小 = 1M
read_rnd_buffer_size = 12M innodb_buffer_pool_populate = 1
thread_handling = 线程池 binlog_format =ROW
绑定地址 =0.0.0.0
datadir=/data/mysql
套接字=/data/mysql/mysql.sock wsrep_provider=/usr/lib64/galera/libgalera_www.sychzs.cn
wsrep_cluster_name='galera01'
wsrep_cluster_address="gcomm://node1,node2,node3"
wsrep_node_name=node1
wsrep_node_address=1 72.16.38.172
wsrep_on=ON
default_storage_engine=InnoDB
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:dbpass

不一一解释了,当时用tpcc-mysql调优的参数。

启动第一个

服务 mysql 启动 --wsrep-new-cluster

可能需要很长时间,但是通过日志我们可以看到数据库是否恢复正常。

如果你还在咬的话,可以忽略它,直接crtl+c

对于第二台和第三台机器,只需服务mysql启动即可。只要有一个,就不需要第一次启动命令了。

显示状态,如“wsrep%”;

查看集群状态

添加haproxy后,需要添加haproxy健康检查以及集群间互访的权限

将 *.* 上的所有权限授予 'dbpass' 标识的 sst_user@localhost;
插入mysql.user(主机,用户)values('172.16.38.178','haproxy');
将*.*上的所有权限授予“www.sychzs.cn”标识的root@localhost;
#如果insert报错,有可能是配置文件出于安全原因存在sql_mod选项。 -->

相关文章

热门推荐