mysql-MGR集群

Mysql8MGR介绍

特点

  1. 高一致性,基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供 一致数据安全保证;
  2. 高容错性,只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节 点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置 了自动化脑裂防护机制;
  3. 高扩展性,节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同 步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更 新组信息,自动维护新的组信息;
  4. 高灵活性,有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在 主上进行;多主模式下,所有server都可以同时处理更新操作。

要求:

  1. 引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查
  2. 每个表必须有主键,在进行事务冲突检测时需要利用主键值对比
  3. 必须开启binlog且为row格式
  4. 开启GTID,且主从状态信息存于表中
    (–master-info-repository=TABLE、–relay-log-info-repository=TABLE)
    –log-slave-updates 打开
  5. 一致性检测设置–transaction-write-set-extraction=XXHASH64

不支持

  1. RP和普通复制binlog校验不能共存,需设置–binlog-checksum=none
  2. 不支持gap lock(间隙锁),隔离级别需设置为read_committed
  3. 不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行
    ,影响需 要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作
  4. 不支持serializable(序列化)隔离级别
  5. DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一致
  6. 不支持外键:多主不支持,单主模式不存在此问题
  7. 最多支持9个节点:超过9台server无法加入组

Mysql8MGR集群(单主)

安装

  1. 安装

    mv /data/mysql-8.0.22-el7-x86_64/ /data/mysql-8.0.22
    创建mysql用户和组
    groupadd mysql
    useradd -r -g mysql mysql
    
  2. 配置文件

    vim /etc/my.cnf
    [mysqld]
    socket=/tmp/mysql.sock
    # 设置mysql的安装目录
    basedir=/data/mysql-8.0.22
    # 设置mysql数据库的数据的存放目录 
    datadir=/data/mysql-8.0.22/data
    #设置mysql端口
    port=3306
    
    # 允许最大连接数
    max_connections=8000
    max_connect_errors=2000
    max_allowed_packet=512M
    open_files_limit=20480
    table_open_cache=8192
    group_concat_max_len=1024000
    
    #开启binlog日志
    server-id=ip
    log-bin=/data/mysql-8.0.22/binlog/bin.log
    relay-log=/data/mysql-8.0.22/binlog/relay.log
    #binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row
    binlog_format=row
    relay_log_recovery=1
    expire_logs_days=10
    
    #增加慢查询
    slow-query-log=1
    slow-query-log-file=/var/log/mysql-8.0.22/slow.log
    long_query_time=3
    
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    init_connect='SET collation_connection = utf8mb4_unicode_ci'
    
    #设置临时表大小
    tmp_table_size=828M
    max_heap_table_size=828M
    
    #表名存储在磁盘是小写的,但是比较的时候是不区分大小写
    lower_case_table_names=1
    
    # 创建新表时将使用的默认存储引擎,配置InnoDB缓冲池大小
    default-storage-engine=INNODB
    #128M*的倍数
    innodb_buffer_pool_size=2480M
    innodb_log_buffer_size=32M
    join_buffer_size=2M
    sort_buffer_size=2M
    read_buffer_size=2M
    read_rnd_buffer_size=4M
    bulk_insert_buffer_size=64M
    tmp_table_size=828M
    max_heap_table_size=828M
    log_timestamps=SYSTEM
    default-authentication-plugin=mysql_native_password
    symbolic-links=0
    default-time-zone='+08:00'
    
    [mysqld_safe]
    log-error=/var/log/mysql-8.0.22/mysql.log
    pid-file=/var/run/mysql-8.0.22/mysql.pid
    
    
    mkdir /data/mysql-8.0.22/binlog
    mkdir /var/log/mysql-8.0.22
    mkdir /var/run/mysql-8.0.22
    mkdir /var/lib/mysql-8.0.22
    mkdir /data/mysql-8.0.22/data
    touch /var/log/mysql-8.0.22/mysql.log
    chown -R mysql:mysql /data/mysql-8.0.22/data
    chown -R mysql:mysql /data/mysql-8.0.22/binlog
    chown -R mysql:mysql /var/log/mysql-8.0.22/
    chown -R mysql:mysql /var/run/mysql-8.0.22/
    chown -R mysql:mysql /var/lib/mysql-8.0.22/
    
  3. 初始化:

    ./bin/mysqld --initialize --lower-case-table-names=1 --user=mysql 						--basedir=/data/mysql-8.0.22/ --datadir=/data/mysql-8.0.22/data/
    
  4. 启动

    #加入linux服务
    cp support-files/mysql.server /etc/init.d/mysqld
    chkconfig add mysqld
    service mysqld start
    或者
    vim /etc/systemd/system/mysqld.service
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    [Install]
    WantedBy=multi-user.target
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/data/mysql-8.0.22/bin/mysqld --defaults-file=/etc/my.cnf
    LimitNOFILE = 5000
    
    
    systemctl daemon-reload
    systemctl  start mysqld
    systemctl  enable mysqld
    
  5. 添加mysql命令

    vim /root/.bash_profile
    PATH=$PATH:$HOME/bin:/data/mysql-8.0.22/bin
    source  /root/.bash_profile
    ln -s /var/lib/mysql/mysql.sock /tmp/
    
  6. 初始化密码

    alter user root@'localhost'  identified by '123qqq...A';
    CREATE USER 'root'@'%' IDENTIFIED BY '123qqq...A';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  7. 查看uuid:

    select uuid()
    

