• Galera集群部署


    MariaDB Galera Cluster 介绍

    Galera介绍

    MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/InnoDB存储引擎,经测试可以创建myisam引擎表,但是插入数据后,不能同步。
    技术:
        Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。Galera插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制当客户端发出一个commit的指令,在事务被提交之前,所有对数据库的更改都会被write-set收集起来,并且将 write-set 纪录的内容发送给其他节点。write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。
     
    mariadb参数
    https://mariadb.com/kb/en/mariadb/
    

    主要功能

    1.同步复制
    2.真正的multi-master,即所有节点可以同时读写数据库
    3.自动的节点成员控制,失效节点自动被清除
    4.新节点加入数据自动复制
    5.真正的并行复制,行级
    6.用户可以直接连接集群,使用感受上与MySQL完全一致
    

    优势

    1.因为是多主,所以不存在Slavelag(延迟)
    2.不存在丢失事务的情况
    3.同时具有读和写的扩展能力
    4.更小的客户端延迟
    5.节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的
    

    方案总览

    1.nginx作为MariaDB Galera Cluster的前端
    2.2台nginx用keepalived避免单点故障
    3.Galera的SST采用Percona提供的XtraBackup(防止锁表,非阻塞)
    

    集群部署

    节点准备

    安装集群至少需要3个节点,以防止脑裂,安装前清除以前所有mysql相关包

        172.20.100.119 db01  
        172.20.100.109 db02
        172.20.100.120 db03
    

    各节点配置yum源 三台主机操作

    [root@172-19-11-192 yum.repos.d]# cat mariadb.repo
    [mariadb-main]
    name = MariaDB Server
    baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.2/yum/rhel/$releasever/$basearch
    #gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck = 0
    enabled = 1
    

    安装mariadb 三台主机操作

    yum -y install mariadb-server galera xtrabackup socat perl-Time-HiRes perl-DBD-MySQL MariaDB-backup 
    

    创建数据目录并授权 三台主机操作

     mkdir /data/3306
     chown mysql.mysql /data/3306
    

    修改启动文件中数据存储目录三台主机操作

    cat /etc/init.d/mysql
    basedir=
    datadir=/data/3306
    
    

    配置文件 db01初始化使用,其他机器使用时需配置[galera]

    注意binlog配置时需要创建对应的目录,否则会报错
    [root@172-20-100-119 my.cnf.d]# egrep -v "^$|^#" server.cnf
    [client]
    user            = root
    port            = 3306
    [server]
    [mysqld]
    character-set-server=utf8mb4
    log_warnings = 0
    log-error=/var/log/mariadb/mariadb.err          #error 日志位置
    socket=/var/lib/mysql/mysql.sock
    basedir=/usr
    datadir=/data/3306
    user    = mysql
    port    = 3306
    max_connections=2000                            #最大连接(用户)数。每个连接MySQL的用户均算作一个连接
    max_connect_errors=1000                         #最大失败连接限制
    interactive_timeout=600                         #服务器关闭交互式连接前等待活动的秒数
    wait_timeout=28800                               #服务器关闭非交互连接之前等待活动的秒数
    net_read_timeout=60                             #连接繁忙阶段(query)起作用
    net_write_timeout=3600                          #连接繁忙阶段(query)起作用
    max_allowed_packet = 1024M                      #通信缓冲大小
    skip-external-locking                           #跳过外部锁定
    back_log=3000                                   #暂存的连接数量
    skip-name-resolve                               #关闭mysql的dns反查功能
    query_cache_type=1                              #查询缓存  (0 = off、1 = on、2 = demand)
    query_cache_limit = 1M                          #指定单个查询能够使用的缓冲区大小,缺省为1M。
    query_cache_size = 64M                          #查询使用缓存空间
    table_open_cache = 1024                         #table高速缓存的数量
    thread_cache_size = 120                         #重新利用保存在缓存中线程的数量
    key_buffer_size = 8M                           #设置索引块缓存大小
    sort_buffer_size = 2M                          #每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存
    read_buffer_size = 1M                           #顺序读取数据缓冲区使用内存
    read_rnd_buffer_size = 2M                      #随机读取数据缓冲区使用内存
    join_buffer_size = 4M                           #Join操作使用内存
    bulk_insert_buffer_size = 4M                   #批量插入数据缓存大小
    wsrep_sync_wait = 1
    innodb_lock_wait_timeout=10
    innodb_flush_method=O_DIRECT                    #innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件
    innodb_file_per_table=1
    innodb_fast_shutdown=0
    innodb_buffer_pool_instances = 4
    innodb_log_file_size = 512M
    innodb_log_files_in_group = 3
    innodb_rollback_on_timeout = on
    innodb_thread_concurrency=0
    innodb_io_capacity=800
    innodb_purge_threads=1
    innodb_open_files=102400
    innodb_read_io_threads = 8
    innodb_write_io_threads = 12
    innodb_stats_on_metadata = 0
    thread_handling=pool-of-threads
    thread_pool_oversubscribe=30
    thread_pool_size=64
    thread_pool_idle_timeout=7200
    thread_pool_max_threads=2000
    performance_schema=0                            #收集数据库服务器性能参数
    lower_case_table_names = 1                      #将在创建与查找时将所有的表名自动转换为小写字符
    max_heap_table_size = 512M                      #这个变量定义了用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。
    transaction-isolation=READ-COMMITTED
    slow_query_log                                  #慢查询记录日志
    long_query_time = 5                             #慢查询记录时间  2秒
    slow_query_log_file=/var/log/mariadb/slow_query.log             #慢查询日志路径
    log_bin=/data/3306/binlog/mysql-bin
    log-bin-index = /data/3306/binlog/mysql-bin.index
    expire_logs_days = 5
    [embedded]
    [mariadb]
    [mariadb-10.1]
    [mysqldump]
    quick
    max_allowed_packet = 1024M
    
    

    初始化数据库 db01机器操作

     mysql_install_db --user=mysql --datadir=/data/3306/
    

    启动数据库 db01机器操作

     systemctl start mysql
    

    安全配置、创建root密码,删除test库等: 一台机器操作

    mysql_secure_installation
    

    如果失败,请登录mysql手动删除 配置

    创建集群连接用户的密码 一台机器操作

    grant all on *.* to dbcluster@'%' identified by 'mysql123';
    
    

    关闭数据库

    systemctl stop mysql
    

    修改配置文件 开启galera db01(首台)配置

    [galera]
    wsrep_on=ON                                     #链接已开启
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://"
    wsrep_node_name=172.20.100.119
    wsrep_node_address=172.20.100.119
    binlog_format=row                               ##binlog 格式 分别为 row=行格式 丶 mixed=混合格式 丶 STATEMENT=SQL语句复制模式
    wsrep_slave_threads=10
    wsrep_sst_method=mariabackup
    wsrep_sst_auth=dbcluster:mysql123
    innodb_flush_log_at_trx_commit=2
    innodb_buffer_pool_size=2G                      ##专用mysql服务器设置的大小: 操作系统内存的70%-80%最佳。
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    

    启动节点 db01操作

    /etc/init.d/mysql start --wsrep-new-cluster
    

    登陆检查 db01操作

    MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 0     |
    +--------------------+-------+
    1 row in set (0.01 sec)
    

    配置其他节点基本信息(db02 、db03)

    1、修改启动文件的数据目录
    vim /etc/init.d/mysql
    basedir=
    datadir=/data/3306
    2、创建对应的数据目录、并授权
    mkdir /data/3306 
    mkdir /data/binlog 
    chown mysql.mysql /data/3306  /data/binlog  
    

    修改配置文件 (db02 、db03)

    [galera]
    wsrep_on=ON                                     #链接已开启
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://172.20.100.119,172.20.100.109,172.20.100.120"
    wsrep_node_name=172-20-100-120
    wsrep_node_address=172.20.100.120
    binlog_format=row                               ##binlog 格式 分别为 row=行格式 丶 mixed=混合格式 丶 STATEMENT=SQL语句复制模式
    wsrep_slave_threads=10
    wsrep_sst_method=mariabackup
    wsrep_sst_auth=dbcluster:mysql123
    innodb_flush_log_at_trx_commit=2
    innodb_buffer_pool_size=2G                      ##专用mysql服务器设置的大小: 操作系统内存的70%-80%最佳。
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    

    启动数据库 (db02 、db03)

    systemctl start mysql
    
    

    检查 (db02 、db03)

    SHOW STATUS LIKE 'wsrep_cluster_size';
    MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 3     |
    +--------------------+-------+
    1 row in set (0.01 sec)
    
    

    至此galera集群安装完成

  • 相关阅读:
    mysql安装
    Apache 403 错误解决方法-让别人可以访问你的服务器
    windows安装xampp时出现,unable to realloc xxxxxxxx bytes
    spring-mvc整合jquery cropper图片裁剪插件
    Android 贝塞尔曲线
    Android 桌面生成快捷方式
    Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to “*****”
    Android TextView 字符串展示不同大小文字
    Android 6.0权限问题
    Android 部分机型GridView四周默认间距
  • 原文地址:https://www.cnblogs.com/dzc-/p/13573619.html
Copyright © 2020-2023  润新知