zoukankan      html  css  js  c++  java
  • Linux 下部署Galera-Cluster-MySQL

    禁用SELinux

    您必须禁用SELinuxmysqld或对其进行配置,以允许mysqld其运行外部程序并在非特权端口上打开侦听套接字,即非特权用户可以执行的操作。

    1. 编辑 /etc/selinux/config,令SELINUX=disabled
    2. 保存后重启
    3. getenforce 命令查看状态

    开启数据库端口和集群端口

    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --zone=public --add-port=4567/tcp --permanent
    firewall-cmd --zone=public --add-port=4568/tcp --permanent
    firewall-cmd --zone=public --add-port=4444/tcp --permanent
    firewall-cmd --zone=public --add-port=4567/upd --permanent
    firewall-cmd --reload
    

    写入hosts,非必要

    echo 172.16.19.163 mysql.galera.test1 >> /etc/hosts
    echo 172.16.19.164 mysql.galera.test2 >> /etc/hosts
    echo 172.16.19.50  mysql.galera.test3 >> /etc/hosts
    /etc/init.d/network restart
    

    下载galera

    cat > /etc/yum.repos.d/galera.repo <<EOF
    [galera]
    name=galera
    baseurl= http://releases.galeracluster.com/galera-3/centos/7/x86_64/
    gpgcheck=0
    
    
    [mysql-wsrep]
    name = mysql-wsrep
    baseurl = http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
    gpgcheck = 0
    EOF
    
    yum makecache
    yum repolist
    yum install -y  mysql-wsrep-5.7 galera-3
    # 增量备份插件 innobackupex
    yum localinstall -y https://mirrors.tuna.tsinghua.edu.cn/percona/centos/7/RPMS/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
    
    

    编辑数据配置并进行调优

    [mysqld]
    user = mysql
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
    datadir=/var/lib/mysql
    #socket=/var/lib/mysql/mysql.sock
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    ## see more:https://galeracluster.com/library/training/tutorials/configuration.html
    wsrep_on=ON
    # 插件包so的位置
    wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
    # 所有节点必须一致us
    wsrep_cluster_name='galera'
    # 添加所有可能的节点IP,第一个连接需要为初始化集群节点的IP
    wsrep_cluster_address='gcomm://172.16.18.13,172.16.18.14,172.16.18.15'
    
    # 节点名称
    wsrep_node_name='galera3'
    # 节点期望接收客户端连接的IP地址和端口号
    wsrep_node_address='172.16.18.15'
    
    # 复制时身份验证信息(即用户名:密码),除了逻辑复制mysqldump,其他方法不需要此参数
    wsrep_sst_auth=galera:XXXXXXX123
    # 定义节点在状态快照传输中使用的方法或脚本。
    # mysqldump 除小数据集外,这速度很慢,但它是测试最多的选项
    # rsync 默认值.最快,但只能在节点启动时使用,不能和运行中的InnoDB存储引擎一起使用
    # rsync_wan 此选项与几乎相同rsync,但是使用delta-xfer算法来最大程度地减少网络流量
    # xtrabackup此选项是基于Perconaxtrabackup工具的一种快速且几乎无阻塞的状态转移方法.需要参考官网额外配置
    wsrep_sst_method=xtrabackup
    
    # MIXED 优先STATEMENT,STATEMENT不能的就ROW记录
    # galera只支持ROW
    binlog_format=ROW
    
    # galera只支持InnoDB
    default_storage_engine=InnoDB
    # MySQL打开的文件描述符限制,默认最小1024
    open_files_limit = 65535
    ## see more: https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html
    # InnoDB提供了一种可配置的锁定机制,可以显着提高将行添加到带有AUTO_INCREMENT列的表的SQL语句的可伸缩性和性能
    # simple insert 可以预先确定要插入行数的语句(最初处理该语句时)
    # bulk insert   事先不知道要插入行数(以及所需的自动增量值的数目)的语句
    # mixed insert  这些是“simple insert”语句,用于指定某些(但不是全部)新行的自动增量值
    # 0 traditional 传统锁定,兼容5.1之前,表级AUTO-INC锁定,主从复制时,自增列使用与master相同的值
    # 1 consecutive 连续锁定,不同insert不同锁定。主从复制表现跟traditional模式下一样,但是性能会有所提高
    # 2 interleaved 交错锁定,主从复制的同一张表下的同一行id有可能不一样
    #
    # 当innodb_autoinc_lock_mode设置为传统锁定模式(即的值0)或连续锁定模式(即的值1)时,
    # 可能导致无法解决的死锁,并使系统在Galera Cluster中无响应
    innodb_autoinc_lock_mode=2
    
    
    # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
    # 独立表空间优点:
    # 1.每个表都有自已独立的表空间。
    # 2.每个表的数据和索引都会存在自已的表空间中。
    # 3.可以实现单表在不同的数据库中移动。
    # 4.空间可以回收(除drop table操作处,表空不能自已回收)
    # 缺点:
    # 单表增加过大,如超过100G
    # 结论:
    # 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
    innodb_file_per_table=1
    
    # InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
    # 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
    # 在一个独立使用的数据库服务器上,推荐设置这个变量到服务器物理内存大小的80%
    # 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
    # 为了补偿Galera Cluster在独立的MySQL数据库服务器上增加的内存使用量,您应该将通常值减少5%
    # 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制.
    # 这里是 16G*0.75 = 12G
    innodb_buffer_pool_size = 12G
    
    
    # redo日志(重做日志)文件的大小 = innodb_log_file_size * innodb_log_files_in_group(默认2),
    # 配置的Redo空间越大,InnoDB就能更好的优化写操作.也意味着更长的恢复时间
    # 每1GB的Redo log的恢复时间大约在5分钟
    # 单文件恢复1min
    # 后期依据此调整 https://blog.csdn.net/langkeziju/article/details/51094289
    innodb_log_file_size = 256M
    
    ## 为了在InnoDB与事务一起使用的复制设置中具有持久性和一致性,请执行以下操作:
    # innodb_flush_log_at_trx_commit = sync_binlog  =1
    # 但是galera 采用写集复制,所以可以允许他=0 or 2,除非所有节点down,否则不丢失
    # 0:每秒写入一次日志并将其刷新到磁盘。未刷新日志的事务可能会在崩溃中丢失
    # 1:默认值。要完全符合ACID,必须使用1。每次事务提交时,日志都会写入并刷新到磁盘。
    # 2:在每次事务提交后写入日志,并每秒刷新一次到磁盘。未刷新日志的事务可能会在崩溃中丢失
    innodb_flush_log_at_trx_commit = 0
    # 0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync),此时只是写入了操作系统缓冲
    # 1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。
    # N:每写N次操作系统缓冲就执行一次刷新操作。
    sync_binlog =1
    

    启动数据库

    systemctl start mysqld
    systemctl enable mysqld
    

    初始密码

    export passwd=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'` 
    echo $passwd
    

    修改密码

    mysql -uroot -p$passwd 
    mysql > set global validate_password_policy=0;
    mysql > set global validate_password_length=6;
    mysql > set password for root@localhost = password('XXXXXXX123');
    mysql > update mysql.user set authentication_string=password('XXXXXXX123') where user='root';
    mysql > GRANT all privileges ON *.* TO galera@'%' IDENTIFIED BY 'XXXXXXX123';
    mysql > FLUSH PRIVILEGES;
    mysql > exit
    

    启动集群

    # 第一个节点需要初始化
    /usr/bin/mysqld_bootstrap
    # 其他节点正常启动
    systemctl restart mysqld
    

    验证

    # 端口
    ss -tnlp | egrep '3306|4567'
    # 进入mysql后验证
    show status like 'wsrep_local_state_comment';
    show status like 'wsrep_cluster%';
    

    如果失败,查看错误日志

    # wsrep_cluster_state_uuid  匹配不上的话
    #  清理节点缓存
    rm -rf /var/lib/mysql/grastate.dat
    rm -rf /var/lib/mysql/galera.cache
    rm -rf /var/lock/subsys/mysql
    # 强制删除死线程 直接关闭可能无法关闭
    killall -9 mysqld && systemctl stop mysqld
    echo "" > /var/log/mysqld.log
    systemctl start mysqld
    # 查看日志
    tail -n 300  /var/log/mysqld.log 
    
    

    备份

    https://galeracluster.com/library/training/tutorials/galera-backup.html

    源文档:https://galeracluster.com/library/training/tutorials/index.html

  • 相关阅读:
    bootstrap-select用法详解
    启动react项目报如下错误
    什么?女朋友生气哄不好?那是你没有这款神器!
    Python竟然能做这种进度条,看完别说WC!
    看完学习Python的萌新都在问的六个问题,你就可以毕业了!
    批量加水印防抄袭,Python轻松搞定!
    hdu_1272_小希的迷宫_201403091527
    hdu_1856_More is better_201403091720
    hdu_1213_How Many Tables_201403091126
    hdu_1232_畅通工程_201403091018
  • 原文地址:https://www.cnblogs.com/hyry/p/14620259.html
Copyright © 2011-2022 走看看