一主二从(uuid从与主的一样)

  1. 修改配置文件

    vim /etc/my.cnf
    # 加载group_replication插件
    plugin_load_add='group_replication.so'
    
    #开启GTID
    gtid_mode=ON
    #强制GTID的一致性
    enforce_gtid_consistency=ON
    
    #MGR使用乐观锁,减少锁粒度
    transaction_isolation = READ-COMMITTED
    #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog
    log-slave-updates=1
    #binlog校验规则,MGR要求使用NONE
    binlog_checksum=NONE
    
    #MGR集群要求复制模式要改成slave记录记录到表中
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    #记录事务的算法
    transaction_write_set_extraction = XXHASH64
    #集群主内的GTID值的UUID
    loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f'
    #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性
    loose-group_replication_start_on_boot = OFF
    
    #MGRIP:MGR端口,是MGR的端口,不是数据库的端口
    loose-group_replication_local_address = '本地ip:33061'
    #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
    loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061'
    
    #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用
    #只需要在集群内的其中一台开启,
    loose-group_replication_bootstrap_group = OFF
    
  2. 重启

    systemctl  restart mysqld
    
  3. 创建集群与用户:同步数据连接用户、管理主机连接数据库的用户

    停掉日志记录

    set SQL_LOG_BIN=0;
    

    创建用户

    CREATE USER 'mgrrepl'@'%' IDENTIFIED WITH sha256_password BY '123qqq...A';
    

    授权

    GRANT REPLICATION SLAVE ON *.* TO 'mgrrepl'@'%';
    

    刷新权限

    flush privileges;
    

    开启日志

    set SQL_LOG_BIN=1;
    

    情况binlog日志

    reset master;
    

    构建group replication集群

    change master to master_user='mgrrepl',master_password='123qqq...A' for 
    channel 'group_replication_recovery';
    

    标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置

    set global group_replication_bootstrap_group=ON;
    

    作为首个节点启动MGR集群

    start group_replication;
    

    关闭group_replication_bootstrap_group

    set global group_replication_bootstrap_group=OFF;
    

    查看mgr的状态

    select * from performance_schema.replication_group_members\G;
    

    group相关参数查看

    show variables like 'group%';
    

  1. 修改配置文件

    vim /etc/my.cnf
    # 加载group_replication插件
    plugin_load_add='group_replication.so'
    
    #开启GTID
    gtid_mode=ON
    #强制GTID的一致性
    enforce_gtid_consistency=ON
    
    #MGR使用乐观锁,减少锁粒度
    transaction_isolation = READ-COMMITTED
    #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog
    log-slave-updates=1
    #binlog校验规则,MGR要求使用NONE
    binlog_checksum=NONE
    
    #MGR集群要求复制模式要改成slave记录记录到表中
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    #记录事务的算法
    transaction_write_set_extraction = XXHASH64
    #集群主内的GTID值的UUID
    loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f'
    #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性
    loose-group_replication_start_on_boot = OFF
    
    #MGRIP:MGR端口,是MGR的端口,不是数据库的端口
    loose-group_replication_local_address = '本地ip:33061'
    #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
    loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061'
    
    #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用
    #只需要在集群内的其中一台开启,
    loose-group_replication_bootstrap_group = OFF
    
  2. 重启

    systemctl  restart mysqld
    
  3. 创建集群与用户:同步数据连接用户、管理主机连接数据库的用户

    停掉日志记录

    set SQL_LOG_BIN=0;
    

    创建用户

    CREATE USER 'mgrrepl'@'%' IDENTIFIED WITH sha256_password BY '123qqq...A';
    

    授权

    GRANT REPLICATION SLAVE ON *.* TO 'mgrrepl'@'%';
    

    刷新权限

    flush privileges;
    

    开启日志

    set SQL_LOG_BIN=1;
    

    情况binlog日志

    reset master;
    

    构建group replication集群

    change master to master_user='mgrrepl',master_password='123qqq...A' for 
    channel 'group_replication_recovery';
    

    加入MGR集群

    start group_replication;
    

    查看mgr的状态

    select * from performance_schema.replication_group_members\G;
    

    group相关参数查看

    show variables like 'group%';
    

