Redis-05-集群

集群

定义:通过多个Redis实例来组成Redis集群。
特点:
1.每个实例上存储的数据都不同。
2.要求每个节点必须至少拥有一个从节点。以防止集群崩溃。
3.当主节点坏了的时候,从节点可以补上。
4.redis集群是为了强化redis的读写能力。

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.

什么时候整个集群不可用(cluster_state:fail)?
如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态. 
如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

Redis集群搭建

	Redis集群中至少需要三个节点。要保证集群的高可用,每个节点有一个备份机。所以需要6台服务器。
	可以使用一台虚拟机运行6个redis实例。   3个主 3个从   3个主组成集群。

第一步:redis1~redis6即可

  • 创建文件夹
    mkdir cluster
[root@localhost ~]# mkdir cluster
[root@localhost ~]# ls
1.txt                       d.avi                       movie
2.txt                       file                        redis-3.2.9.tar.gz
anaconda-ks.cfg             game                        redis.conf
apache-tomcat-9.0.2.tar.gz  home                        test.tar.gz
a.txt                       initial-setup-ks.cfg        web.war
cluster                     jdk-8u191-linux-x64.tar.gz  wordpress.zip
c.txt                       master-slave                zhl
  • 解压Redis到cluster目录下
    tar -xvf redis-3.2.9.tar.gz -C ./cluster/

在这里插入图片描述

  • 进入文件夹
    cd cluster/
[root@localhost ~]# cd cluster/
[root@localhost cluster]# 
  • 修改redis-3.2.9文件夹名–>redis1
    mv redis-3.2.9/ redis1

    复制redis1,复制5分,分别命名redis2~redis6

[root@localhost cluster]# mv redis-3.2.9/ redis1
[root@localhost cluster]# cp -r redis1/ redis2
[root@localhost cluster]# cp -r redis1/ redis3
[root@localhost cluster]# cp -r redis1/ redis4
[root@localhost cluster]# cp -r redis1/ redis5
[root@localhost cluster]# cp -r redis1/ redis6
[root@localhost cluster]# 

第二步:修改配置文件
(1)打开配置文件

vim redis1/redis.conf

(2)修改配置文件内容

  • 端口号 84行 port 7111
  • 取消IP绑定 61行 #bind 127.0.0.1
  • 关闭保护模式 80行 protected-mode no

(3)将redis1文件夹中的配置文件redis.conf赋值到redis2-6中

	cp redis1/redis.conf redis2/ 
	cp redis1/redis.conf redis3/ 
	cp redis1/redis.conf redis4/ 
	cp redis1/redis.conf redis5/ 
	cp redis1/redis.conf redis6/ 		
[root@localhost cluster]# cp redis1/redis.conf redis2/ 
cp:是否覆盖"redis2/redis.conf"? Y
[root@localhost cluster]# cp redis1/redis.conf redis3/ 
cp:是否覆盖"redis3/redis.conf"? y
[root@localhost cluster]# cp redis1/redis.conf redis4/ 
cp:是否覆盖"redis4/redis.conf"? y
[root@localhost cluster]# cp redis1/redis.conf redis5/ 
cp:是否覆盖"redis5/redis.conf"? y
[root@localhost cluster]# cp redis1/redis.conf redis6/ 
cp:是否覆盖"redis6/redis.conf"? y

(4) 然后再分别改一下redis2-redis6目录下的配置文件redis.conf中的端口号

	vim redis2/redis.conf
	84行
[root@localhost cluster]# vim redis2/redis.conf
[root@localhost cluster]# vim redis3/redis.conf
[root@localhost cluster]# vim redis4/redis.conf
[root@localhost cluster]# vim redis5/redis.conf
[root@localhost cluster]# vim redis6/redis.conf

第三步:创建启动文件

  • 在安装cluster目录下安装ruby
	yum -y install ruby
	yum -y install rubygems
  • 往服务器上传文件:redis-3.2.2.gem
[root@localhost cluster]# gem install redis-3.2.2.gem
Successfully installed redis-3.2.2
Parsing documentation for redis-3.2.2
Installing ri documentation for redis-3.2.2
1 gem installed
  • 启动脚本的编写:
    复制/usr/local/redis-3.2.9/src/redis-trib.rb文件到当前文件夹
    cp /usr/local/redis-3.2.9/src/redis-trib.rb .
[root@localhost cluster]# cp /usr/local/redis-3.2.9/src/redis-trib.rb .
[root@localhost cluster]# ls
redis1  redis2  redis3  redis-3.2.2.gem  redis4  redis5  redis6  redis-trib.rb
  • 修改6个实例,后台运行redis.conf的128行no改成yes
[root@localhost cluster]# vim redis2/redis.conf
[root@localhost cluster]# vim redis3/redis.conf
[root@localhost cluster]# vim redis4/redis.conf
[root@localhost cluster]# vim redis5/redis.conf
[root@localhost cluster]# vim redis6/redis.conf
  • 创建 start-all.sh文件:
    在该文件中编辑以下内容
cd redis1
redis-server redis.conf
cd ..
cd redis2
redis-server redis.conf
cd ..
cd redis3
redis-server redis.conf
cd ..
cd redis4
redis-server redis.conf
cd ..
cd redis5
redis-server redis.conf
cd ..
cd redis6
redis-server redis.conf
cd ..
./redis-trib.rb create --replicas 1 192.168.222.128:7111 192.168.222.128:7112 192.168.222.128:7113 192.168.222.128:7114 192.168.222.128:7115 192.168.222.128:7116

	 --replicas  1  表示 自动为每一个master节点分配一个slave节点    上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)
	 128行改成后台运行
  • 通过vim命令进入到redis.conf
  • 修改cluster-enabled yes前的注释去掉
    721行
[root@localhost cluster]# vim redis2/redis.conf
[root@localhost cluster]# vim redis3/redis.conf
[root@localhost cluster]# vim redis4/redis.conf
[root@localhost cluster]# vim redis5/redis.conf
[root@localhost cluster]# vim redis6/redis.conf
  • 启动服务IQ并查看进程
[root@localhost cluster]# #sh start-all.sh
[root@localhost cluster]# ps -ef | grep redis
root       3967      1  0 00:42 ?        00:01:12 redis-server 127.0.0.1:6379
root      15138  14858  0 13:26 pts/1    00:00:00 vim redis6380.conf
root      15181  14858  0 13:29 pts/1    00:00:00 vim redis6382.conf
root      15191  14858  0 13:29 pts/1    00:00:00 vim redis6384.conf
root      15193      1  0 13:29 ?        00:00:23 redis-server 127.0.0.1:6380
root      15199      1  0 13:30 ?        00:00:22 redis-server 127.0.0.1:6382
root      15214      1  0 13:30 ?        00:00:22 redis-server 127.0.0.1:6384
root      21110  20061  0 22:08 pts/0    00:00:00 grep --color=auto redis
  • 创建停止脚本:
    touch shutdown-all.sh

  • 编辑关闭服务器的文件

redis-cli -p 7111 shutdown
redis-cli -p 7112 shutdown
redis-cli -p 7113 shutdown
redis-cli -p 7114 shutdown
redis-cli -p 7115 shutdown
redis-cli -p 7116 shutdown

rm -f redis*/dump.rdb
rm -f redis*/appendonly.aof
rm -f redis*/nodes.conf
  • 关闭服务
 sh shutdown-all.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值