linux安装redis-6.0.1单机和集群 (2)

  redis cluster采用投票容错机制,集群角色有master和slave。master之间分配slots,slave向它指定的master同步数据,实现备份。master用于写数据,slave用于读数据,向slave写数据会发生错误。当其中一个master无法提供服务时,该master的slave提升为master,代替master提供服务。保证集群中slot的完整性,即集群数据的完整性。一旦集群中其中一个master和它的所有slave全部失效,导致slot不完整,那么集群将会不可用,这是就需要人工去处理了。

  投票过程是集群中所有master参与,如果半数以上的节点与节点之间的通讯时间超过cluster-node-timeout,则认为当前节点挂掉。所以一般master节点数量均为奇数个,且不少于3个。

  什么情况下整个集群不可用?

  a.如果集群中任一master节点挂掉且没有slave节点顶替,集群进入不可用状态;

  当集群不可用时,对集群中的任何操作都不可用。

集群搭建:

  我们这里搭建一个伪分布式的集群,集群中有3个节点,每个节点有一主一备,理论需要6台虚拟机,我们采用6个redis实例来模拟创建。

注意:这里的集群环境ruby环境是用于后面创建集群命令的运行环境,但是在高版本例如redis-5.0.5版本及以上就不需要安装此环境了,因为高版本创建集群已经不用redis-trib.rb这个脚本,而是使用自带的redis-cli创建。(呜呜,环境坑了我一下午,最后创建集群时才发现...)

1.安装集群环境ruby

  安装ruby,执行命令

  yum install ruby rubygems  -y

  安装redis与ruby的连接包,执行命令

    gem install redis

    如果提示ruby版本过低,需要升级ruby版本,需要安装rvm(命令行工具,提供ruby环境管理和版本切换),安装rvm前需要安装curl(文件传输工具),执行命令

    yum install curl -y

    使用curl安装rvm,执行命令

    curl -L get.rvm.io | bash -s stable

    安装会报错,并产生一串公钥,执行命令

    gpg --keyserver hkp://keys.gnupg.net --recv-keys (这里跟上上面的公钥)

    再次执行命令,一次不行多执行几次

    curl -sSL https://get.rvm.io | bash -s stable

    安装完成后会在/user/local目录下发现rvm目录,将命令放入shell,执行命令

    source /usr/local/rvm/scripts/rvm

    查看rvm管理的ruby版本,执行命令

    rvm list known

    安装新版本,可以参照安装连接包时提示的最低版本安装,我这里安装2.5.7版本,执行命令

    rvm install ruby-2.5.7

    等待ruby安装完成,查看已安装的版本,

    rvm list

    使用此版本

    rvm use ruby-2.5.7

    检查一下当前使用的版本,ruby -v

  最后再次执行命令

    gem install redis

  环境安装完成!!

2.创建集群目录

  进入/usr/local目录,执行命令

  mkdir redis_cluster

3.复制redis实例

  将redis目录复制到redis_cluster中,执行命令

  cp -r /usr/local/redis /usr/local/redis_cluster/redis7001

  ps:这里注意一点,如果此时数据库中有数据,那么将rdb文件一起复制时会导致后面集群创建失败,有数据时不能创建集群。解决:删除实例下rdb备份文件以及后面会生成的nodes.conf文件。

4.更改配置

  更改redis7001中配置redis.conf参数

  port 7001  修改端口号

  cluster-enabled yes  开启集群支持

  将redis7001实例复制6份到当前文件夹,

  cp redis7001 redis7002

  cp redis7001 redis7003

  ......

  修改各个实例下的端口号

5.把创建集群的ruby脚本复制到集群目录

  进入redis的src目录,执行命令

  cp redis-trib.rb /usr/local/redis_cluster/

6.创建集群

  启动6个redis实例,这里为了方便编写一个启动脚本,在redis_cluste目录下新建文件

  touch start-all.sh

  编辑输入如下内容:  

    cd ./redis7001
    ./bin/redis-server redis.conf
    echo "启动redis7001成功..."

    cd ../redis7002
    ./bin/redis-server redis.conf
    echo "启动redis7002成功..."

    cd ../redis7003
    ./bin/redis-server redis.conf
    echo "启动redis7003成功..."

    cd ../redis7004
    ./bin/redis-server redis.conf
    echo "启动redis7004成功..."

    cd ../redis7005
    ./bin/redis-server redis.conf
    echo "启动redis7005成功..."

    cd ../redis7006
    ./bin/redis-server redis.conf
    echo "启动redis7006成功..."

  赋予执行权限

  chmod +x start-all.sh

  新建关闭redis集群脚本

    touch stop-all.sh

  编辑输入如下内容:  

    cd ./redis7001
    bin/redis-cli -p 7001 shutwodn
    echo "关闭redis7001成功..."

    cd ../redis7002
    bin/redis-cli -p 7002 shutdown
    echo "关闭redis7002成功..."

    cd ../redis7003
    bin/redis-cli -p 7003 shutdown
    echo "关闭redis7003成功..."

    cd ../redis7004
    bin/redis-cli -p 7004 shutdown
    echo "关闭redis7004成功..."

    cd ../redis7005
    bin/redis-cli -p 7005 shutdown
    echo "关闭redis7005成功..."

    cd ../redis7006
    bin/redis-cli -p 7006 shutdown
    echo "关闭redis7006成功..."

  创建集群命令:

    进入到集群中某个实例下的bin目录,高版本执行

    ./redis-cli --cluster create --cluster-replicas 1 192.168.2.75:7001 192.168.2.75:7002 192.168.2.75:7003 192.168.2.75:7004 192.168.2.75:7005 192.168.2.75:7006 

    低版本执行

    ./redis-trib.rb create --replicas 1 192.168.2.75:7001 192.168.2.75:7002 192.168.2.75:7003 192.168.2.75:7004 192.168.2.75:7005 192.168.2.75:7006

    注:replicas参数表示一个master有接个slave

  然后就会按照默认的方式进行分配matser,主从关系。

7.测试

  使用命令连接上集群某个节点

  ./redis-cli -p 7001

  使用命令 cluster info 和 cluster nodes可查看集群信息。

至此,集群版搭建完成!!

好累,歇会~~~

如有错误,感谢您的指正!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgdsp.html