VIP建设

  1. 数据库创建对应用户

    create user if not exists  mgrvip@'%' identified WITH mysql_native_password By '123qqq...A';
    grant select  on performance_schema.* to mgrvip@'%';
    
  2. 安装依赖包

    yum -y install epel-release
    yum -y install golang
    tar -xvf mgr-agent-linux64-0.01.tar.gz -C /data/
    
  3. (每台)修改配置文件

    vim agent.system
    [system]
    #集群的VIP
    cluster_vip              =  192.168.43.38
    #网卡名
    nic                      =  en0
    #检测节点角色的时间频率,单位为秒(S)
    polling_interval_Seconds =  5
    #程序用来连接MySQL用户
    admin_user      =  mgrvip
    #程序用来连接MySQL密码
    admin_password  =  123qqq...A
    #程序用来连接MySQL本机ip
    admin_address   =  172.16.200.12
    ##程序用来连接MySQL用户
    admin_port      =  33062
    #MGR三节点的IP地址
    peer_ips        =  172.16.200.12,172.16.200.13,172.16.200.14
    # todo: ordinal是MGR节点序号
    ordinal         = 0
    
  4. (每台)修改配置文件后台运行

    ./bin/mgr-agent start -d > /dev/null 2>&1
    

Mysql8MGR集群(多主)

