Redis 集群安装

Redis Cluster(Redis集群)简介

  • redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis5.0.9版本;
  • redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
  • redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
  • 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
  • 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
  • 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
  • 综上所述,每个Redis集群理论上最多可以有16384个节点。
  • Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
  • 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。考虑到没有这么多虚拟机,所以这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。

1、单机安装

https://blog.csdn.net/mshxuyi/article/details/108501093

2、将redis源码下src目录下的以下文件拷贝到我们的redis-cluster下


cd /usr/local/redis/bin
mkdir /usr/local/redis-cluster
cp redis-cli redis.conf redis-sentinel redis-server /usr/local/redis-cluster/redis01

3、修改配置

# vim /usr/local/redis-cluster/redis01

cluster-enabled yes              # 开启集群
protected-mode no                # 关闭保护模式
port 7001                        # 不同节点不同端口号
daemonize yes                    # 开启后台启动
pidfile /var/run/redis_7001.pid  # 服务id文件名称及地址更改防止冲突
# bind 127.0.0.1                 # 注释掉绑定的127.0.0.1,服务对外开放

4、 重复 2-3 步骤 创建 redis02 redis03 redis04 redis05 redis06

[root@node3 redis-cluster]# ll
total 0
drwxr-xr-x 2 root root 227 Sep  9 21:10 redis01
drwxr-xr-x 2 root root 207 Sep  9 21:30 redis02
drwxr-xr-x 2 root root 207 Sep  9 21:10 redis03
drwxr-xr-x 2 root root 207 Sep  9 21:30 redis04
drwxr-xr-x 2 root root 207 Sep  9 21:10 redis05
drwxr-xr-x 2 root root 207 Sep  9 21:10 redis06

5、创建脚本 启动所有 redis

cd redis01

vim start-all.sh

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

 6、创建集群

--cluster create:创建集群命令,后面是6个节点
–cluster-replicas 1:告诉他每个主有一个从节点,redis默认会把前面三个作为主,后面作为从

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


# 成功
>>> Performing Cluster Check (using node 192.168.2.103:7001)
M: 1b5dde36c6a9141ade5b7324380568c554cd1a62 192.168.2.103:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 91b2133a316bffb7df1940e2b733cc27780aecbc 192.168.2.103:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: c16727abe18a23104c22589d5a75539eeb4e8388 192.168.2.103:7005
   slots: (0 slots) slave
   replicates 9ef7c43baef7b896167db2e3d0474117e5bdb4e8
S: c0c37a1bad4a12067a5c457a3b98ea088c3764b8 192.168.2.103:7006
   slots: (0 slots) slave
   replicates 1b5dde36c6a9141ade5b7324380568c554cd1a62
M: 9ef7c43baef7b896167db2e3d0474117e5bdb4e8 192.168.2.103:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 8819a08ecb3deb57252ea476218deab9c63aa128 192.168.2.103:7004
   slots: (0 slots) slave
   replicates 91b2133a316bffb7df1940e2b733cc27780aecbc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

7、查看集群节点

192.168.2.103:7001> cluster nodes
91b2133a316bffb7df1940e2b733cc27780aecbc 192.168.2.103:7002@17002 master - 0 1599659621887 2 connected 5461-10922
c16727abe18a23104c22589d5a75539eeb4e8388 192.168.2.103:7005@17005 slave 9ef7c43baef7b896167db2e3d0474117e5bdb4e8 0 1599659620000 5 connected
c0c37a1bad4a12067a5c457a3b98ea088c3764b8 192.168.2.103:7006@17006 slave 1b5dde36c6a9141ade5b7324380568c554cd1a62 0 1599659621000 6 connected
9ef7c43baef7b896167db2e3d0474117e5bdb4e8 192.168.2.103:7003@17003 master - 0 1599659621000 3 connected 10923-16383
8819a08ecb3deb57252ea476218deab9c63aa128 192.168.2.103:7004@17004 slave 91b2133a316bffb7df1940e2b733cc27780aecbc 0 1599659620879 4 connected
1b5dde36c6a9141ade5b7324380568c554cd1a62 192.168.2.103:7001@17001 myself,master - 0 1599659620000 1 connected 0-5460

 8、测试

# 7001节点 设置一个键值
[root@node3 redis01]# ./redis-cli -h 192.168.2.103 -p 7001 -c
192.168.2.103:7001> set name alice
-> Redirected to slot [5798] located at 192.168.2.103:7002
OK


# 7002节点 查看,成功
[root@node3 redis01]# ./redis-cli -h 192.168.2.103 -p 7002 -c
192.168.2.103:7002> ping 
PONG
192.168.2.103:7002> get name
"alice"

 

你可能感兴趣的:(CentOS,7)