精华内容
下载资源
问答
  • MySQL高可用集群搭建 ----- MHA

    千次阅读 2019-09-15 15:05:07
    一、何为高可用高可用性说白了就是应用可以 持续不间断 的 提供服务的能力! 注: 高可用和负载均衡的概念有些初学者可能会混淆,在这也说说负载均衡: 负载均衡:指后端服务器没有状态,可以任意分配,它们...

    一、何为高可用?

    高可用性说白了就是应用可以 持续不间断提供服务的能力!

    注:
    高可用和负载均衡的概念有些初学者可能会混淆,在这也说说负载均衡:

    负载均衡:指后端服务器没有状态,可以任意分配,它们之间是同时工作的,能够通过增加机器增加吞吐量、减小服务器压力

    高可用:指后端服务器有状态,一般来说是一主一备的结构,它们之间是一个工作另一个不工作在主服务器出故障后,备服务器去接管服务,从而达到持续不间断的提供服务。

    二、MHA介绍

    MHA使用perl语言编写的一个脚本管理管理工具,用于维持master主库的高可用性。
    MHA包含两个部分:MHA Manager(管理节点)和MHA Node(数据节点)
    在这里插入图片描述
    MHA原理:

    MHA用于维持 MySQL Replication 中 master 库的高可用性,最大的特点是可以修复多个slave上的差异日志,最终使所有slave保持数据一致,然后从中选取一个充当新的 master,并让其他 slave 指向它。

    当master出现故障时,通过对比 slave 之间的 I/O thread 读取主库的 binlog 的 position 号,选取最接近的slave作为备胎(被选主库),其它从库通过与备胎对比,生成差异的中继日志,在备胎上运用从原来的 master 保存的 binlig,同时将备胎提升为master。最后在其他 slave 上运用相应的差异中继日志,并从新的 master 开始复制。

    优点:

    • 故障切换时,自动判断哪个从库与主库离的最近,并切换到上面
    • 支持binlog server,提高 binlog 的传送效率
    • 结合半同步功能,确保故障切换时数据不丢失

    三、实验环境介绍

    使用三台机器来完成本次MHA的搭建:

    	IP			主机名		系统版本		角色					 	节点
    172.25.5.1		lxn1		RHEL7		master node				node1
    
    172.25.5.3      lxn3		RHEL7		slave1 node				node2
    172.25.5.4      lxn4		RHEL7		slave2 node+manager		node3
    

    四、MHA搭建

    MHA下载:

    https://github.com/yoshinorim/mha4mysql-manager
    https://github.com/yoshinorim/mha4mysql-node

    wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz
    wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
    

    1、配置三台机器免密通信

    所有节点都执行生成密钥操作

    cd /root/.ssh/
    ssh-keygen -t dsa -P '' -f id_dsa
    cat id_dsa.pub >> authorized_keys
    
    • 以主库示例,所有节点都要操作
      在这里插入图片描述

    在主库上接收slave上的密钥

    scp 172.25.5.3:/root/.ssh/authorized_keys ./authorized_keys.3
    scp 172.25.5.4:/root/.ssh/authorized_keys ./authorized_keys.4
    

    在主库上执行合并密钥的命令

    cat authorized_keys.3 >> authorized_keys
    cat authorized_keys.4 >> authorized_keys
    

    在主库上将合并后的密钥文件发给其他节点

    scp authorized_keys 172.25.5.3:/root/.ssh/
    scp authorized_keys 172.25.5.4:/root/.ssh/
    
    • 完整命令截图(进供参考)

    在这里插入图片描述

    所有节点在/etc/hosts文件中写入本地解析:

    172.25.5.1      lxn1 node1
    172.25.5.3      lxn3 node2
    172.25.5.4      lxn4 node3
    

    测试

    能够互相ssh且不要密码,即成功!

    示例:

    在这里插入图片描述

    2、搭建主从环境

    环境说明

    本次实验搭建的是一主两从环境,使用的MySQL5.7版本,基于GTID+row模式

    在所有服务器MySQL上执行以下操作

    #创建主从复制帐号
    create user 'gtid'@'172.25.5.%' identified by 'gtid123';
    grant replication slave on *.* to 'gtid'@'172.25.5.%';
    flush privileges;
    #创建管理帐号
    create user 'manage'@'172.25.5.%' identified by 'manage123';
    grant all privileges on *.* to 'manage'@'172.25.5.%';
    flush privileges;
    

    在主库上复制数据到所有从库,完成在某个时刻GTID的同步

    mysqldump --single-transaction -uroot -p -A > all.sql
    scp all.sql node2:/root/
    scp all.sql node3:/root/
    

    在这里插入图片描述

    在各从库上恢复备份并配置主从复制,开启主从同步

    mysql -uroot -p < all.sql
    mysql -uroot -p
    
    root@localhost [(none)]>change master to
        -> master_host='172.25.5.1',
        -> master_user='gtid',
        -> master_password='gtid123',
        -> master_auto_position=1;
        
    root@localhost [(none)]>start slave;
    
    root@localhost [(none)]>show slave status\G
    
    • 注:
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
      为主从搭建成功!

    在这里插入图片描述

    3、安装MHA-Node节点

    在所有节点上安装数据节点

    首先安装 MySQL 依赖的 perl 环境

    yum install perl-DBD-MySQL.x86_64 -y
    

    解压 mha4mysql-node 包,并安装 perl-cpan

    tar -zxf mha4mysql-node-0.58.tar.gz 
    cd mha4mysql-node-0.58/
    yum install perl-CPAN* -y
    perl Makefile.PL
    make && make install
    

    4、安装配置 MHA-Manager 管理节点

    以下操作都是在node3(172.25.5.4)上完成的

    安装环境需要的介质包:

    • 注意:我的操作系统是rhel7,下载软件时注意软件版本问题
    yum install perl-DBD-MySQL*
    
    wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/RedHat:/RHEL-7/complete/x86_64/perl-Params-Validate-1.08-4.el7.x86_64.rpm
    rpm -ivh perl-Params-Validate-1.08-4.el7.x86_64.rpm 
    
    wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/csbuild:/Perl/RHEL_7/noarch/perl-Config-Tiny-2.20-1.2.noarch.rpm
    rpm -ivh perl-Config-Tiny-2.20-1.2.noarch.rpm
    
    wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/csbuild:/Perl/RHEL_7/noarch/perl-Log-Dispatch-2.41-2.2.noarch.rpm
    rpm -ivh perl-Log-Dispatch-2.41-2.2.noarch.rpm
    
    wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/7/aarch64/Packages/p/perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
    rpm -ivh perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
    

    安装管理节点

    tar -zxf mha4mysql-manager-0.58.tar.gz
    cd mha4mysql-manager-0.58
    perl Makefile.PL
    make && make install
    

    配置MHA

    mkdir /etc/mha
    mkdir -p /usr/local/mha
    cd /etc/mha/
    vim mha.conf
    #####################################################写入配置
    [server default]
    user=manage
    password=manage123
    manager_log=/usr/local/mha/manager.log
    manager_workdir=/usr/local/mha
    master_binlog_dir=/mvtech/mysql/logs
    remote_workdir=/usr/local/mha
    ssh_user=root
    repl_user=gtid
    repl_password=gtid123
    master_ip_failover_script=/usr/local/scripts/master_ip_failover
    master_ip_online_change_script=/usr/local/scripts/master_ip_online_change
    ping_interval=1
    
    [server1]
    hostname=172.25.5.1
    ssh_port=22
    master_binlog_dir=/data/mysql
    candidate_master=1
    port=3306
    
    [server2]
    candidate_master=1
    hostname=172.25.5.3
    ssh_port=22
    master_binlog_dir=/data/mysql
    port=3306
    
    [server3]
    hostname=172.25.5.4
    ssh_port=22
    master_binlog_dir=/data/mysql
    no_master=1
    port=3306
    ####################################################
    

    编辑 failover 切换脚本

    mkdir /usr/local/mha/scripts
    cd /usr/local/mha/scripts
    vim master_ip_failover
    #脚本内部的VIP和网卡需要根据自己的实际要求更改
    ###############################################写入
    #!/usr/bin/env perl  
    use strict;  
    use warnings FATAL =>'all';  
    
    use Getopt::Long;  
    
    my (  
    $command,          $ssh_user,        $orig_master_host, $orig_master_ip,  
    $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port  
    );  
    
    my $vip = '172.25.5.100/24';  # Virtual IP 这里需要根据自己的环境修改
    my $key = "1";  
    my $ssh_start_vip = "/sbin/ifconfig ens39:$key $vip";	#注意网卡  
    my $ssh_stop_vip = "/sbin/ifconfig ens39:$key down";  
    my $exit_code = 0;  
    
    GetOptions(  
    'command=s'          => \$command,  
    'ssh_user=s'         => \$ssh_user,  
    'orig_master_host=s' => \$orig_master_host,  
    'orig_master_ip=s'   => \$orig_master_ip,  
    'orig_master_port=i' => \$orig_master_port,  
    'new_master_host=s'  => \$new_master_host,  
    'new_master_ip=s'    => \$new_master_ip,  
    'new_master_port=i'  => \$new_master_port,  
    );  
    
    exit &main();  
    
    sub main {  
    
    #print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";  
    
    if ( $command eq "stop" || $command eq "stopssh" ) {  
    
            # $orig_master_host, $orig_master_ip, $orig_master_port are passed.  
            # If you manage master ip address at global catalog database,  
            # invalidate orig_master_ip here.  
            my $exit_code = 1;  
            eval {  
                print "\n\n\n***************************************************************\n";  
                print "Disabling the VIP - $vip on old master: $orig_master_host\n";  
                print "***************************************************************\n\n\n\n";  
    &stop_vip();  
                $exit_code = 0;  
            };  
            if ($@) {  
                warn "Got Error: $@\n";  
                exit $exit_code;  
            }  
            exit $exit_code;  
    }  
    elsif ( $command eq "start" ) {  
    
            # all arguments are passed.  
            # If you manage master ip address at global catalog database,  
            # activate new_master_ip here.  
            # You can also grant write access (create user, set read_only=0, etc) here.  
    my $exit_code = 10;  
            eval {  
                print "\n\n\n***************************************************************\n";  
                print "Enabling the VIP - $vip on new master: $new_master_host \n";  
                print "***************************************************************\n\n\n\n";  
    &start_vip();  
                $exit_code = 0;  
            };  
            if ($@) {  
                warn $@;  
                exit $exit_code;  
            }  
            exit $exit_code;  
    }  
    elsif ( $command eq "status" ) {  
            print "Checking the Status of the script.. OK \n";  
            `ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;  
            exit 0;  
    }  
    else {  
    &usage();  
            exit 1;  
    }  
    }  
    
    # A simple system call that enable the VIP on the new master  
    sub start_vip() {  
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;  
    }  
    # A simple system call that disable the VIP on the old_master  
    sub stop_vip() {  
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;  
    }  
    
    sub usage {  
    print  
    "Usage: master_ip_failover –command=start|stop|stopssh|status –orig_master_host=host –orig_master_ip=ip –orig_master_port=po  
    rt –new_master_host=host –new_master_ip=ip –new_master_port=port\n";  
    }
    ###############################################
    
    chmod +x master_ip_failover 
    

    编写 online_change 脚本

    vim master_ip_online_change
    
    #注意VIP
    ###############################################写入
    #/bin/bash  
    source /root/.bash_profile  
    
    vip=`echo '172.25.5.100/24'`  # Virtual IP  
    key=`echo '1'`  
    
    command=`echo "$1" | awk -F = '{print $2}'`  
    orig_master_host=`echo "$2" | awk -F = '{print $2}'`  
    new_master_host=`echo "$7" | awk -F = '{print $2}'`  
    orig_master_ssh_user=`echo "${12}" | awk -F = '{print $2}'`  
    new_master_ssh_user=`echo "${13}" | awk -F = '{print $2}'`  
    
    stop_vip=`echo "ssh root@$orig_master_host /sbin/ifconfig  eth0:$key  down"`  
    start_vip=`echo "ssh root@$new_master_host /sbin/ifconfig  eth0:$key  $vip"`  
    
    if [ $command = 'stop' ]  
       then  
       echo -e "\n\n\n***************************************************************\n"  
       echo -e "Disabling the VIP - $vip on old master: $orig_master_host\n"  
       $stop_vip  
       if [ $? -eq 0 ]  
          then  
          echo "Disabled the VIP successfully"  
       else  
          echo "Disabled the VIP failed"  
       fi  
       echo -e "***************************************************************\n\n\n\n"  
    fi  
    
    if [ $command = 'start' -o $command = 'status' ]  
       then  
       echo -e "\n\n\n***************************************************************\n"  
       echo -e "Enabling the VIP - $vip on new master: $new_master_host \n"  
       $start_vip  
       if [ $? -eq 0 ]  
          then  
          echo "Enabled the VIP successfully"  
       else  
          echo "Enabled the VIP failed"  
       fi  
       echo -e "***************************************************************\n\n\n\n"  
    fi
    #############################################
    
    chmod +x master_ip_online_change 
    

    检测所有主机的连通性:

    /usr/local/bin/masterha_check_ssh --conf=/etc/mha/mha.conf
    

    在这里插入图片描述
    检测复制状态:

    /usr/local/bin/masterha_check_repl --conf=/etc/mha/mha.conf
    

    在这里插入图片描述

    • 注:这里容易报错,请仔细看报错,能解决

    5、在主库上添加VIP

    ip addr add 172.25.5.100/24 dev ens39
    

    在这里插入图片描述

    6、在管理节点启动MHA服务

    启动MHA:

    nohup masterha_manager --conf=/etc/mha/mha.conf > /tmp/mha_manager.log < /dev/null 2>&1 &
    

    检测MHA是否启动:

    masterha_check_status --conf=/etc/mha/mha.conf
    

    在这里插入图片描述

    五、模拟主库故障,故障切换

    0、模拟主库(172.25.5.1)故障

    kill 掉主库MySQL服务

    在这里插入图片描述

    1、MHA 自动切换主库

    VIP 漂移
    在这里插入图片描述

    在node2(172.25.5.3)上:

    VIP 漂移
    在这里插入图片描述

    在node3(172.25.5.4)上看主从信息:

    • master切换到了node2(172.25.5.3),高可用成功!
      在这里插入图片描述
      切换 master 后,MHA进程会自动关闭 ,并生成文件 mha.failover.complete
    masterha_check_status --conf=/etc/mha/mha.conf
    

    在这里插入图片描述

    • mha.failover.complete 文件:该文件生成后,将不在允许主库故障后自动切换

    2、手动切换主库

    手动failover,这种场景意味着在业务上没有启用MHA自动切换功能,当主服务器故障时,人工手动调用MHA来进行故障切换操作

    环境介绍

    由于刚才 MHA 自动切换成功,所以现在主库是172.25.5.3,重启宕掉的主库后成为新的slave

    在这里插入图片描述
    为了确保不会自动切换,停掉 MHA 进程:

    masterha_stop --conf=/etc/mha/mha.conf
    

    在这里插入图片描述
    将主库kill掉
    在这里插入图片描述

    主库切换失败:
    在这里插入图片描述

    MHA 自动切换主库失败后,可以用手动切换

    在管理节点操作:

    masterha_master_switch --master_state=dead --conf=/etc/mha/mha.conf --dead_master_host=172.25.5.3 --dead_master_port=3306 --new_master_ip=172.25.5.1 --new_master_port=3306
    

    在这里插入图片描述
    切换成功:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    将宕掉的MySQL主库恢复起来

    node1,原主库

    mysqld_safe --defaults-file=/etc/my.cnf &
    

    重新指向新的主库,配置主从

    node1,原主库

    mysql -uroot -p
    
    root@localhost [(none)]>change master to
        -> master_host='172.25.5.3',
        -> master_user='gtid',
        -> master_password='gtid123',
        -> master_auto_position=1;
     
     root@localhost [(none)]>start slave;
     root@localhost [(none)]>show slave status\G
    
    • 至此,新的一主两从结构完成!

    在这里插入图片描述
    在这里插入图片描述

    六、让宕掉的主库重新成为新的主库

    • 手动回切需要关闭MHA监控,如下图
    • masterha_check_status --conf=/etc/mha/mha.conf 来查看MHA监控是否打开

    在这里插入图片描述
    将宕掉的MySQL主库重启并成为新的 slave 后,在管理节点操作

    masterha_master_switch --conf=/etc/mha/mha.conf --master_state=alive --new_master_host=172.25.5.1 --orig_master_is_new_slave
    

    在这里插入图片描述
    在node2节点(刚才故障切换的新主库)上可以看到:node2已经成为了一个slave,而主库是172.25.5.1(node1)
    在这里插入图片描述

    展开全文
  • 使用Xenon实现MySQL高可用集群

    千次阅读 2020-06-23 19:03:54
    使用Xenon实现MySQL高可用集群 1、Xenon 介绍 https://github.com/radondb/xenon #VIP就是对外提供服务的IP,比如jdbc配置就是写这个VIP xenon 架构介绍,每个MySQL 节点安装了一个agent ,agent的作用:...

    使用Xenon实现MySQL高可用集群

    1、Xenon 介绍

     

    https://github.com/radondb/xenon
    # VIP 就是对外提供服务的IP,比如jdbc配置就是写这个VIP
    

    xenon 架构介绍 ,每个MySQL 节点安装了一个agent ,agent的作用:ping 一下本来MySQL是否存活,然后把本地的gtid 获取出来,写入到local index ,看各节点的local index的gtid 谁大,谁大谁做作为主库。

    每个agent 都有一个心跳信息,主库的Leader 和 从库的Follower 的心跳时间是可以配置的,超过了多长时间,就认为主库不存活,然后从节点选举主库。

    xenon 为什么要用三节点:其实用了增强半同步架构,最少有一个从节点,给主库ACK响应。两个从节点,就是为了防止,一个从节点挂了,主库不对外工作了。

    xenon 的约束

    • 针对金融环境,基于GTID,增强半同步的复制架构。

    • mysql与xenon使用同一个用户启动(例如:都使用mysql用户启动,或都使用root用户启动,正常都使用mysql用户)

    • 要使用mysqld_safe启动mysql

    实际 xenon 环境使用:

    • 如果需要读写分离可以结合 ProxySQL

    • xenon 做高可用

    2、架构环境说明

    IPCentosHostNameMySQLxtrabackupuser备注
    10.0.0.150Centos 7.8mysql-150MySQL 8.0.198.0.11mysql主库
    10.0.0.151Centos 7.8mysql-152MySQL 8.0.198.0.11mysql从库
    10.0.0.152Centos 7.8mysql-152MySQL 8.0.198.0.11mysql从库

    vip:10.0.0.100,对外提供服务的IP

    3、MySQL 安装准备

    注:MySQL 8.0.19 安装省略

    3.1、MySQL 主从复制搭建

    1. 基于 GTID+ROW 主从复制架构

    2. 参数设置:(从库操作151,152,设置一下参数)

    set global super_only=1;
    set global read_only=1;
    
    1. 配置成主从:(151和152 change 到 150)

    change master to \
    master_host='10.0.0.150', \
    master_user='repl', \
    master_password='123456', \
    master_port=3306, \
    master_auto_position=1;
    

    注:这里配置主从复制省略

    3.2、MySQL 半同步复制配置

    1、安装插件(所有机器150,151,152)

    mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
    mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
    

    2、启动半同步(所有机器)

    set global rpl_semi_sync_master_enabled=1;
    set global rpl_semi_sync_master_timeout=2147483648;
    set global rpl_semi_sync_slave_enabled=1;
    

    注:其实这里只需要所有节点安装半同步插件,并不需要启动半同步。xenon 会自动配置半同步

    3.3、系统配置

    1. 修改三台主机的mysql账号指定shell 为/bin/bash ,并改密码(三台机密码改成一样):

    # 修改环境变量,三台机器都需要 如下相同操作
    [root@mysql-150 ~]# chsh mysql
    Changing shell for mysql.
    New shell [/sbin/nologin]: /bin/bash
    Shell changed.
    
    # 修改 mysql 用户密码,这里密码我设置都是mysql
    shell# passwd mysql
    
    1. 修改 mysql 环境变量:从其它普通账号复制 .bash* 到mysql 用户家目录(三台机器操作)

    shell# mkdir /home/mysql
    shell# cp /root/.bash* /home/mysql/
    shell# chown -R mysql:mysql /home/mysql
    
    1. 添加mysql账号的sudo权限 (所有机器操作)

    # visudo
    mysql   ALL=(ALL)       NOPASSWD: /usr/sbin/ip
    

    3.4、配置 hosts 解析

    所有机器配置

    vim /etc/hosts
    10.0.0.150  mysql-150
    10.0.0.151  mysql-151
    10.0.0.152  mysql-152
    

    3.5、各节点配置 ssh 互信

    3.5.1、150 配置

    [root@mysql-150 ~]# su - mysql
    
    [mysql@mysql-150 ~]$ pwd
    /home/mysql
    
    [mysql@mysql-150 ~]$ ssh-keygen 
    
    [mysql@mysql-150 ~]$ cd .ssh
    
    [mysql@mysql-150 .ssh]$ ls
    id_rsa  id_rsa.pub
    #id_rsa 私钥文件
    #is_rsa.pub 公钥文件
    
    [mysql@mysql-150 .ssh]$ cat id_rsa.pub > authorized_keys
    
    [mysql@mysql-150 .ssh]$ chmod 600 /home/mysql/.ssh/*
    
    # 151,152机器 创建.ssh 目录, 并且修改权限为700
    [mysql@mysql-151 ~]$ mkdir .ssh
    [mysql@mysql-152 ~]$ mkdir .ssh
    [mysql@mysql-151 ~]$ chmod 700 .ssh/
    [mysql@mysql-152 ~]$ chmod 700 .ssh/
    
    # 拷贝authorized_keys 到151和152 机器
    [mysql@mysql-150 .ssh]$ scp authorized_keys mysql@10.0.0.151:~/.ssh
    
    [mysql@mysql-150 .ssh]$ scp authorized_keys mysql@10.0.0.152:~/.ssh
    
    # 验证 ssh 信任
    [mysql@mysql-150 .ssh]$ ssh mysql@10.0.0.151
    [mysql@mysql-150 .ssh]$ ssh mysql@10.0.0.152
    
    能够无密码登陆,就表示成功了
    

    其实配置可以像 151配置,152配置那样, 但是上面写了一个详细过程是为了了解 配置ssh 信任,而方便排错

    3.5.1、151 配置

    [root@mysql-151 ~]# su - mysql
    
    [mysql@mysql-151 ~]$ ssh-keygen 
    
    # 拷贝公钥到 150 和 152 节点
    [mysql@mysql-151 ~]$ ssh-copy-id mysql@10.0.0.150
    [mysql@mysql-151 ~]$ ssh-copy-id mysql@10.0.0.152
    
    # 无密码连接测试
    [mysql@mysql-151 ~]$ ssh mysql@10.0.0.150
    [mysql@mysql-151 ~]$ ssh mysql@10.0.0.152
    

    3.5.1、152 配置

    [root@mysql-152 ~]# su - mysql
    
    [mysql@mysql-152 ~]$ ssh-copy-id mysql@10.0.0.150
    [mysql@mysql-152 ~]$ ssh-copy-id mysql@10.0.0.151
    
    [mysql@mysql-152 ~]$ ssh mysql@10.0.0.150
    [mysql@mysql-152 ~]$ ssh mysql@10.0.0.151
    

    4、xenon 配置准备

    4.1、配置 golang 环境

    # 所有机器配置 golang 【150,151,152】
    
    # 1、下载
    wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
    
    # 2、解压
    tar -zxf go1.14.4.linux-amd64.tar.gz -C /usr/local/
    
    #3、配置 go 环境
    vim /etc/profile
    export GOPATH=/usr/local/go/bin
    export PATH=$PATH:$GOPATH
    
    source /etc/profile
    
    # 4、查看 go 版本
    shell# go version
    go version go1.14.4 linux/amd64
    

    4.2、安装xtrabackup

    所有节点安装

    # 下载xtrabackup 软件
    wget https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.11/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.11-1.el7.x86_64.rpm
    
    yum localinstall percona-xtrabackup-80-8.0.11-1.el7.x86_64.rpm
    
    
    yum -y install libdbi-dbd-mysql
    

    4.3、安装 xenon

    所有节点安装,以MySQL-150 为安装为例

    1. 安装git (所有节点)

    [root@mysql-150 ~]# yum -y install git
    [root@mysql-150 ~]# mkdir /mygit
    [root@mysql-150 ~]# cd /mygit
    [root@mysql-150 mygit]# git clone https://github.com/radondb/xenon
    
    1. 安装 xenon (所有节点)

    [root@mysql-150 ~]# cd /mygit/xenon/
    [root@mysql-150 xenon]# make
    
    [root@mysql-150 xenon]# mkdir -p /data/xenon
    [root@mysql-150 xenon]# cp -r /mygit/xenon/bin /data/xenon/
    [root@mysql-150 xenon]# cp -r /mygit/xenon/conf/xenon-simple.conf.json /data/xenon/xenon.json
    [root@mysql-150 xenon]# echo "/etc/xenon/xenon.json" > /data/xenon/bin/config.path
    
    [root@mysql-150 xenon]# mkdir /etc/xenon
    [root@mysql-150 xenon]# mv /data/xenon/xenon.json /etc/xenon/
    
    [root@mysql-150 xenon]# chown -R mysql:mysql /data/xenon/
    [root@mysql-150 xenon]# chown -R mysql:mysql /etc/xenon/
    
    # 其他节点如上,相同操作
    

    4.4、配置xenon

    所有机器配置xenon,下面以150为例,其它机器,只需改成本机IP即可

    [root@mysql-150 ~]# cat /etc/xenon/xenon.json 
    {
        "server":
        {
            "endpoint":"10.0.0.150:8801"
        },
    
        "raft":
        {
            "meta-datadir":"raft.meta",
            "heartbeat-timeout":1000,
            "election-timeout":3000,
            "leader-start-command":"sudo /sbin/ip a a 10.0.0.100/16 dev eth0 && arping-c3 -A 10.0.0.100 -1 ethO",
            "leader-stop-command":"sudo /sbin/ip a d 10.0.0.100/16 dev eth0"
        },
    
        "mysql":
        {
            "admin":"root",
            "passwd":"",
            "host":"127.0.0.1",
            "port":3306,
            "basedir":"/usr/local/mysql",
            "defaults-file":"/data/mysql/mysql3306/my3306.cnf",
            "ping-timeout":1000,
            "master-sysvars":"tokudb_fsync_log_period=default;sync_binlog=default;innodb_flush_log_at_trx_commit=default",
            "slave-sysvars": "tokudb_fsync_log_period=1000;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"
        },
    
        "replication":
        {
            "user":"repl",
            "passwd":"123456"
        },
    
        "backup":
        {
            "ssh-host":"10.0.0.150",
            "ssh-user":"mysql",
            "ssh-passwd":"mysql",
            "ssh-port":22,
            "backupdir":"/data/mysql/mysql3306/data",
            "xtrabackup-bindir":"/usr/bin",
            "backup-iops-limits":100000,
            "backup-use-memory": "2GB",
            "backup-parallel": 2
        },
    
        "rpc":
        {
            "request-timeout":500
        },
    
        "log":
        {
            "level":"INFO"
        }
    }
    

    其他节点的配置文件修改

    把 /etc/xenon/xenon.json 拷贝到 另外两个节点(151,152) 
    "endpoint":"10.0.0.150:8801"  #需要把 endpoint 换成各节点相应ip
    "ssh-host":"10.0.0.150",      #需要把backup 下的 换成各节点相应ip
    
    # 如果是mysql-151
    "endpoint":"10.0.0.151:8801"
    "ssh-host":"10.0.0.151", 
    
    # 如果是mysql-152
    "endpoint":"10.0.0.152:8801"
    "ssh-host":"10.0.0.152", 
    
    
    # 这个是 vip 生成的脚本 
    sudo /sbin/ip a a 10.0.0.100/16 dev eth0 && arping-c3 -A 10.0.0.100 -1 ethO
    
    # 这个是删除 vip 的脚本
    sudo /sbin/ip a d 10.0.0.100/16 dev eth0
    

    4.5、开启 xenon 并配置集群

    1. 启动xenon,用mysql用户启动

    # 所有节点启动 xenon (150,151,152)
    su - mysql
    cd /data/xenon/bin/
    nohup /data/xenon/bin/xenon -c /etc/xenon/xenon.json > /data/xenon/xenon.log 2>&1 &
    

    2. 添加 xenon 节点成员

    # 所有节点都要添加节点成员(150,151,152)
    ./xenoncli cluster add 10.0.0.150:8801,10.0.0.151:8801,10.0.0.152:8801
    

    3. 查看 vip 信息

    # 查看 vip 在台机器
    [mysql@mysql-150 bin]$ ip addr show | grep 10.0.0.100
        inet 10.0.0.100/16 scope global eth0
    
    # 测试 151 和 152 能否 连接 10.0.0.100
    [mysql@mysql-151 ~]$ mysql -h 10.0.0.100 -u keme -p
    mysql> system hostname -I # 这是查看当前ssh系统信息的ip
    10.0.0.151 192.168.122.1 
    mysql> select @@hostname; # 这是查看 mysql 连接的主机名
    +------------+
    | @@hostname |
    +------------+
    | mysql-150  |
    +------------+
    # 通过 vip 测试写入
    mysql> use keme #这是我做实验的测试库
    mysql> insert into t2 values (13);
    Query OK, 1 row affected (0.01 sec)
    
    # 从上验证,通过 vip 连接没问题 
    

    4. 查看xenon集群状态信息

    LEADER 是主库 10.0.0.150 
    FOLLOWER 是从库 10.0.0.151,10.0.0.152
    

    5、检验 xenon 环境

    5.1、检测 VIP 切换

    1、查看VIP信息

    # 查看 VIP 信息 
    [mysql@mysql-150 bin]$ ip addr show | grep 10.0.0.100
        inet 10.0.0.100/16 scope global eth0
    # 可以知道 VIP 信息,在10.0.0.150这台机器
    

    2、进行模拟故障

    关闭 150 数据库,看看 VIP 是不是切换到其他机器

    [mysql@mysql-150 bin]$ mysqladmin -S /tmp/mysql3306.sock -p shutdown
    
    # 查看集群状态信息
    [mysql@mysql-150 bin]$ ./xenoncli cluster status
    

    从上图可知:VIP 切换成功了

    xenon 会自动把宕机的数据库给启动起来,Leader:10.0.0.152

    5.2、数据库重建

    5.2.1、模拟删除主库数据目录

    这是我的实验操作,生产环境谨慎这样操作

    [root@mysql-152 ~]# cd /data/mysql/mysql3306
    [root@mysql-152 mysql3306]# rm -rf data
    # kill 掉mysql 进程,我这里的数据库进程号是4718和6074
    [root@mysql-152 mysql3306]# kill -9 4718 6074
    
    # 查看以下 vip 信息 和 集群状态信息,是否正常切换
    [root@mysql-152 mysql3306]# ip addr show | grep 10.0.0.150
    一定要确认 VIP 飘到新的主库上
    

    从上图得知:Leader: 10.0.0.151

    5.2.2、进行数据库重建

    [root@mysql-152 mysql3306]# su - mysql
    [mysql@mysql-152 ~]$ cd /data/xenon/bin/
    
    # 进行重建
    [mysql@mysql-152 bin]$ mkdir /data/mysql/mysql3306/data
    [mysql@mysql-152 bin]$ ./xenoncli mysql rebuildme
    

    重建成功截图如下

    # 查看重建后的152的数据库信息,是否正常重建,是不是正常恢复到集群节点了
    [mysql@mysql-152 bin]$ ss -antlp | grep mysql
    LISTEN    0  100   [::]:3306      [::]:*     users:(("mysqld",pid=15545,fd=30))
    [mysql@mysql-152 bin]$ /data/xenon/bin/xenoncli cluster status
    # 如下图
    

    从上面的得知,rm -rf 数据库目录 ,只需要xenoncli mysql rebuildme,数据库目录就自动重建成功了,并也自动加入了xenon 管理的高可用集群。

     

     

    展开全文
  • Mysql高可用架构集群--MyCat集群部署HAProxy+MyCat Mysql高可用 MyCat HAProxy
  • 企业主流MySQL高可用集群

    千次阅读 2019-04-03 20:59:28
    企业主流MySQL高可用集群 了解 MySQL 集群之前,先看看单节点数据库的弊病: 大型互联网程序用户群体庞大,所以架构需要特殊设计。 单节点数据库无法满足大并发时性能上的要求。 单节点的数据库没有冗余设计,无法...

    选型

    目前最流行的是:主从复制、基于Galera的方案

    企业主流MySQL高可用集群

    了解 MySQL 集群之前,先看看单节点数据库的弊病:

    • 大型互联网程序用户群体庞大,所以架构需要特殊设计。
    • 单节点数据库无法满足大并发时性能上的要求。
    • 单节点的数据库没有冗余设计,无法满足高可用。
    • 单节点 MySQL无法承载巨大的业务量,数据库负载巨大。

    一、MHA

    属于是读(从)写(主)分离,主从复制

    MHA,即MasterHigh Availability Manager and Toolsfor MySQL,是日本的一位MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQL Replication 环境,目的在于维持Master主库的高可用性。

    MHA(Master High Availability)是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步).

    Replication 采用异步复制,无法保证数据的一致性。

    Replication集群写入操作:
    在这里插入图片描述
    当一个写入请求到达 Master数据库时,Master数据库执行写入操作,然后 Master 向客户端返回写入成功,同时异步的复制写入操作给 Slave数据库,如果异步复制时出现问题,从数据库将无法执行写入操作,而客户端得到的是写入成功。这也是弱一致性的体现

    详见:https://blog.51cto.com/sumongodb/1951495

    二、MM+keepalived

    双主配合keepalived这种架构设计,也是基于主从复制的原理而搭建的。

    使用MySQL主主复制技术+Keepalived是一种简单、便捷的解决方案,在高可用集群环境中,keepalived使用VIP,使用Keepalived自带的服务监控功能和自定义脚本来实现MySQL故障时自动切换,非常灵活。

    详见:https://blog.51cto.com/sumongodb/1953244

    三、PXC(基于GaLera协议)

    PXC是percona公司的percona xtraDB cluster.简称PXC。它是基于GaLera协议的高可用集群方案。可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据强一致性。

    PXC 采用同步复制,事务在所有集群节点要么同时提交,要么不提交。

    下面看看 PXC写入操作:
    在这里插入图片描述
    当一个写入请求到达PXC集群中的一个 mysql(node1数据库) 数据库时,node1数据库会将该写入请求同步给集群中的其他所有数据库,等待所有数据库都成功提交事务后,node1节点才会将写入成功的结果告诉给 node1的客户端。

    PXC 的强一致性对保存高价值数据时特别重要。

    详见:https://blog.51cto.com/sumongodb/1956086

    PXC方案 和 Replication方案对比

    两种集群方案特性如下图:
    在这里插入图片描述

    1. 先看看 PXC方案
      在这里插入图片描述
      很明显 PXC方案在任何一个节点写入的数据都会同步到其他节点,数据双向同步的(在任何节点上都可以同时读写)。

    2. Replication 集群方案:
      在这里插入图片描述
      Replication方案只能在Master数据库进行写操作,在Slave数据库进行读操作。如果在Slave数据库中写入数据,Master数据库是不能知道的(单向同步的)。

    展开全文
  • Kubernetes中部署MySQL高可用集群

    千次阅读 2020-05-12 09:07:32
    MySql简介MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,...

    MySql简介

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

    MySQL的高可用方案

    下文介绍的MySQL高可用方案采用主从复制+读写分离,即由单一的master和多个slave所构成。其中,客户端通过master对数据库进行写操作,通过slave端进行读操作。master出现问题后,可以将应用切换到slave端。 此方案是MySQL官方提供的一种高可用解决方案,节点间的数据同步采用MySQL Replication技术。MySQL Replication从一个MySQL数据库服务器(master)的数据复制到一个或多个MySQL数据库服务器(slave)。在默认情况下,复制是异步的;slave不需要一直接收来自主机的更新。根据配置,可以复制数据库中的所有数据库、选定的数据库,或者特定的表。

    安装部署

    1.创建ConfigMap

    通过YAML文件创建名为mysql的ConfigMap

    cat mysql-configmap.yaml
    
    apiVersion:v1
    kind:ConfigMap
    metadata:
      name:mysql
      labels:
        app:mysql
    data:
      master.cnf:|
        # Apply this config only on the master.
        [mysqld]
        log-bin
        log_bin_trust_function_creators=1
        lower_case_table_names=1
      slave.cnf:|
        # Apply this config only on slaves.
        [mysqld]
        super-read-only
        log_bin_trust_function_creators=1

    kubectl apply -f mysql-configmap.yaml -n kube-public

    2. 创建Services

    通过yaml文件创建两个service,分别是mysql和mysql-read:

    cat mysql-service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
      labels:
        app: mysql
    spec:
      ports:
      - name: mysql
        port: 3306
      clusterIP: None
      selector:
        app: mysql
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-read
      labels:
        app: mysql
    spec:
      ports:
      - name: mysql
        port: 3306
      selector:
        app: mysql
    

    kubectl apply -f mysql-service.yaml -n kube-public

    3.创建StatefulSet

    通过yaml文件创建名为mysql的StatefulSet:

    cat  mysql-statefulset.yaml

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql
    spec:
      selector:
        matchLabels:
          app: mysql
      serviceName: mysql
      replicas: 3
      volumeClaimTemplates:
      - metadata:
          name: data
          annotations:
            volume.beta.kubernetes.io/storage-class: "nfs"
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 10Gi
      template:
        metadata:
          labels:
            app: mysql
        spec:
          initContainers:
          - name: init-mysql
            image: mysql:5.7
            command:
            - bash
            - "-c"
            - |
              set -ex
              [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
              ordinal=${BASH_REMATCH[1]}
              echo [mysqld] > /mnt/conf.d/server-id.cnf
              echo server-id=$((100 + $ordinal)) >> /mnt/conf.d/server-id.cnf
              if [[ $ordinal -eq 0 ]]; then
                cp /mnt/config-map/master.cnf /mnt/conf.d/
              else
                cp /mnt/config-map/slave.cnf /mnt/conf.d/
              fi
            volumeMounts:
            - name: conf
              mountPath: /mnt/conf.d
            - name: config-map
              mountPath: /mnt/config-map
          - name: clone-mysql
            image: gcr.io/google-samples/xtrabackup:1.0
            command:
            - bash
            - "-c"
            - |
              set -ex
              [[ -d /var/lib/mysql/mysql ]] && exit 0
              [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
              ordinal=${BASH_REMATCH[1]}
              [[ $ordinal -eq 0 ]] && exit 0
              ncat --recv-only mysql-$(($ordinal-1)).mysql 3307 | xbstream -x -C /var/lib/mysql
              xtrabackup --prepare --target-dir=/var/lib/mysql
            volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
              subPath: mysql
            - name: conf
              mountPath: /etc/mysql/conf.d
          containers:
          - name: mysql
            image: mysql:5.7
            env:
            - name: MYSQL_ALLOW_EMPTY_PASSWORD
              value: "1"
            ports:
            - name: mysql
              containerPort: 3306
            volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
              subPath: mysql
            - name: conf
              mountPath: /etc/mysql/conf.d
            resources:
              requests:
                cpu: 500m
                memory: 1Gi
            livenessProbe:
              exec:
                command: ["mysqladmin", "ping"]
              initialDelaySeconds: 30
              periodSeconds: 10
              timeoutSeconds: 5
            readinessProbe:
              exec:
                command: ["mysql", "-h", "127.0.0.1", "-e", "SELECT 1"]
              initialDelaySeconds: 5
              periodSeconds: 2
              timeoutSeconds: 1
          - name: xtrabackup
            image: gcr.io/google-samples/xtrabackup:1.0
            ports:
            - name: xtrabackup
              containerPort: 3307
            command:
            - bash
            - "-c"
            - |
              set -ex
              cd /var/lib/mysql
              if [[ -f xtrabackup_slave_info ]]; then
                mv xtrabackup_slave_info change_master_to.sql.in
                rm -f xtrabackup_binlog_info
              elif [[ -f xtrabackup_binlog_info ]]; then
                [[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1
                rm xtrabackup_binlog_info
                echo "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\
                      MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.in
              fi
              if [[ -f change_master_to.sql.in ]]; then
                echo "Waiting for mysqld to be ready (accepting connections)"
                until mysql -h 127.0.0.1 -e "SELECT 1"; do sleep 1; done
                echo "Initializing replication from clone position"
                mv change_master_to.sql.in change_master_to.sql.orig
                mysql -h 127.0.0.1 <<EOF
              $(<change_master_to.sql.orig),
                MASTER_HOST='mysql-0.mysql',
                MASTER_USER='root',
                MASTER_PASSWORD='',
                MASTER_CONNECT_RETRY=10;
              START SLAVE;
              EOF
              fi
              exec ncat --listen --keep-open --send-only --max-conns=1 3307 -c \
                "xtrabackup --backup --slave-info --stream=xbstream --host=127.0.0.1 --user=root"
            volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
              subPath: mysql
            - name: conf
              mountPath: /etc/mysql/conf.d
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
          volumes:
          - name: conf
            emptyDir: {}
          - name: config-map
            configMap:
              name: mysql
    

    kubectl apply -f mysql-statefulset.yaml -n kube-public

    通过执行如下的命令可以查看启动过程:

    $ kubectl get pods -lapp=mysql --watch --namespace=kube-public

    在启动后,应该能够看到如下的信息:


    注:上面配置说明

    volumeClaimTemplates:

     - metadata:

         name: data

         annotations:

           volume.beta.kubernetes.io/storage-class: "nfs"

       spec:

         accessModes: [ "ReadWriteOnce" ]

         resources:

           requests:

             storage: 10Gi

    上面这段表示动态申请pvc,存储类是由nfs创建的,前提是创建nfs的存储类,创建方法如下:

    cat  class.yaml

    kind: StorageClass

    apiVersion: storage.k8s.io/v1

    metadata:

     name: nfs

    provisioner: example.com/nfs

    kubectl apply -f class.yaml

    动态pvc创建可参考:

    kubernetes集群中部署EFK日志管理系统

    MySQL部署环境验证

    1)通过运行一个临时的容器(使用mysql:5.7镜像),使用MySQL 客户端发送测试请求给MySQL master节点(主机名为mysql-0.mysql;跨命名空间的话,主机名请使用mysql-0.mysql.kube-public)

    kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never -- mysql -h mysql-0.mysql.kube-public

    CREATE DATABASE demo;
    CREATE TABLE demo.messages (message VARCHAR(250));
    INSERT INTO demo.messages VALUES ('hello');

    在master节点上创建demo数据库,并创建一个只有message字段的demo.messages的表,并为message字段插入hello值。

    2)使用主机名为mysql-read来发送测试请求给服务器:

    kubectl run mysql-client --image=mysql:5.7 -i -t --rm --restart=Never -- mysql -h mysql-read.kube-public


    技术交流群

    为了大家更快速的学习知识,掌握技术,随时沟通问题,特组建了技术交流群,大家在群里可以分享自己的技术栈,抛出日常问题,群里会有很多大佬及时解答,这样我们就会结识很多志同道合的人,群里还有很多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS的免费文章和视频,长按下图可加我微信,备注运维或者k8s或者devops即可进群,让我们共同努力,向着美好的未来出发吧~~~

    微信:luckylucky421302

    微信公众号

    长按如下指纹可关注公众号·


    参考:https://www.kubernetes.org.cn/3985.html

    展开全文
  • mysql高可用集群部署方案(mha+atlas+keepalived)

    万次阅读 多人点赞 2018-09-13 11:44:06
    一、mysql高可用前提  在许多比较重要的系统中,基本上都是24h*365d不间断运行的。   对于应用程序来讲,可以做haproxy+app 或 nginx+app的集群。好,问题来了,当应用程序的性能调优后,那么瓶颈就卡在...
  • MySQL高可用负载均衡集群部署
  • 文件版本 V1.0 文件编号 R&D0008 发布日期 2016-08-10 编 制 xxx 审 批 MySQL MHA文档总结 xxx 版权所有 目录 TOC \o "1-3" \h \u 28249 ? MySQL MHA介绍 4 1352 ? 操作流程步骤 5 15385 ? 拓扑图演变 5 6014 ? MHA...
  • Mysql高可用集群架构

    2014-08-01 15:08:36
    数据库位于现代企业应用的核心,它储存了组织机构中最有价值的资产,包括客户信息、产品信息、...对于希望在当今瞬息万变的经济环境立于不败之地并取得成功的企业来说,构建一个具有高可用性的 IT 基础架构至关重要。
  • 能够帮助学员迅速掌握:MySQL 可用的多种方式,包括DRBD + heartbeat 实现可用;Galera 高可用集群 PXC;MMM 集群和 MHA 可用 ;LVS + Keepalived 实现可用 等等
  • MYSQL高可用集群架构-MHA架构

    万次阅读 多人点赞 2018-12-06 15:24:20
    1 MHA简介:MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升...
  • 本资源为kubernetes集群部署mysql高可用读写分离数据库,内含所有需要的yaml文件,有需要的可进行下载
  • 这是搭建mysql高可用集群所需的软件包,包含MHA 管理节点的主配置文件和VIP地址切换perl脚本
  • mysql高可用集群方案

    2019-05-25 12:02:00
    这里有一篇关于Mysql高可用方案的干货文章:[干货分享] 一文了解数据库高可用容灾方案的设计与实现 网友们公司中的使用方案讨论:想问各位大大 MySQL 是怎么做高可用的? 一、Mysql高可用解决方案 方案一:共享...
  • keepalived+mysql实现双主可用。keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成...使用keepalive可以灵活的配置各种应用的高可用集群方案。
  • MySQL高可用浅析

    2020-12-14 21:48:51
    对于多数应用来说,MySQL都是作为关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应...
  • MySQL Cluster是MySQL适合于分布式计算环境的实用、冗余版本。Cluster的汉语是“集群”的意思。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。 MySQL Cluster 是一种技术,该技术...
  • 搭建PXC集群,实现MySQL高可用集群

    万次阅读 2018-05-25 18:08:32
    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法。PXC集群以节点组成(推荐至少3节点,后面会讨论两节点的情况),每个节点都是基于常规的 MySQL/Percona Server,意味着你可以从集群中...
  • 1、简介2、基本环境3、配置MySQL主主复制4、中间件简述4.1、Haproxy介绍4.2、keepalived介绍5、中间件的安装与配置(haproxy、keepalived)5.1、安装haproxy1)、编译安装haproxy2)、提供启动脚本3)、提供配置文件...
  • 导读:作者:知数堂学员-邓志航;MySQLDBA,天生的MySQL爱好者,热衷于为他人解决问题,善于总结和分享。对数据平台构建和排查疑难问题有非常浓厚的兴趣一、目的实现...
  • docker中搭建mysql高可用集群-percona-xtradb-cluster *percona-xtradb-cluster是一款很棒的mysql高可用集群解决方案。 特点是每个节点都能进行读写且都保存全量的数据。也就是说在任何一个节点进行写入操作,都会...
  • 实用文档 MySQL高可用方案 1. 概述 随着互联网的发展 数据库的数据量也日益增长 并发也越来也 各种高可用 并发方案也呼之而出 这里我们想介绍一下高可用方案 我们在编写高可用方 案的时候基本都会考虑下列几点 1...
  • 安装docker 安装PXC镜像 docker pull percona/percona-xtradb-cluster 本地安装PXC镜像 docker load < /home/soft/pxc.tar.gz ...给PXC集群实例创建docker内部网络 docker network net1 查看 docker inspect n
  • 部署mysql高可用集群(第三方软件 + 主从同步) mysql-mmm 集群:使用多台服务器提供相同的服务根据多台服务器提供服务的方式,分为:高可用集群:主 备(keepalived)负载均衡集群:平均相应用户的连接请求(LVS ...
  • 本文为MYSQL集群+HA高可用MySQL性能调优】实践案例里面有相关操作步骤.可以下载下来相互学习,希望能帮助到需要帮助的童鞋.
  • 在架构MySQL高可用集群之前,有必要先介绍一下什么是DRBD,以及DRBD的原理和其工作方式DRBD(DistributedReplicatedBlockDevice,分布式复制块设备)是由内核模块和相关脚本而构成,用以构建可用性的集群。...
  • MySQL集群高可用架构

    千次阅读 2019-05-21 11:18:52
    MySQL集群高可用架构 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,009
精华内容 41,603
关键字:

mysql高可用集群

mysql 订阅