安装

  1. 安装

    mv /data/mysql-8.0.22-el7-x86_64/ /data/mysql-8.0.22
    创建mysql用户和组
    groupadd mysql
    useradd -r -g mysql mysql
    
  2. 配置文件

    vim /etc/my.cnf
    [mysqld]
    socket=/tmp/mysql.sock
    # 设置mysql的安装目录
    basedir=/data/mysql-8.0.22
    # 设置mysql数据库的数据的存放目录 
    datadir=/data/mysql-8.0.22/data
    #设置mysql端口
    port=3306
    
    # 允许最大连接数
    max_connections=8000
    max_connect_errors=2000
    max_allowed_packet=512M
    open_files_limit=20480
    table_open_cache=8192
    group_concat_max_len=1024000
    
    #开启binlog日志
    server-id=ip
    log-bin=/data/mysql-8.0.22/binlog/bin.log
    relay-log=/data/mysql-8.0.22/binlog/relay.log
    #binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row
    binlog_format=row
    relay_log_recovery=1
    expire_logs_days=10
    
    #增加慢查询
    slow-query-log=1
    slow-query-log-file=/var/log/mysql-8.0.22/slow.log
    long_query_time=3
    
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    init_connect='SET collation_connection = utf8mb4_unicode_ci'
    
    #设置临时表大小
    tmp_table_size=828M
    max_heap_table_size=828M
    
    #表名存储在磁盘是小写的,但是比较的时候是不区分大小写
    lower_case_table_names=1
    
    # 创建新表时将使用的默认存储引擎,配置InnoDB缓冲池大小
    default-storage-engine=INNODB
    #128M*的倍数
    innodb_buffer_pool_size=2480M
    innodb_log_buffer_size=32M
    join_buffer_size=2M
    sort_buffer_size=2M
    read_buffer_size=2M
    read_rnd_buffer_size=4M
    bulk_insert_buffer_size=64M
    tmp_table_size=828M
    max_heap_table_size=828M
    log_timestamps=SYSTEM
    default-authentication-plugin=mysql_native_password
    symbolic-links=0
    default-time-zone='+08:00'
    
    [mysqld_safe]
    log-error=/var/log/mysql-8.0.22/mysql.log
    pid-file=/var/run/mysql-8.0.22/mysql.pid
    
    
    mkdir /data/mysql-8.0.22/binlog
    mkdir /var/log/mysql-8.0.22
    mkdir /var/run/mysql-8.0.22
    mkdir /var/lib/mysql-8.0.22
    mkdir /data/mysql-8.0.22/data
    touch /var/log/mysql-8.0.22/mysql.log
    chown -R mysql:mysql /data/mysql-8.0.22/data
    chown -R mysql:mysql /data/mysql-8.0.22/binlog
    chown -R mysql:mysql /var/log/mysql-8.0.22/
    chown -R mysql:mysql /var/run/mysql-8.0.22/
    chown -R mysql:mysql /var/lib/mysql-8.0.22/
    
  3. 初始化:

    ./bin/mysqld --initialize --lower-case-table-names=1 --user=mysql 						--basedir=/data/mysql-8.0.22/ --datadir=/data/mysql-8.0.22/data/
    
  4. 启动

    #加入linux服务
    cp support-files/mysql.server /etc/init.d/mysqld
    chkconfig add mysqld
    service mysqld start
    或者
    vim /etc/systemd/system/mysqld.service
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    [Install]
    WantedBy=multi-user.target
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/data/mysql-8.0.22/bin/mysqld --defaults-file=/etc/my.cnf
    LimitNOFILE = 5000
    
    
    systemctl daemon-reload
    systemctl  start mysqld
    systemctl  enable mysqld
    
  5. 添加mysql命令

    vim /root/.bash_profile
    PATH=$PATH:$HOME/bin:/data/mysql-8.0.22/bin
    source  /root/.bash_profile
    ln -s /var/lib/mysql/mysql.sock /tmp/
    
  6. 初始化密码

    alter user root@'localhost'  identified by '123qqq...A';
    CREATE USER 'root'@'%' IDENTIFIED BY '123qqq...A';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  7. 查看uuid:

    select uuid()
    

