为您推荐:
精华内容
最热下载
问答
  • 5星
    1.57MB m0_52957036 2020-01-18 15:05:08
  • 文章目录1、简介2、搭建Mysql Cluster(基于阿里云内网部署,相同实例地区)2.1 安装配置管理节点(GMG)2.2 安装配置数据节点(NDB)2.3 安装配置SQL节点(NDB)2.4 集群状态3、操作Mysql Cluster4、MySQL Cluster的...

    亿级用户的分布式数据存储解决方案 1

    1、简介

    ​ MySQL Cluster(MySQL集群)是一个高性能、可扩展、集群化数据库产品,其研发设计的初衷就是要满足许多行业里的最严酷应用要求。这些应用中经常要求数据库运行的可靠性要达到99.999%。
      自从2004年开始MySQL Cluster发布以来,其新特性的变化就不断的被更新增强。这增加了MySQL Cluster在新的应用领域、市场、行业中的需求量。MySQL Cluster目前已经不仅仅应用于传统的传统的电信业务中,如HLR(Home Locator Registry)或 SLR( Subscriber Locator Registry),它还被广泛的应用在VOIP、网络计费、会议管理、电子商务网站、搜索引擎,甚至是传统的后台应用中。

    特点:

    • 高可用性:主服务器故障后可自动切换到后备服务器
    • 可伸缩性:可方便通过脚本增加DB服务器
    • 负载均衡:支持手动把某公司的数据请求切换到另外的服务器,可配置哪些公司的数据服务访问哪个服务器
    d833c895d143ad4b031769ca82025aafa40f06fa

    2、搭建Mysql Cluster(基于阿里云内网部署,相同实例地区)

    主要参考23

    MySQL结构,由3类节点(计算机或进程)组成,分别是:

    • 管理节点:用于给整个集群其他节点提供配置、管理、仲裁等功能。
    • 数据节点:MySQL Cluster的核心,存储数据、日志,提供数据的各种管理服务。
    • SQL节点(API):用于访问MySQL Cluster数据,提供对外应用服务。

    各个节点中安装路径必须相同,配置环境一直!!!

    1. 如果机器上安装了mysql-server,先卸载掉

      首先删除mysql-server:

      sudo apt-get remove mysql-*
      

      然后清理残留的数据

      dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
      

      它会跳出一个对话框,你选择yes就好了

    2. 服务器上搭建时,同一个区域中的服务器(配置使用内网搭建,速度快)

    修改 vi /etc/hosts 的文件,使用内网的ip

    172.16.184.33	slave1
    172.16.0.243	slave2
    172.16.232.76	master
    
    1. 在相应的主机中修改名称(或者是修改hosts的文件的名称,为了便于后期使用,建议修改名称
    hostnamectl set-hostname master
    hostnamectl set-hostname slave1
    hostnamectl set-hostname slave2
    
    1. 设置主机之间的相互免密登录(设置公钥)

    2. 下载安装包,下载网址4

    image-20210701095735494
    1. 将压缩包移动到/usr/local/mysql下,解压完成后,修改路径,每个节点都位于相同的路径下

      image-20210701192501534

    2. 集群默认端口为1186

    2.1 安装配置管理节点(GMG)

    • 上传并解压文件
    mkdir -p /usr/local/mysql (创建mysql目录)
    cd /usr/local/mysql
    tar -zxvf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar
    mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster (解压到目录下进行重命名)
    
    • 创建管理目录
    mkdir -p /var/log/mysql-cluster
    mkdir -p /etc/mysql-cluster
    
    • 配置目录
    vi /etc/mysql-cluster/config.ini
    
    [ndbd default]
    NoOfReplicas=2                  #数据写入数量。2表示两份,2个数据节点
    DataMemory=80M                  #配置数据存储可使用的内存
    IndexMemory=18M                 #索引给100M
    
    
    [ndb_mgmd]
    nodeid=1
    datadir=/var/log/mysql-cluster      #管理结点的日志
    HostName=172.16.232.76              #管理结点的IP地址。本机IP
    
    
    ###### data node options:           #存储结点
    [ndbd]
    HostName=172.16.0.243
    DataDir=/data/mysql                 #mysql数据存储路径
    nodeid=2
    
    
    [ndbd]
    HostName=172.16.184.33
    DataDir=/data/mysql                 #mysql数据存储路径
    nodeid=3
    
    
    # SQL node options:                 #关于SQL结点
    [mysqld]
    HostName=172.16.184.34
    nodeid=4
    
    
    [mysqld]
    HostName=172.16.64.223
    nodeid=5
    
    • 初始化管理节点
    /usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
    
    • 查看集群的状态
    /usr/local/mysql/mysql-cluster/bin/ndb_mgm
    ndb_mgm> show
    #或者使用
    ./ndb_mgm -e show
    
    WX20210701-185520@2x

    发现管理节点已经启动,当数据节点以及SQL节点未启动时显示的是not connected

    2.2 安装配置数据节点(NDB)

    将下面配置同步到其余的配置数据节点中

    • 上传并解压文件
    mkdir -p /usr/local/mysql (创建mysql目录)
    cd /usr/local/mysql
    tar -zxvf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar
    mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster (解压到目录下进行重命名)
    
    • 创建mysql用户并运行
    useradd -M -s /sbin/nologin mysql
    
    • 创建mysql目录并授权
    mkdir -p /etc/mysql
    mkdir -p /data/mysql
    chown -R mysql:mysql /data/mysql/
    
    • 配置数据节点
    vi /etc/mysql/my.cnf
    [mysqld]
    datadir=/data/mysql                     #mysql数据存储路径
    ndbcluster                              #启动ndb引擎
    ndb-connectstring=172.16.232.76         #管理节点IP地址  
    
    [mysql_cluster]
    ndb-connectstring=172.16.232.76         #管理节点IP地址
    
    • 启动数据节点
    #只有当第一次的时候才有加 --intital 否则数据会丢
    /usr/local/mysql/mysql-cluster/bin/ndbd --initial
    
    • 查看状态
    WX20210701-185856@2x

    WX20210701-185909@2x

    WX20210701-185917@2x

    2.3 安装配置SQL节点(NDB)

    将下面配置同步到其余的安装配置SQL节点中

    • 上传并解压文件
    mkdir -p /usr/local/mysql (创建mysql目录)
    cd /usr/local/mysql
    tar -zxvf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar
    mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster (解压到目录下进行重命名)
    
    • 创建mysql目录并授权
    mkdir -p /etc/mysql
    mkdir -p /data/mysql
    chown -R mysql:mysql /data/mysql/
    
    • 创建SQL节点配置文件
    vi /etc/mysql/my.cnf
    
    [mysqld]
    user=mysql
    ndbcluster                                                              #启动ndb引擎
    ndb-connectstring=172.16.232.76                       #管理节点IP地址  
    
    [mysql_cluster]
    ndb-connectstring=172.16.232.76                     #管理节点IP地址
    
    • 配置mysql服务
    cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld
    update-rc.d mysqld defaults
    
    • 编辑mysqld服务
    vi /etc/init.d/mysqld
    
    image-20210701194557199
    替换为自己的安装目录
      basedir=/usr/local/mysql/mysql-cluster
      bindir=/usr/local/mysql/mysql-cluster/bin
      if test -z "$datadir"
      then
        datadir=/data/mysql
      fi
      sbindir=/usr/local/mysql/mysql-cluster/bin
      libexecdir=/usr/local/mysql/mysql-cluster/bin
    
    • 初始化mysql数据库

    进入到 /usr/local/mysql/mysql-cluster/bin

    #执行完命令 记得保存一下随机产生的密码
    cd /usr/local/mysql/mysql-cluster/bin
    ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/ 
    

    Slave3(保存随机产生的密码

    WX20210701-190549@2x

    Slave4(保存随机产生的密码

    WX20210701-190639@2x

    • 启动mysql服务
    systemctl daemon-reload
    systemctl start mysqld
    

    Slave3,发现已经启动了mysql的3306端口,出现红色的警告,可以使用systemctl daemon-reload尝试解决下,下面的截图是没有加systemctl daemon-reload的,但是还是可以正常启动

    WX20210701-190806@2x

    Slave4,发现已经启动了mysql的3306端口

    WX20210701-190818@2x

    2.4 集群状态

    进入到

    cd /usr/local/mysql/mysql-cluster/bin
    ./ndb_mgm
    

    进入下面界面使用show可==***查看到5个节点全部启动,说明搭建完成!!!***==

    WX20210701-191003@2x

    3、操作Mysql Cluster

    • 在SQL节点(slave3,slave4)中使用操作数据库,输入前面保存的随机密码进入数据库中
    cd /usr/local/mysql/mysql-cluster/bin
    ./mysql -uroot -p
    
    • 操作数据库

      在使用命令之前需要先修改数据库的密码后进行操作,否则将会出现下面的错误

      WX20210701-191514@2x

      使用下面命令修改密码为123456789

      alter user user() identified by "123456789";
      
      WX20210701-191530@2x
    • 创建数据库

      在slave3中创建 mytest 数据库

      WX20210701-191654@2x

      登录slave4中的数据库同时也修改密码,然后查看数据库时发现mytest数据库同步创建

      WX20210701-191741@2x

    • 创建数据表并添加数据

      添加 engine=ndbcluster 或者是 engine=ndb(mysql cluster集群只能同步ndb引擎的表

      create table sys_myfirst(id varchar(36) primary key, name varchar(100), memo varchar(255)) ENGINE=innodb DEFAULT CHARSET=utf8 engine=ndbcluster;
      Query OK, 0 rows affected, 1 warning (0.42 sec)
      

      slave3中创建数据表,并添加两条数据

      image-20210701205405177

      slave4中可查看到slave3中创建的表与数据

      image-20210701205442243

    4、MySQL Cluster的关闭顺序与单点故障测试

    关闭顺序与单点故障参考 5

    关闭顺序:SQL节点->数据节点->管理节点(在MySQL Cluster环境中,NDB节点和管理节点的关闭都可以在管理节点的管理程序中完成,也可以分节点关闭,但是SQL节点却没办法。所以,在关闭整个MySQL Cluster环境或者关闭某个SQL节点的时候,首先必须到SQL节点主机上来关闭SQL节点程序。关闭方法和MySQL Server的关闭一样。)

    1. SQL节点关闭

      systemctl stop mysqld

      root@slave3:/usr/local/mysql/mysql-cluster/bin# lsof -i:3306
      COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      mysqld  1319 mysql   40u  IPv6  24436      0t0  TCP *:mysql (LISTEN)
      root@slave3:/usr/local/mysql/mysql-cluster/bin# systemctl stop mysqld
      Warning: The unit file, source configuration file or drop-ins of mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units.
      root@slave3:/usr/local/mysql/mysql-cluster/bin# lsof -i:3306
      root@slave3:/usr/local/mysql/mysql-cluster/bin# systemctl start mysqld
      Warning: The unit file, source configuration file or drop-ins of mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units.
      ###或者在/etc/init.d中使用
      root@slave4:/etc/init.d# ./mysqld stop
      
    2. 数据节点(NDB)关闭

      image-20210702092053968

      cd /usr/local/mysql/mysql-cluster/bin
      ./ndbd stop
      2018-01-16 18:30:51 [ndbd] INFO     -- Angel connected to '192.168.0.30:1186'
      2018-01-16 18:30:51 [ndbd] INFO     -- Angel allocated nodeid: 2
      #或者使用pkill -9 ndbd
      #启动使用(不需要加--initial)
      ./ndbd
      
    3. 管理节点关闭(关闭管理节点后会一起关闭数据节点

      image-20210702093643332

      ndb_mgm> shutdown
      Node 2: Cluster shutdown initiated
      Node 3: Cluster shutdown initiated
      3 NDB Cluster node(s) have shutdown.
      Disconnecting to allow management server to shutdown.
      Node 3: Node shutdown completed.
      ndb_mgm> 
      #或者使用
      /usr/local/mysql/mysql-cluster/bin# ./ndb_mgm -e shutdown
      

    5、Mysql Cluster 远程连接

    1. 该表法

      use mysql;
      select host, user from user;
      update user set host = '%' where user = 'root';
      select host, user from user;
      #修改完以后重启mysql
      
      image-20210701235401421
    2. 授权法

      GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456789' WITH GRANT OPTION;
      FLUSH PRIVILEGES  #使修改生效,就可以了
      

    6、测试单点故障(高可用)

    • 当停止掉两台数据节点中的一台节点时,使用SQL节点进行操作,可以正常操作
    • 当停止掉两台SQL节点中的一台节点时,使用另一台SQL节点进行操作,也可以正常操作
    • 当分别停止掉两台数据节点和两台SQL节点中的一台节点时,只留一台SQL节点与一台数据节点,同样可以正常服务

    7、SpringBoot中使用

    springboot jpa连接mysql数据库集群(NDBCLUSTER)引擎设置6

    主要参考:Spring Boot MyBatis 数据库集群访问实现 7

    image-20210702205711624

    代码路径8语雀

    参考网址


    1. https://www.pianshen.com/article/51641527056/ ↩︎

    2. https://www.jianshu.com/p/37525ae8dee4 ↩︎

    3. https://www.cnblogs.com/zzdbullet/p/11475641.html ↩︎

    4. https://dev.mysql.com/downloads/cluster/ ↩︎

    5. https://blog.csdn.net/mashuai720/article/details/79126360 ↩︎

    6. https://blog.csdn.net/xyzdwf/article/details/102482393 ↩︎

    7. https://github.com/smltq/spring-boot-demo/tree/master/mybatis-multi-datasource ↩︎

    8. https://www.yuque.com/yuankaiqiang/file/19961453 ↩︎

    展开全文
    weixin_44750617 2021-09-21 08:50:56
  • 2.解压安装包#上传到服务器目录/usr/softwares并解压tar-xzvf mysql-cluster-gpl-7.5.15-linux-glibc2.12-x86_64.tar.gz#新建/usr/local/mysql目录mkdir/usr/local/mysql#将解压的文件重命名为mysql,并放到/usr/...

    2.解压安装包

    #上传到服务器目录/usr/softwares并解压

    tar-xzvf mysql-cluster-gpl-7.5.15-linux-glibc2.12-x86_64.tar.gz

    #新建/usr/local/mysql目录

    mkdir/usr/local/mysql

    #将解压的文件重命名为mysql,并放到/usr/local/mysql目录下 mv mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64 /usr/local/mysql

    3.配置安装管理节点

    1)新增管理节点命令

    #将文件ndb_mgm和ndb_mgmd拷贝到/usr/local/bin/目录下

    cp/usr/local/mysql/bin/ndb_mgm* /usr/local/bin/#ndb_mgm,ndb客户端命令

    #ndb_mgmd,ndb管理节点启动命令

    #ndb_mgm是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过它可以方便的检查Cluster的状态、启动备份、关闭Cluster等功能。

    2)修改管理节点的配置文件

    #创建数据库集群配置文件的目录

    mkdir/var/lib/mysql-cluster

    #创建并编辑配置文件

    vim/var/lib/mysql-cluster/config.ini

    [ndbddefault]

    NoOfReplicas=2#数据节点的个数

    DataMemory=512M

    IndexMemory=64M

    [ndb_mgmd] #管理节点

    NodeId=1hostname=192.168.17.130datadir=/var/lib/mysql-cluster/[ndbd] #数据节点

    NodeId=2hostname=192.168.17.131datadir=/usr/local/mysql/data/[ndbd]

    NodeId=3hostname=192.168.17.132datadir=/usr/local/mysql/data/[mysqld] #sql节点

    NodeId=4hostname=192.168.17.133[mysqld]

    NodeId=5hostname=192.168.17.134

    [NDBD DEFAULT]:表示每个数据节点的默认配置,在每个节点的[NDBD]中不用再写这些选项,只能有一个。

    NoOfReplicas:副本数量,数据节点数必须是副本数的整数倍。

    [NDB_MGMD]:表示管理节点的配置,只有一个,默认的对其他节点的端口是1186,故服务器需要开放1186端口。

    [NDBD]:表示每个数据节点的配置,可以有多个,分别写上不同数据节点的IP地址。

    [MYSQLD]:表示SQL节点的配置,可以有多个,分别写上不同SQL节点的IP地址。

    3)启动管理节点

    ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

    ndb_mgmd是mysql cluster的管理服务器,后面的-f表示后面的参数是启动的参数配置文件。如果在启动后过了几天又添加了一个数据节点,这时修改了配置文件启动时就必须加上--initial参数,不然添加的节点不会作用在mysql cluster中。

    3.配置安装数据节点

    1)配置my.cnf文件

    [mysqld]

    datadir=/usr/local/mysql/data

    basedir=/usr/local/mysql

    character_set_server=utf8

    [mysqld_safe]

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    [mysql_cluster]

    ndb-connectstring=192.168.17.130:1186

    2)新增用户和权限

    #分别添加mysql组和mysql用户

    groupadd mysql

    useradd mysql-g mysql

    #进入mysql目录

    cd/usr/local/mysql/#把mysql的目录设置成所有者为root

    chown-R root .

    #创建data目录,并把data目录设置所有者为mysql

    mkdir data

    chown-R mysql data

    #把mysql的目录改成所属组为mysql

    chgrp-R mysql .

    3)安装数据库

    #执行安装脚本,初始化数据库

    ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/#注意其中用户为mysql的名称需要跟配置文件my.cnf中的user=mysql相同

    #另外,这里一定要把--basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/加上,

    #否则会最后启动MySQL服务的时候会出现"table mysql.plugin doesn't exist","Can\'t open the mysql.plugin table. Please run mysql_upgrade to create it."错误,以及"PID"获取失败的错误

    在安装的打印信息最后,有首次登陆的密码,需要特别注意;

    4)设置mysqld服务开机自启

    #加入到service服务

    cp support-files/mysql.server /etc/init.d/mysqld

    chmod+x /etc/init.d/mysqld

    #加入到开机自启动列表

    chkconfig--add mysqld

    5)修改数据库密码

    #启动数据库

    [root@localhost bin]# service mysqld start

    #进入客户端

    [root@localhost bin]# ./mysql -uroot -p

    Enter password:这里输入之前的临时密码

    #修改密码

    mysql> set password=password('新密码');

    #注意此密码必须要与其他服务器上的数据库设置的密码相同

    6)启动数据节点

    cd /usr/local/mysql

    ./bin/ndbd --initial

    #非第一次启动,命令如下

    ./bin/ndbd

    安装后第一次启动数据节点时要加上--initial参数。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

    4.配置安装sql节点

    1)配置my.cnf文件

    [mysqld]

    ndbcluster

    datadir=/usr/local/mysql/data

    basedir=/usr/local/mysql

    character_set_server=utf8default-storage-engine=ndbcluster

    port=3306[mysqld_safe]

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    [mysql_cluster]

    ndb-connectstring=192.168.17.130:1186

    2)安装mysql数据库

    3)启动sql节点

    service mysqld start

    如果提示:mysql:mysql is neither service nor target!?报错,则执行:

    systemctl unmask mysqld

    service mysql start

    5.测试

    1)管理节点查看

    ndb_mgm

    ndb_mgm>show

    Cluster Configuration---------------------[ndbd(NDB)]2node(s)

    id=2 @192.168.17.131 (mysql-5.7.23 ndb-7.6.7, Nodegroup: 0, *)

    id=3 @192.168.17.132 (mysql-5.7.23 ndb-7.6.7, Nodegroup: 1)

    [ndb_mgmd(MGM)]1node(s)

    id=1 @192.168.17.130 (mysql-5.7.23 ndb-7.6.7)

    [mysqld(API)]2node(s)

    id=4 @192.168.17.133 (mysql-5.7.23 ndb-7.6.7)

    id=5 @192.168.17.134 (mysql-5.7.23 ndb-7.6.7)

    2)测试数据

    #登陆数据库

    cd/usr/local/mysql

    ./bin/mysql -uroot -p

    Enter password:输入密码

    #创建数据库mytest

    mysql>create database mytest;

    #切换到mytest数据库

    mysql>use mytest;

    #创建表结构sys_myfirst

    mysql> create table sys_myfirst(id varchar(36) primary key, name varchar(100), memo varchar(255));

    #在sys_myfirst中添加几条数据

    mysql> insert into sys_myfirst(id, name, memo) values('1','test1','hello world!');

    mysql> insert into sys_myfirst(id, name, memo) values('2','test2','hello world haha!');

    mysql> insert into sys_myfirst(id, name, memo) values('3','test3','hello world hehe!');

    #查看数据

    mysql> select * fromsys_myfirst;+----+-------+-------------------+

    | id | name | memo |

    +----+-------+-------------------+

    | 2 | test2 | hello world haha! |

    | 1 | test1 | hello world! |

    | 3 | test3 | hello world hehe! |

    +----+-------+-------------------+

    3 rows in set (0.00 sec)

    3)在另一个sql节点查询

    #这里就省去登陆mysql客户端的步骤了

    #查看数据

    mysql> select * fromsys_myfirst;+----+-------+-------------------+

    | id | name | memo |

    +----+-------+-------------------+

    | 1 | test1 | hello world! |

    | 3 | test3 | hello world hehe! |

    | 2 | test2 | hello world haha! |

    +----+-------+-------------------+

    3 rows in set (0.00sec)

    6.启动和停止管理节点

    启动顺序:管理节点—数据节点—sql节点

    停止顺序:管理节点(会同时停止管理节点和数据节点)—sql节点

    停止管理节点:

    #第一种方法

    ndb_mgm-e shutdown

    #第二种方法

    ndb_mgm

    ndb_mgm> shutdown;

    停止sql节点:

    service mysqld stop

    7.数据存放位置

    在数据节点上通过lsof -c ndb命令(以root身份运行)来找出包含ndb进程所有打开的文件,

    发现其真正存储数据的位置在mysql/data/ndb_3_fs/下面(3数字是config.ini的节点id),

    各个文件夹中的文件是以16.7M为单位存储的,临时文件达到16.7M后就另起一个。

    参考文档:

    1.mysql-cluster集群搭建:

    2.增加管理节点:

    3.增加数据节点:

    4.官方文档:

    5.mysqlcluster+haproxy+keepalived

    展开全文
    weixin_34477616 2021-01-18 20:31:45
  • Redis 分布式扩展之 Redis Cluster 方案 主从切换的过程中会丢失数据,因为只有一个 master,只能单点写,没有解决水平扩容的问题。而且每个节点都保存了所有数据,一个是内存的占用率较高,另外就是如果进行数据...

    Redis 分布式扩展之 Redis Cluster 方案

    主从切换的过程中会丢失数据,因为只有一个 master,只能单点写,没有解决水平扩容的问题。而且每个节点都保存了所有数据,一个是内存的占用率较高,另外就是如果进行数据恢复时,非常慢。而且数据量过大对数据 IO 操作的性能也会有影响。

    所以我们同样也有对 Redis 数据分片的需求,所谓分片就是把一份大数据拆分成多份小数据,在 3.0 之前,我们只能通过构建多个 redis 主从节点集群,把不同业务数据拆分到不冉的集群中,这种方式在业务层需要有大量的代码来完成数据分片、路由等工作,导致维护成本高、增加、移除节点比较繁琐。

    Redis3.0 之后引入了 Redis Cluster 集群方案,它用来解决分布式扩展的需求,同时也实现了高可用机制。

    1. Redis Cluster 架构

    一个 Redis Cluster 由多个 Redis 节点构成,不同节点组服务的数据没有交集,也就是每个一节点组对应数据 sharding 的一个分片。

    节点组内部分为主备两类节点,对应 master 和 slave 节点。两者数据准实时一致,通过异步化的主备复制机制来保证。

    一个节点组有且只有一个 master 节点,同时可以有 0 到多个 slave 节点,在这个节点组中只有 master 节点对用户提供写服务,读服务可以由 master 或者 slave 提供。如下图,包含三个 master 节点以及三个 master 对应的 slave 节点,一般一组集群至少要 6 个节点才能保证完整的高可用。

    其中三个 master 会分配不同的 slot(表示数据分片区间),当 master 出现故障时,slave 会自动选举成为 master 顶替主节点继续提供服务。

    image-20211128115956700

    1.1 关于 gossip 协议

    在上图描述的架构中,其他的点都好理解,就是关于 gossip 协议是干嘛的,需要单独说明一下。

    在整个 redis cluster 架构中,如果出现以下情况

    • 新加入节点
    • slot 迁移
    • 节点宕机
    • slave 选举成为 master

    我们希望这些变化能够让整个集群中的每个节点都能够尽快发现,传播到整个集群并且集群中所有节点达成一致,那么各个节点之间就需要相互连通并且携带相关状态数据进行传播,

    按照正常的逻辑是采用广播的方式想集群中的所有节点发送消息,优点是集群中的数据同步较快,但是每条消息都需要发送给所有节点,对 CPU 和带宽的消耗过大,所以这里采用了 gossip 协议。

    Gossip protocol 也叫 Epidemic Protocol (流行病协议),别名很多比如:“流言算法”、“疫情传播算法” 等。

    它的特点是,在节点数量有限的网络中,每个节点都会 “随机”(不是真正随机,而是根据规则选择通信节点)与部分节点通信,经过一番杂乱无章的通信后,每个节点的状态在一定时间内会达成一致,如下图所示。

    假设我们提前设置如下规则:

    1、Gossip 是周期性的散播消息,把周期限定为 1 秒

    2、被感染节点随机选择 k 个邻接节点(fan-out)散播消息,这里把 fan-out 设置为 3,每次最多往 3 个节点散播。

    3、每次散播消息都选择尚未发送过的节点进行散播

    4、收到消息的节点不再往发送节点散播,比如 A -> B,那么 B 进行散播的时候,不再发给 A。

    这里一共有 16 个节点,节点 1 为初始被感染节点,通过 Gossip 过程,最终所有节点都被感染:

    image-20211128120954411

    1.2 gossip 协议消息

    gossip 协议包含多种消息,包括 ping,pong,meet,fail 等等。

    ping:每个节点都会频繁给其他节点发送 ping,其中包含自己的状态还有自己维护的集群元数据,互相通过 ping 交换元数据;

    pong: 返回 ping 和 meet,包含自己的状态和其他信息,也可以用于信息广播和更新;

    fail: 某个节点判断另一个节点 fail 之后,就发送 fail 给其他节点,通知其他节点,指定的节点宕机了。

    meet:某个节点发送 meet 给新加入的节点,让新节点加入集群中,然后新节点就会开始与其他节点进行通信,不需要发送形成网络的所需的所有 CLUSTER MEET 命令。发送 CLUSTER MEET 消息以便每个节点能够达到其他每个节点只需通过一条已知的节点链就够了。由于在心跳包中会交换 gossip 信息,将会创建节点间缺失的链接。

    1.3 gossip 的优缺点

    优点: gossip 协议的优点在于元数据的更新比较分散,不是集中在一个地方,更新请求会陆陆续续,打到所有节点上去更新有一定的延时,降低了压力; 去中心化、可扩展、容错、一致性收敛、简单。 由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。

    缺点: 元数据更新有延时可能导致集群的一些操作会有一些滞后。 消息的延迟 , 消息冗余 。

    1.4 Redis Cluster 集群搭建

    集群至少需要 6 个节点(3 主 3 从模式),每一个节点可以搭建在同一台机器上,也可以搭建在不同的服务器上。

    • 192.168.183.130 7000 、 7001
    • 192.168.183.131 7002 、 7003
    • 192.168.183.132 7004 、 7005

    1.5 分别启动 6 个节点。

    • 在 redis 安装目录下,分别创建以下目录,这些目录必须要提前创建好,redis 启动时不会主动创建这些目录。

      mkdir -p /usr/local/redis/run
      mkdir -p /usr/local/redis/logs
      mkdir -p /usr/local/redis/data/7000、7001
      mkdir -p /usr/local/redis/conf
      mkdir -p /usr/local/redis/redis-cluster
      
    • 拷贝一份 redis.conf 到 redis-cluster 目录下,由于只有三台机器,所以每个机器上需要运行两个 redis-server,因此需要修改 redis.conf 文件的名字来做区分,redis_7000.conf。并且修改该文件的一下内容。

      pidfile "/usr/local/redis/run/redis_7000.pid"   #pid存储目录
      logfile "/usr/local/redis/logs/redis_7000.log"  #日志存储目录
      dir "/usr/local/redis/data/7000"   #数据存储目录,目录要提前创建好
      cluster-enabled yes                   #开启集群
      cluster-config-file nodes-7000.conf   #集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不同
      cluster-node-timeout 15000            #集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
      
    • 每个节点需要启动两个 redis-server,所以对配置文件做一份拷贝,然后修改以下配置

      pidfile "/usr/local/redis/run/redis_7001.pid"   #pid存储目录
      logfile "/usr/local/redis/logs/redis_7001.log"  #日志存储目录
      dir "/usr/local/redis/data/7001"   #数据存储目录,目录要提前创建好
      cluster-enabled yes                   #开启集群
      cluster-config-file nodes-7001.conf   #集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不同
      cluster-node-timeout 15000            #集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
      
    • 创建两个脚本用来进行统一的服务运行

      • cluster-start.sh
      ./redis-server ../conf/redis_7000.conf
      ./redis-server ../conf/redis_7001.conf
      
      • cluster-shutdown.sh
      pgrep redis-server | xargs -exec kill -9
      
      • 通过下面命令让上述脚本拥有执行权限
      chmod +x cluster-*.sh
      
    • 其他两个节点重复上述的过程,完成 6 个节点的启动。

    如果遇到相关问题大部分原因是由于配置文件错误,重新编辑配置文件;如果是复制的主从复制环境的配置环境记得去除主从复制的相关配置;

    记得修改对应的端口号;

    1.6 配置 redis 集群

    启动完这 6 台服务器后,需要通过下面的操作来配置集群节点。在 redis6.0 版本中,创建集群的方式为 redis-cli 方式直接创建,以下命令在任意一台服务器上执行即可

    用以下命令创建集群,–cluster-replicas 1 参数表示希望每个主服务器都有一个从服务器,这里则代表 3 主 3 从,通过该方式创建的带有从节点的机器不能够自己手动指定主节点,redis 集群会尽量把主从服务器分配在不同机器上:

     ./redis-cli --cluster create 192.168.183.131:7002 192.168.183.131:7003 192.168.183.130:7001  192.168.183.130:7000  192.168.183.132:7004 192.168.183.132:7005 --cluster-replicas 1
    

    如果不加–cluster-replicas 1则会创建6个主节点

    执行上述命令后,会得到以下执行结果,

    Performing hash slots allocation on 6 nodes…
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 192.168.183.130:7000 to 192.168.183.131:7002
    Adding replica 192.168.183.131:7003 to 192.168.183.130:7001
    Adding replica 192.168.183.132:7005 to 192.168.183.132:7004
    Trying to optimize slaves allocation for anti-affinity
    [OK] Perfect anti-affinity obtained!
    M: 97dda24ba8316ab5f024e8c7f63f811f99b8c558 192.168.183.131:7002
    slots:[0-5460] (5461 slots) master
    S: 891fc60e90e834b09361f35ad625cd195b31c666 192.168.183.131:7003
    replicates c24500833eeeb3b119d58c5c7b52208f2cc066c5
    M: c24500833eeeb3b119d58c5c7b52208f2cc066c5 192.168.183.130:7001
    slots:[5461-10922] (5462 slots) master
    S: 03e4710a488b33b0e9d2bb645a247580eafb6b4c 192.168.183.130:7000
    replicates f7aa50102081d901bd754e72605746631f7fa3f8
    M: f7aa50102081d901bd754e72605746631f7fa3f8 192.168.183.132:7004
    slots:[10923-16383] (5461 slots) master
    S: 7a834ae821e47c3803100784db2fe28f0ac6a9a2 192.168.183.132:7005
    replicates 97dda24ba8316ab5f024e8c7f63f811f99b8c558
    Can I set the above configuration? (type ‘yes’ to accept): yes
    Nodes configuration updated
    Assign a different config epoch to each node
    Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join

    Performing Cluster Check (using node 192.168.183.131:7002)
    M: 97dda24ba8316ab5f024e8c7f63f811f99b8c558 192.168.183.131:7002
    slots:[0-5460] (5461 slots) master
    1 additional replica(s)
    S: 891fc60e90e834b09361f35ad625cd195b31c666 192.168.183.131:7003
    slots: (0 slots) slave
    replicates c24500833eeeb3b119d58c5c7b52208f2cc066c5
    M: f7aa50102081d901bd754e72605746631f7fa3f8 192.168.183.132:7004
    slots:[10923-16383] (5461 slots) master
    1 additional replica(s)
    S: 7a834ae821e47c3803100784db2fe28f0ac6a9a2 192.168.183.132:7005
    slots: (0 slots) slave
    replicates 97dda24ba8316ab5f024e8c7f63f811f99b8c558
    M: c24500833eeeb3b119d58c5c7b52208f2cc066c5 192.168.183.130:7001
    slots:[5461-10922] (5462 slots) master
    1 additional replica(s)
    S: 03e4710a488b33b0e9d2bb645a247580eafb6b4c 192.168.183.130:7000
    slots: (0 slots) slave
    replicates f7aa50102081d901bd754e72605746631f7fa3f8
    [OK] All nodes agree about slots configuration.
    Check for open slots…
    Check slots coverage…
    [OK] All 16384 slots covered.

    从上述结果中看到两个点:

    • 预先分配三个节点的 slot 区间
    • 自动选择合适的节点作为 master

    1.7 移除集群

    如果想要重新设置集群,首先通过之前的cluster-shutdown.sh停止服务,然后删除run和data中的数据,重新启动;随后重新执行配置命令接口。

    1.8 查看集群状态等信息

    • cluster info 查看集群状态信息
    [root@localhost bin]# ./redis-cli -p 7000
    127.0.0.1:7000> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:5
    cluster_stats_messages_ping_sent:397
    cluster_stats_messages_pong_sent:398
    cluster_stats_messages_meet_sent:4
    cluster_stats_messages_sent:799
    cluster_stats_messages_ping_received:397
    cluster_stats_messages_pong_received:401
    cluster_stats_messages_meet_received:1
    cluster_stats_messages_received:799
    
    • 查看集群节点信息
    127.0.0.1:7000> cluster nodes
    7a834ae821e47c3803100784db2fe28f0ac6a9a2 192.168.183.132:7005@17005 slave 97dda24ba8316ab5f024e8c7f63f811f99b8c558 0 1638079692000 6 connected
    c24500833eeeb3b119d58c5c7b52208f2cc066c5 192.168.183.130:7001@17001 master - 0 1638079693576 3 connected 5461-10922
    03e4710a488b33b0e9d2bb645a247580eafb6b4c 192.168.183.130:7000@17000 myself,slave f7aa50102081d901bd754e72605746631f7fa3f8 0 1638079694000 4 connected
    891fc60e90e834b09361f35ad625cd195b31c666 192.168.183.131:7003@17003 slave c24500833eeeb3b119d58c5c7b52208f2cc066c5 0 1638079692000 3 connected
    97dda24ba8316ab5f024e8c7f63f811f99b8c558 192.168.183.131:7002@17002 master - 0 1638079692560 1 connected 0-5460
    f7aa50102081d901bd754e72605746631f7fa3f8 192.168.183.132:7004@17004 master - 0 1638079694591 5 connected 10923-16383
    

    2. 数据分布

    Redis Cluster 中,Sharding 采用 slot (槽) 的概念,一共分成 16384 个槽,这有点儿类似 pre sharding 思路。对于每个进入 Redis 的键值对,根据 key 进行散列,分配到这 16384 个 slot 中的某一个中。使用的 hash 算法也比较简单,就是 CRC16 后 16384 取模 [crc16(key)%16384]

    Redis 集群中的每个 node (节点) 负责分摊这 16384 个 slot 中的一部分,也就是说,每个 slot 都对应一个 node 负责处理。

    如下图所示,假设现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot) 的方式来分配 16384 个 slot 的话,它们三个节点分别承担的 slot 区间是:

    • 节点 A 覆盖 0-5000;
    • 节点 B 覆盖 5001-10000;
    • 节点 C 覆盖 10001-16383

    image-20211128140946624

    3. 客户端重定向

    如上图所示,假设 k 这个 key 应该存储在 node3 上,而此时用户在 node1 或者 node2 上调用 set k v 指令,这个时候 redis cluster 怎么处理呢?

    127.0.0.1:7000> set name 16300
    (error) MOVED 5798 192.168.183.130:7001
    

    服务端返回 MOVED,也就是根据 key 计算出来的 slot 不归当前节点管理,服务端返回 MOVED 告诉客户端去 7001端口操作。

    这个时候更换端口,用 redis-cli –p 7001操作,才会返回 OK。或者用./redis-cli -c -p port 的命令。但是导致的问题是,客户端需要连接两次才能完成操作。

    127.0.0.1:7000> set name 16300
    (error) MOVED 5798 192.168.183.130:7001
    127.0.0.1:7000> 
    [root@localhost bin]# ./redis-cli -p 7001
    127.0.0.1:7001> set name 16300
    OK
    

    所以大部分的 redis 客户端都会在本地维护一份 slot 和 node 的对应关系,在执行指令之前先计算当前 key 应该存储的目标节点,然后再连接到目标节点进行数据操作。

    在 redis 集群中提供了下面的命令来计算当前 key 应该属于哪个 slot

    redis> cluster keyslot key1
    

    4. 高可用主从切换原理

    如果主节点没有从节点,那么当它发生故障时,集群就将处于不可用状态。

    一旦某个 master 节点进入到 FAIL 状态,那么整个集群都会变成 FAIL 状态,同时触发 failover 机制,failover 的目的是从 slave 节点中选举出新的主节点,使得集群可以恢复正常,这个过程实现如下:

    当 slave 发现自己的 master 变为 FAIL 状态时,便尝试进行 Failover,以期成为新的 master。由于挂掉的 master 可能会有多个 slave,从而存在多个 slave 竞争成为 master 节点的过程, 其过程如下:

    • slave 发现自己的 master 变为 FAIL
    • 将自己记录的集群 currentEpoch 加 1,并广播 FAILOVER_AUTH_REQUEST 信息
    • 其他节点收到该信息,只有 master 响应,判断请求者的合法性,并发送 FAILOVER_AUTH_ACK,对每一个 epoch 只发送一次 ack
    • 尝试 failover 的 slave 收集 master 返回的 FAILOVER_AUTH_ACK
    • slave 收到超过半数 master 的 ack 后变成新 Master (这里解释了集群为什么至少需要三个主节点,如果只有两个,当其中一个挂了,只剩一个主节点是不能选举成功的)
    • 广播 Pong 消息通知其他集群节点。

    从节点并不是在主节点一进入 FAIL 状态就马上尝试发起选举,而是有一定延迟,一定的延迟确保我们等待 FAIL 状态在集群中传播,slave 如果立即尝试选举,其它 masters 或许尚未意识到 FAIL 状态,可能会拒绝投票。

    延迟计算公式: DELAY = 500ms + random (0 ~ 500ms) + SLAVE_RANK * 1000ms

    SLAVE_RANK 表示此 slave 已经从 master 复制数据的总量的 rank。Rank 越小代表已复制的数据越新。这种方式下,持有最新数据的 slave 将会首先发起选举

    5. 常见问题分析

    问题1:怎么让相关的数据落到同一个节点上?

    比如有些 multi key 操作是不能跨节点的,例如用户 2673 的基本信息和金融信息?

    在 key 里面加入 {hash tag} 即可。Redis 在计算槽编号的时候只会获取 {} 之间的字符串进行槽编号计算,这样由于上面两个不同的键,{} 里面的字符串是相同的,因此他们可以被计算出相同的槽

    user{2673}base=…
    user{2673}fin=

    操作步骤如下,下面这些 key 都会保存到同一个 node 中。

    127.0.0.1:7001> set a{name} 1
    OK
    127.0.0.1:7001> set b{name} 2
    OK
    127.0.0.1:7001> set c{name} 3
    OK
    127.0.0.1:7001> keys *
    1) "a{name}"
    2) "name"
    3) "c{name}"
    4) "b{name}"
    

    6. 总结

    优势

    1. 无中心架构。
    2. 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
    3. 可扩展性,可线性扩展到 1000 个节点(官方推荐不超过 1000 个),节点可动态添加或删除。
    4. 高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升。
    5. 降低运维成本,提高系统的扩展性和可用性。

    不足

    1. Client 实现复杂,驱动要求实现 Smart Client,缓存 slots mapping 信息并及时更新,提高了开发难度,客户端的不成熟影响业务的稳定性。
    2. 节点会因为某些原因发生阻塞(阻塞时间大于 clutser-node-timeout),被判断下线,这种 failover 是没有必要的。
    3. 数据通过异步复制,不保证数据的强一致性。
    4. 多个业务使用同一套集群时,无法根据统计区分冷热数据,资源隔离性较差,容易出现相互影响的情况。
    5. Slave 在集群中充当 “冷备”,不能缓解读压力,当然可以通过 SDK 的合理设计来提高 Slave 资源的利用率。

    7. Redission 连接 cluster

    修改 redisson.yml 文件,参考 springboot-redis-2 这个项目

    PROPERTIES
    clusterServersConfig:
      nodeAddresses:
        - "redis://192.168.183.130:7000"
        - "redis://192.168.183.131:7002"
        - "redis://192.168.183.132:7004"
    
    codec: !<org.redisson.codec.JsonJacksonCodec> {}
    

    注意,nodeAddresses 对应的节点都是 master。

    Codis

    Codis 是一个分布式 Redis 解决方案,对于上层的应用来说,连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用,Codis 底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的 Redis 服务。

    codis 的架构

    如下图所示,表示 Codis 的整体架构图。

    Codis Proxy: 客户端连接的 Redis 代理服务,实现了 Redis 协议。 除部分命令不支持以外 (不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;不同 codis-proxy 之间由 codis-dashboard 保证状态同
    codis-redis-group: 代表一个 redis 服务集群节点,一个 RedisGroup 里有一个 Master,和多个 Slave

    **Zookeeper:**Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息,codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy。

    img

    展开全文
    qq_41432730 2021-11-28 14:21:32
  • 集群cluster 现状问题:业务发展过程中遇到的峰值瓶颈 redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒 内存单机容量达到256G,当前业务需求内存容量1T 使用集群的方式可以快速解决...

    集群cluster

    现状问题:业务发展过程中遇到的峰值瓶颈

    • redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒

    • 内存单机容量达到256G,当前业务需求内存容量1T

    • 使用集群的方式可以快速解决上述问题

    集群简介

    集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

    集群作用:

    • 分散单台服务器的访问压力,实现负载均衡

    • 分散单台服务器的存储压力,实现可扩展性

    • 降低单台服务器宕机带来的业务灾难

    Cluster集群结构设计

    数据存储设计:

    1. 通过算法设计,计算出key应该保存的位置

    2. 将所有的存储空间计划切割成16384份,每台主机保存一部分

      注意:每份代表的是一个存储空间,不是一个key的保存空间

    3. 将key按照计算出的结果放到对应的存储空间

    那redis的集群是如何增强可扩展性的呢?譬如我们要增加一个集群节点

    当我们查找数据时,集群是如何操作的呢?

    • 各个数据库相互通信,保存各个库中槽的编号数据

    • 一次命中,直接返回

    • 一次未命中,告知具体位置

    Cluster集群结构搭建

    首先要明确的几个要点:

    • 配置服务器(3主3从)

    • 建立通信(Meet)

    • 分槽(Slot)

    • 搭建主从(master-slave)

    Cluster配置

    • 是否启用cluster,加入cluster节点

    cluster-enabled yes|no
    • cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容

    cluster-config-file filename
    • 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点

    cluster-node-timeout milliseconds
    • master连接的slave最小数量

    cluster-migration-barrier min_slave_number

    Cluster节点操作命令

    • 查看集群节点信息

    cluster nodes
    • 更改slave指向新的master

    cluster replicate master-id
    • 发现一个新节点,新增master

    cluster meet ip:port
    • 忽略一个没有solt的节点

    cluster forget server_id
    • 手动故障转移

    cluster failover

    集群操作命令:

    • 创建集群

    redis-cli –-cluster create masterhost1:masterport1 masterhost2:masterport2  masterhost3:masterport3 [masterhostn:masterportn …] slavehost1:slaveport1  slavehost2:slaveport2 slavehost3:slaveport3 -–cluster-replicas n

    注意:master与slave的数量要匹配,一个master对应n个slave,由最后的参数n决定

    master与slave的匹配顺序为第一个master与前n个slave分为一组,形成主从结构

     

    • 添加master到当前集群中,连接时可以指定任意现有节点地址与端口

    redis-cli --cluster add-node new-master-host:new-master-port now-host:now-port
    • 添加slave

    redis-cli --cluster add-node new-slave-host:new-slave-port master-host:master-port --cluster-slave --cluster-master-id masterid
    • 删除节点,如果删除的节点是master,必须保障其中没有槽slot

    redis-cli --cluster del-node del-slave-host:del-slave-port del-slave-id
    • 重新分槽,分槽是从具有槽的master中划分一部分给其他master,过程中不创建新的槽

    redis-cli --cluster reshard new-master-host:new-master:port --cluster-from src-  master-id1, src-master-id2, src-master-idn --cluster-to target-master-id --  cluster-slots slots

    注意:将需要参与分槽的所有masterid不分先后顺序添加到参数中,使用,分隔

    指定目标得到的槽的数量,所有的槽将平均从每个来源的master处获取

    • 重新分配槽,从具有槽的master中分配指定数量的槽到另一个master中,常用于清空指定master中的槽

    redis-cli --cluster reshard src-master-host:src-master-port --cluster-from src-  master-id --cluster-to target-master-id --cluster-slots slots --cluster-yes

     

    展开全文
    qq_42455457 2021-03-09 22:23:56
  • qq_15047415 2021-02-19 16:29:31
  • xvktdmjg 2021-04-03 21:52:23
  • weixin_42511702 2021-01-18 23:11:25
  • wb1046329430 2021-08-03 10:29:39
  • u012082876 2021-04-12 17:57:42
  • weixin_36079559 2021-01-18 23:20:41
  • weixin_34254464 2021-01-17 14:41:55
  • weixin_56674682 2021-11-29 15:14:36
  • qq_33873431 2021-10-13 11:42:42
  • qq_41582883 2021-01-14 21:22:09
  • a20251839 2021-02-02 17:29:20
  • zhengzhaoyang122 2021-01-05 19:40:25
  • qq_36213352 2021-12-17 10:53:17
  • han949417140 2021-06-15 14:21:58
  • weixin_44742132 2021-04-25 00:21:57
  • shuanglongman5531 2021-10-19 17:23:52
  • weixin_32894769 2021-01-27 12:42:59
  • qq_35599414 2021-07-27 14:42:54
  • m0_62024703 2021-11-30 17:04:37
  • weixin_42073629 2021-05-22 19:11:05
  • weixin_39769228 2020-12-19 12:57:46
  • weixin_30957757 2021-01-18 22:51:58
  • qq_14855971 2021-04-06 00:38:13

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 271,080
精华内容 108,432
关键字:

cluster集群