zoukankan      html  css  js  c++  java
  • centos MariaDB10.1.X galera cluster

    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.1.12/centos6-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    

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

    一、MariaDB Galera Cluster概要:

    1.简述:

          MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。

    2.特性:

          (1).同步复制 Synchronous replication

          (2).Active-active multi-master 拓扑逻辑

          (3).可对集群中任一节点进行数据读写

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

          (5).自动节点加入

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

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

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

          (9).多台数据库中数据同步由 wsrep 接口实现

    3.局限性

          (1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into 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).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

          (7).XA事务不支持,由于在提交上可能回滚。

          (8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

          (9).集群节点建议最少3个。

          (10).如果DDL语句有问题将破坏集群。

    采用快捷的yum方式。

    MariaDB.repo

    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.1.13/centos6-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    

     版本可以参考baseurl 里面的连接,更换数字,以及系统位数

    使用yum clearn all 清除缓存

    10.1.X 后的版本和之前的不一样。没有Mariadb galera server 这个包。

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

     自己cmake 也可以。(觉得没必要)

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

    [server]
    
    [mysqld]
    log-error                               = /data/mysql/error.log
    skip-name-resolve
    skip-host-cache
    skip-external-locking
    
    #set client (except root)  
    init_connect  =  'SET autocommit  =  0'
    init_connect  =  'SET NAMES utf8'
    init_connect  =  'SET character_set_client  =  utf8'
    init_connect  =  'SET character_set_results  =  utf8'
    init_connect  =  'SET character_set_connection  =  utf8'
    skip-character-set-client-handshake
    
    
    #log
    #log-bin  =   /data/mysql/mysql_logs/binary_log/dbtest-bin  
    #log-bin-index  =   /data/mysql/mysql_logs/binary_log/dbtest-bin.index 
    #networking   
    wait_timeout                            =  10
    max_allowed_packet                      =   64M
    
    max_connections                         = 300
    max_connect_errors                      =   6000
    
    event_scheduler                         =   ON
    
    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:autoextend
    innodb_buffer_pool_size                 = 22G
    innodb_flush_log_at_trx_commit          = 2  #可以提高性能,gslera保证不丢数据
    
    
    innodb_max_dirty_pages_pct              =   90
    innodb_thread_concurrency               =   0  #Set to 0 when using the threadpool  
    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                   =   on
    innodb_use_sys_malloc                   =   on
    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
    
    default-storage-engine=InnoDB
    sql-mode                                =  "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    table_open_cache                        =  2000
    open_files_limit                        =  65535
    sort_buffer_size                        =  2M
    thread_cache_size                       =  300
    tmp_table_size                          =  128M
    key_buffer_size                         =  1024M
    read_buffer_size                        =  1M
    read_rnd_buffer_size                    =  12M
    
    
    
    
    innodb_buffer_pool_populate             =   1
    thread_handling                         = pool-of-threads
    
    binlog_format                           =ROW
    bind-address                            =0.0.0.0
    datadir                                 =/data/mysql
    socket                                  =/data/mysql/mysql.sock

    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_name='galera01'
    wsrep_cluster_address="gcomm://node1,node2,node3"
    wsrep_node_name=node1
    wsrep_node_address=172.16.38.172
    wsrep_on=ON
    default_storage_engine=InnoDB
    wsrep_sst_method=rsync
    wsrep_sst_auth=sst_user:dbpass

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

    启动第一个

    service mysql start --wsrep-new-cluster
    

     可能会点点点很长时间,但是我们可以通过日志看到数据库是否已经正常起来。

    如果还在点点点,可以不用管,直接crtl+c

    第二胎第三台就直接service mysql start 就行了。只要有一台在 就不用刚刚启动第一次的命令。

    show status like 'wsrep%';
    

     来查看集群状态

    加上haproxy之后 需要添加允许haproxy 健康检查,和集群之间的互相访问

     grant all privileges on *.* to sst_user@localhost identified by 'dbpass';
    insert into mysql.user (host,user) values ('172.16.38.178','haproxy');
    grant all privileges on *.* to root@localhost identified by 'anjubao.com';
    #如果insert 报错,有可能配置文件 有sql_mod 选项,是为了安全考虑的。
    
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第4章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第3章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第1,2章 读书笔记(待更新)
    Tkinter的Message组件
    Git 实操/配置/实践
    mysq5.7.32-win安装步骤
    行为型模式之模板方法
    结构型模式之组合模式
    结构型模式之享元模式
    结构型模式之外观模式
  • 原文地址:https://www.cnblogs.com/shiyiwen/p/5446755.html
Copyright © 2011-2022 走看看