多主(uuid从与主的一样)

  1. 修改配置为文件

    vim /etc/my.cnf
    # 加载group_replication插件
    plugin_load_add='group_replication.so'
    
    #开启GTID
    gtid_mode=ON
    #强制GTID的一致性
    enforce_gtid_consistency=ON
    
    #MGR使用乐观锁,减少锁粒度
    transaction_isolation = READ-COMMITTED
    #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog
    log-slave-updates=1
    #binlog校验规则,MGR要求使用NONE
    binlog_checksum=NONE
    
    #MGR集群要求复制模式要改成slave记录记录到表中
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    #记录事务的算法
    transaction_write_set_extraction = XXHASH64
    #集群主内的GTID值的UUID
    loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f'
    #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性
    loose-group_replication_start_on_boot = OFF
    
    #MGRIP:MGR端口,是MGR的端口,不是数据库的端口
    loose-group_replication_local_address = '本地ip:33061'
    #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
    loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061'
    
    #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用
    #只需要在集群内的其中一台开启,
    loose-group_replication_bootstrap_group = OFF
    #开启多主模式
    group_replication_single_primary_mode=OFF
    group_replication_enforce_update_everywhere_checks=ON
    
  2. 重启

    systemctl  restart mysqld
    
  3. 创建集群与用户:同步数据连接用户、管理主机连接数据库的用户

    停掉日志记录

    set SQL_LOG_BIN=0;
    

    创建用户

    CREATE USER 'mgr_repl'@'%' IDENTIFIED WITH sha256_password BY 'cxk123...';
    

    授权

    GRANT REPLICATION SLAVE ON *.* TO 'mgr_repl'@'%';
    

    刷新权限

    flush privileges;
    

    开启日志

    set SQL_LOG_BIN=1;
    

    情况binlog日志

    reset master;
    

    构建group replication集群

    change master to master_user='mgr_repl',master_password='cxk123...' for 
    channel 'group_replication_recovery';
    

    标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置

    set global group_replication_bootstrap_group=ON;
    

    作为首个节点启动MGR集群

    start group_replication;
    

    关闭group_replication_bootstrap_group

    set global group_replication_bootstrap_group=OFF;
    

    查看mgr的状态

    select * from performance_schema.replication_group_members\G;
    

    group相关参数查看

    show variables like 'group%';
    

其它主

  1. 配置文件

    vim /etc/my.cnf
    # 加载group_replication插件
    plugin_load_add='group_replication.so'
    
    #开启GTID
    gtid_mode=ON
    #强制GTID的一致性
    enforce_gtid_consistency=ON
    
    #MGR使用乐观锁,减少锁粒度
    transaction_isolation = READ-COMMITTED
    #集群在故障恢复时互相检查binlog数据,记录下集群服务器发来执行过binlog
    log-slave-updates=1
    #binlog校验规则,MGR要求使用NONE
    binlog_checksum=NONE
    
    #MGR集群要求复制模式要改成slave记录记录到表中
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    #记录事务的算法
    transaction_write_set_extraction = XXHASH64
    #集群主内的GTID值的UUID
    loose-group_replication_group_name = 'cc5e26-2285-451f-866-0be2181539f'
    #否随服务器启动自动启动组复制,怕恢复时有扰乱数据准确性
    loose-group_replication_start_on_boot = OFF
    
    #MGRIP:MGR端口,是MGR的端口,不是数据库的端口
    loose-group_replication_local_address = '本地ip:33061'
    #MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
    loose-group_replication_group_seeds = 'ip1:33061,ip2:33061,ip3:33061'
    
    #开启引导模式,添加组成员,第一次搭建MGR或重建MGR时候使用
    loose-group_replication_bootstrap_group = OFF
    #开启多主模式
    group_replication_single_primary_mode=OFF
    group_replication_enforce_update_everywhere_checks=ON
    
  2. 重启

    systemctl  restart mysqld
    
  3. 创建集群与用户:同步数据连接用户、管理主机连接数据库的用户

    停掉日志记录

    set SQL_LOG_BIN=0;
    

    创建用户

    CREATE USER 'mgr_repl'@'%' IDENTIFIED WITH sha256_password BY 'cxk123...';
    

    授权

    GRANT REPLICATION SLAVE ON *.* TO 'mgr_repl'@'%';
    

    刷新权限

    flush privileges;
    

    开启日志

    set SQL_LOG_BIN=1;
    

    情况binlog日志

    reset master;
    

    构建group replication集群

    change master to master_user='mgr_repl',master_password='cxk123...' for 
    channel 'group_replication_recovery';
    

    加入MGR集群

    start group_replication;
    

    查看mgr的状态

    select * from performance_schema.replication_group_members\G;
    

    group相关参数查看

    show variables like 'group%';
    

安装pacemaker+haproxy做高可用并发

  1. 安装相关软件

    yum install pacemaker pcs corosync fence-agents resource-agents -y
    yum install haproxy -y
    
  2. 配置hosts文件

    vim /etc/hosts
    192.168.66.21   mysql1 pacemaker-haproxy1
    192.168.66.22   mysql2 pacemaker-haproxy2
    192.168.66.23   mysql3 pacemaker-haproxy3
    
  3. 启动pcs服务

    systemctl enable pcsd
    systemctl start pcsd
    
  4. 修改配置

    修改集群管理员hacluster(默认生成)密码

    echo hacluster | passwd --stdin hacluster
    

    在任意一个节点认证配置操作

    pcs cluster auth pacemaker-haproxy1 pacemaker-haproxy2 	
    pacemaker-haproxy3 -u hacluster -p hacluster  --force
    

    在任意一个节点创建并命名集群

    pcs cluster setup --force --name mysql-mgr-01 
    pacemaker-haproxy1 pacemaker-haproxy2 pacemaker-haproxy3
    

    在任意一个节点pcemaker集群启动

    pcs cluster start  --all
    pcs cluster enable  --all
    

    在任意一个节点查看pacemaker集群状态

    pcs cluster status
    cibadmin --query --scope nodes
    

    查看corosync状态

    #验证corosync
    corosync-cfgtool -s
    pcs status corosync
    

    查看节点和资源

    corosync-cmapctl | grep members
    pcs resource
    

    在任意一个节点设置高可用属性

    #设置合适的错误与警告,在trouble shooting故障排查时有用
    pcs property set pe-warn-series-max=1000 
    	pe-input-series-max=1000 
    	pe-error-series-max=1000 
    
    
    #pacemaker基于时间驱动的方式进行状态处理,cluster-recheck-interval默认	定义某些pacemaker操作发生的事件间隔为15min,建议设置为5min或	3min
    pcs property set cluster-recheck-interval=5
    
    
    #corosync默认启用stonith,但stonith机制(通过ipmi或ssh关闭节点)	并	没有配置相应的stonith设备
    pcs property set stonith-enabled=false
    #验证配置(没有输出即正确,此时pacemaker将拒绝启动任何资源;在生	产环境可根据情况灵活调整,测试环境下可关闭)
    crm_verify -L -V
    
    
    #默认当有半数以上节点在线时,集群认为自己拥有法定人数,是“合法”的,	满足公式:total_nodes < 2 * active_nodes;
    #以3个节点的集群计算,当故障2个节点时,集群状态不满足上述公式,此时集	群即非法;当集群只有2个节点时,故障1个节点集群即非法,所谓的”双节点	集群”就没有意义;
    #在实际生产环境中,做2节点集群,无法仲裁时,可选择忽略;做3节点集群,	可根据对集群节点的高可用阀值灵活设置
    pcs property set no-quorum-policy=ignore
    
    
    #v2的heartbeat为了支持多节点集群,提供了一种积分策略来控制各个资源	在	集群中各节点之间的切换策略;通过计算出各节点的的总分数,得分最高者将成	为active状态来管理某个(或某组)资源;
    #默认每一个资源的初始分数(取全局参数default-resource-stickiness,通过	"pcs property list --all"查看)是0,同时每一个资源在每次失败之后减掉的	分数(取全局参数default-resource-failure-stickiness)也是	0,此时一个	资源不论失败多少次,heartbeat都只是执行restart操作,不会进行节点切换;
    #如果针对某一个资源设置初始分数”resource-stickiness“或	"resource-failure-stickiness",则取单独设置的资源分数;
    #一般来说,resource-stickiness的值都是正数,	resource-failure-stickiness的值都是负数;有一个特殊值是正无穷大	(INFINITY)和负无穷大(-INFINITY),即"永远不切换"与"只要失败必须	切	换",是用来满足极端规则的简单配置项;
    #如果节点的分数为负,该节点在任何情况下都不会接管资源(冷备节点);	如	果某节点的分数大于当前运行该资源的节点的分数,heartbeat会做出切换动作,	现在运行该资源的节点将释放资源,分数高出的节点将接管该资源
    pcs property list
    Cluster Properties:
     cluster-infrastructure: corosync
     cluster-name: openstack-cluster-01
     cluster-recheck-interval: 5
     dc-version: 2.0.3-5.el8_2.1-4b1f869f0f
     have-watchdog: false
     no-quorum-policy: ignore
     pe-error-series-max: 1000
     pe-input-series-max: 1000
     pe-warn-series-max: 1000
     stonith-enabled: false
    

    在任意一个节点设置vip

    pcs resource create vip ocf:heartbeat:IPaddr2 ip=VIP 						cidr_netmask=24 op monitor interval=30s
    #在任意控制节点设置vip(resource_id属性)即可,命名即为vip;
    #ocf(standard属性):资源代理(resource agent)的一种,另有systemd,		lsb,service等;
    #heartbeat:资源脚本的提供者(provider属性),ocf规范允许多个供应		商提供同一资源代理,大多数ocf规范提供的资源代理都使用heartbeat		作为provider;
    #IPaddr2:资源代理的名称(type属性),IPaddr2便是资源的type;
    #cidr_netmask: 子网掩码位数
    #通过定义资源属性(standard:provider:type),定位vip资源对应的ra		脚本位置;
    #centos系统中,符合ocf规范的ra脚本位于/usr/lib/ocf/resource.d/目		录,目录下存放了全部的provider,每个provider目录下有多个type;
    #op:表示Operations(运作方式 监控间隔= 30s)
    
    

    查看集群资源

    #查询vip资源
    pcs resouce
    #可查看vip
    ip a show
    

    如果api区分管理员/内部/公共的接口,对客户端只开放公共接口,通常设置两 个vip,如在命名时设置为:

    pcs constraint colocation add vip_management with vip_public
    
  5. 配置HAProxy

    创建HAProxy记录日志文件并授权

    mkdir /var/log/haproxy
    touch /var/log/haproxy/haproxy-info.log
    touch /var/log/haproxy/haproxy-err.log
    touch /var/log/haproxy/haproxy-notice.log
    chmod -R 777 /var/log/haproxy
    

    在rsyslog文件下修改以下字段

    vim /etc/rsyslog.conf
    module(load="imudp")
    input(type="imudp" port="514")
    module(load="imtcp")
    input(type="imtcp" port="514")
    #### GLOBAL DIRECTIVES ####
    		#在文件最后添加haproxy配置日志
    local0.=info    -/var/log/haproxy/haproxy-info.log
    local0.=err     -/var/log/haproxy/haproxy-err.log
    local0.notice;local0.!=err      -/var/log/haproxy/haproxy-notice.log
    
    
    #重启rsyslog
    systemctl restart rsyslog
    

    上传并修改配置文件

    vim /etc/haproxy/haproxy.cfg
    #mysql_mgr
    listen mysql_mgr
        mode tcp
        bind vip:3307
        balance leastconn
        option mysql-check user haproxy     
        server mysql1 节点ip:3306 weight 1 check inter 2000 rise 2 fall 5
        server mysql2 节点ip:3306 weight 1 check inter 2000 rise 2 fall 5
        server mysql3 节点ip:3306 weight 1 check inter 2000 rise 2 fall 5
    

    启动haproxy

    #创建空密码用户
    create user 'haproxy';
    systemctl start haproxy
    systemctl status haproxy
    systemctl enable haproxy
    #访问网站
    http://vip:1080/admin
    	用户名/密码:admin/admin
    

    在这里插入图片描述

Mysql8MGR集群(单多主相互转换)

单主切多主

  1. 停止组复制(所有节点)

    stop group_replication;
    
  2. 单主模式关闭

    set global group_replication_single_primary_mode=OFF;
    
  3. 如果是单主模式,因为不存在多主同时操作的可能,这个强制检查是可以关闭,因为已经不存 在这样的操作,多主是必须要开的,不开的话数据就可能出现错乱了

    set global group_replication_enforce_update_everywhere_checks=ON;
    
  4. 配置参数加上(所有节点)

    group_replication_single_primary_mode=OFF
    group_replication_enforce_update_everywhere_checks=ON
    
  5. 重启数据库

  6. 随便选择某个节点执行

    #标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置
    set global group_replication_bootstrap_group=ON;
    #作为首个节点启动MGR集群
    start group_replication;
    #关闭group_replication_bootstrap_group
    set global group_replication_bootstrap_group=OFF;
    
  7. 其他节点执行 加入MGR集群

    start group_replication;
    
  8. 查看组信息,所有节点的 MEMBER_ROLE 都为

    PRIMARY
    SELECT * FROM performance_schema.replication_group_members;
    

多主切单主

  1. 停止组复制(所有节点)

    stop group_replication;
    
  2. 配置参数去除(所有节点)

    global group_replication_single_primary_mode=OFF
    global group_replication_enforce_update_everywhere_checks=ON
    
  3. 主节点执行

    #标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置
    set global group_replication_bootstrap_group=ON;
    #作为首个节点启动MGR集群
    start group_replication;
    #关闭group_replication_bootstrap_group
    set global group_replication_bootstrap_group=OFF;
    
  4. 其他节点执行 加入MGR集群

    start group_replication;
    
  5. 查看组信息,所有节点的 MEMBER_ROLE 都为 PRIMARY

    SELECT * FROM performance_schema.replication_group_members;
    

Mysql8MGR管理维护

管理维护

  1. 查一下GTID,

    show master status;
    
  2. 查看同步状态

    show slave status for channel 'group_replication_recovery'\G;
    
  3. 查看group内所有成员的节点信息

    SELECT * FROM performance_schema.replication_group_members;
    
  4. 查看group中的同步情况,当前复制状态

    select * from performance_schema.replication_group_member_stats\G
    
  5. 当前server中各个通道的使用情况,

    select * from performance_schema.replication_connection_status\G
    
  6. 当前server中各个通道是否启用,on是启用

    select * from performance_schema.replication_applier_status;
    
  7. 单主模式下,查看那个是主库,只显示uuid值

    select * from performance_schema.global_status 
    where VARIABLE_NAME='group_replication_primary_member';
    
  8. 查看权限,只读

    show global variables like 'super%';
    
  9. 节点长期处于RECOVERING状态的解决方法

    #查看日志,发现是用户密码加密插件问题Authentication plugin 'caching_sha2_password' 		reported error: Authentication requires secure connection.,也就是创建复制用户时,		密码默认是mysql 8的加密方式
    2019-11-09T15:00:19.154364Z 37 [ERROR] [MY-010584] [Repl] Slave I/O for channel 'group_replication_recovery': error connecting to master 'mgr_repl@server-1:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061
    2019-11-09T15:00:19.196600Z 28 [ERROR] [MY-011582] [Repl] Plugin group_replication reported: 'There was an error when connecting to the donor server. Please check that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable.'
    2019-11-09T15:00:19.196632Z 28 [ERROR] [MY-011583] [Repl] Plugin group_replication reported: 'For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.'
    
    
    #解决方法,更改密码加密方式
    SET SQL_LOG_BIN=0;
    alter USER 'mgr_repl'@'%' IDENTIFIED WITH sha256_password BY 'cxk123...';
    GRANT REPLICATION SLAVE ON *.* TO 'mgr_repl'@'%';
    SET SQL_LOG_BIN=1;
    #再启动MGR就可以正常了
    select * from performance_schema.replication_group_members;
    

节点挂了重新加入集群

  1. 检查配置文件

    vim /etc/my.cnf
    systemctl  restart mysqld
    构建group replication集群
    change master to master_user='mgrrepl',master_password='123qqq...A' for 
    channel 'group_replication_recovery';
    
  2. 加入MGR集群

    start group_replication;
    

喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章; 文章中用到的文件、安装包等可以加小编联系方式获得;
欢迎来交流小编联系方式VX:CXKLittleBrother 进入运维交流群

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

含义小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值