摘抄

Redis-Cluster采用无中心结构:
所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
节点的fail是通过集群中超过半数的节点检测失效时才生效。
客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
工作方式
在redis的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383。还有一个就是cluster,可以理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

为了保证高可用,redis-cluster集群引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点ping一个主节点A时,如果半数以上的主节点与A通信超时,那么认为主节点A宕机了。如果主节点A和它的从节点A1都宕机了,那么该集群就无法再提供服务了。

服务版本说明

服务 版本号 备注
Redis redis-5.0.5

部署环境

系统环境:centos7.6
服务版本:redis-5.0.5
主机名:yhcs_1、yhcs_2
IP:192.168.43.176、192.168.43.177

下载路径

Redis官网:http://redis.io

安装约定并创建目录

安装包存放目录:/data/software/redis
安装目录:/usr/local/redis
节点目录:/usr/local/redis_cluster
设置节点:7000、7001、7002
[root@yhcs_1 ~]# mkdir -p /data/software/redis
[root@yhcs_1 ~]# mkdir -p /usr/local/redis
[root@yhcs_1 ~]# mkdir -p /usr/local/redis_cluster

上传redis-5.0.5.tar.gz

[root@yhcs_1 ~]# cd /data/software/redis/
[root@yhcs_1 redis]# rz -y
[root@yhcs_1 redis]# ls
redis-5.0.5.tar.gz
[root@yhcs_1 redis]# tar -zxvf redis-5.0.5.tar.gz

编译安装

[root@yhcs_1 redis]# cd redis-5.0.5
[root@yhcs_1 redis]# yum install -y gcc
[root@yhcs_1 redis-5.0.5]# make
报错:zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
关于分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数
[root@yhcs_1 redis-5.0.5]# make MALLOC=libc
[root@yhcs_1 redis-5.0.5]# cd src
[root@yhcs_1 src]# make test
You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1
[root@yhcs_1 src]# yum install -y tcl
[root@yhcs_1 src]# make test
测试make test 成功!
#redis在这一步才指定安装路径
[root@yhcs_1 src]# make install PREFIX=/usr/local/redis
#安装完成后查看安装目录
[root@yhcs_1 src]# cd /usr/local/redis
[root@yhcs_1 redis]# ll
total 0
drwxr-xr-x. 2 root root 134 Oct 17 17:09 bin
[root@yhcs_1 redis]# ls -l bin/
total 12980
-rwxr-xr-x. 1 root root 353824 Oct 17 17:09 redis-benchmark #redis性能测试工具启动,测试redis在你的系统及你的配置下的读写性能
-rwxr-xr-x. 1 root root 4045352 Oct 17 17:09 redis-check-aof #更新aof日志检查
-rwxr-xr-x. 1 root root 4045352 Oct 17 17:09 redis-check-rdb #本地数据库检查
-rwxr-xr-x. 1 root root 794384 Oct 17 17:09 redis-cli #命令行操作工具(即客户端)
lrwxrwxrwx. 1 root root 12 Oct 17 17:09 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 4045352 Oct 17 17:09 redis-server #redis服务器的daemon启动程序

配置环境变量

[root@yhcs_1 redis]# echo ‘export PATH=$PATH:/usr/local/redis/bin’ >> /etc/profile
[root@yhcs_1 redis]# source /etc/profile
[root@yhcs_1 redis]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/redis/bin

查看redis启动方式

[root@yhcs_1 redis]# redis-server --help
Usage: ./redis-server [/path/to/redis.conf] [options]
./redis-server - (read config from stdin)
./redis-server -v or --version
./redis-server -h or --help
./redis-server --test-memory

Examples: #redis服务器的daemon程序如何启动
./redis-server (run the server with default conf)
./redis-server /etc/redis/6379.conf
./redis-server --port 7777
./redis-server --port 7777 --replicaof 127.0.0.1 8888
./redis-server /etc/myredis.conf --loglevel verbose

Sentinel mode:
./redis-server /etc/sentinel.conf --sentinel

拷贝配置文件

#拷贝安装包目录下的配置文件到安装目录的conf目录下
[root@yhcs_1 redis]# cd /data/software/redis/redis-5.0.5
[root@yhcs_1 redis-5.0.5]# mkdir -p /usr/local/redis/conf
[root@yhcs_1 redis-5.0.5]# cp redis.conf /usr/local/redis/conf

启动redis

[root@yhcs_1 redis-5.0.5]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
[root@yhcs_1 redis-5.0.5]# echo ‘vm.overcommit_memory=1’ >>/etc/sysctl.conf
[root@yhcs_1 redis-5.0.5]# sysctl -p
vm.overcommit_memory = 1
[root@yhcs_1 redis-5.0.5]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
#警告:
#128太小了
#您的内核中启用了透明的大页面(THP)支持,
#这将创建与ReDIS的延迟和内存使用问题,
#若要修复此问题,请运行命令“EngEng/mS/mL/mM/ExpListNo.HugPoIP/启用”为root,
#并将其添加到您的/etc/rc.local,以便在重新启动后保留设置。在禁用THP之后,必须重新启动redis。

[root@yhcs_1 ~]# echo 511 > /proc/sys/net/core/somaxconn
#这个只是暂时的解决,系统重启后失效。想要永久解决,需执行以下两条命令(大小可根据具体负载需求配置)
#echo -e “net.core.somaxconn=1024” >> /etc/sysctl.conf
#sysctl -p
[root@yhcs_1 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@yhcs_1 ~]# echo -e /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf >> /etc/rc.local #设置开机自启,后面部署集群后需修改,可不执行
[root@yhcs_1 redis-5.0.5]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

测试redis部署

#检查redis服务是否启动成功
#如果想查看进程里面有没有redis服务,可以用pstree命令查看进程:
#默认的情况下,redis服务的端口号是6379
#redis 服务的端口号在主配置文件/usr/local/redis/conf/redis.conf 中修改
#netstat -lntup|grep redis
#ps -ef |grep redis
#lsof -i:6379
查不到进程
[root@yhcs_1 ~]# ps -ef |grep redis
root 12289 12255 0 20:51 pts/1 00:00:00 grep --color=auto redis
redis放在后台运行
#默认情况,Redis不是在后台运行,我们需要把redis放在后台运行
#将/etc/redis.conf打开文件找到daemonize no 为 daemonize yes ,这样就可以默认启动就后台运行
[root@yhcs_1 ~]# sed -i ‘s/daemonize no/daemonize yes/g’ /usr/local/redis/conf/redis.conf
#测试
[root@yhcs_1 ~]# netstat -lntup |grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 12323/redis-server
[root@yhcs_1 ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> set name yhcs
OK
127.0.0.1:6379> get name
“yhcs”
127.0.0.1:6379> quit

关闭redis的正确方法(停止redis实例)

#/usr/local/redis/bin/redis-cli shutdown
#pkill redis-server

集群部署

#上面是redis的简单部署,下面进入redis的集群部署
#根据以上部署,先关闭redis,再进行部署
[root@yhcs_1 ~]# /usr/local/redis/bin/redis-cli shutdown
或者
[root@yhcs_1 ~]# pkill redis-server

创建 Redis 节点

在/usr/local/redis_cluster目录下,创建各节点的目录为7000、7001、7002
[root@yhcs_1 ~]# cd /usr/local/redis_cluster/
[root@yhcs_1 redis_cluster]# mkdir 7000 7001 7002

拷贝配置文件

[root@yhcs_1 redis_cluster]# cp /data/software/redis/redis-5.0.5/redis.conf /usr/local/redis_cluster/7000
[root@yhcs_1 redis_cluster]# cp /data/software/redis/redis-5.0.5/redis.conf /usr/local/redis_cluster/7001
[root@yhcs_1 redis_cluster]# cp /data/software/redis/redis-5.0.5/redis.conf /usr/local/redis_cluster/7002

修改配置

vi /usr/local/redis_cluster/7000/redis.conf #配置文件里不要保留注释以及不必要的空格
bind 本机IP 127.0.0.1 #ip看需求配置,127可加在后面
port 7000 #修改端口为7000、7001、7002
protected-mode yes
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes #设置为yes,使redis在后台运行
supervised no
pidfile /usr/local/redis_cluster/7000/redis_7000.pid #修改端口为7000、7001、7002
loglevel notice
logfile /usr/local/redis_cluster/log/redis_7000.log
cluster-enabled yes #开启集群 把注释#去掉
cluster-node-timeout 15000 #请求超时,默认15秒,可自行设置
cluster-config-file /usr/local/redis_cluster/7000/nodes-7000.conf #集群配置信息文件,由Redis自行更新,不用手动配置。每个节点都有一个集群配置文件用于持久化保存集群信息,需确保与运行中实例的配置文件名不冲突。
cluster-node-timeout 15000 #节点互连超时时间,毫秒为单位
cluster-slave-validity-factor 10 #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor)+ repl-ping-slave-period如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
cluster-migration-barrier 1 #master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数被设为2,那么只有当一个主节点拥有2个可工作的从节点时,它的一个从节点才会尝试迁移。
cluster-require-full-coverage yes #集群所有节点状态为ok才提供服务。建议设置为no,可以在slot没有全部分配的时候提供服务。
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
dbfilename “dump_7000.rdb”
dir “/data/redis_cluster/7000”
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no #aof日志开启 ,有需要就开启,它会每次写操作都记录一条日志
appendfilename “appendonly_7000.aof”
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events “”
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
maxmemory 8gb
maxmemory-policy allkeys-lfu #从全部key中挑选使用频率最低的数据淘汰;

sed -i ‘s/port 6379/port 7000/g’ /usr/local/redis_cluster/7000/redis.conf
sed -i ‘s/bind 127.0.0.1/bind 192.168.43.176/g’ /usr/local/redis_cluster/7000/redis.conf
sed -i ‘s/dir .//dir /usr/local/redis_cluster/7000//g’ /usr/local/redis_cluster/7000/redis.conf #redis dump.rdb appendonly.aof 文件路径修改
sed -i ‘s/daemonize no/daemonize yes/g’ /usr/local/redis_cluster/7000/redis.conf
sed -i ‘s/pidfile /var/run/redis_6379.pid/pidfile /var/run/redis_7000.pid/g’ /usr/local/redis_cluster/7000/redis.conf
sed -i ‘s/# cluster-config-file nodes-6379.conf/cluster-config-file /usr/local/redis_cluster/7000/nodes-7000.conf/g’ /usr/local/redis_cluster/7000/redis.conf
sed -i ‘s/# cluster-enabled yes/cluster-enabled yes/g’ /usr/local/redis_cluster/7000/redis.conf

#其他节点直接把7000修改成对应的节点号,IP部署哪台就改成哪台的IP即可

启动各个节点

[root@yhcs_1 ~]# /usr/local/redis/bin/redis-server /usr/local/redis_cluster/7000/redis.conf
12478:C 17 Oct 2019 22:15:41.209 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12478:C 17 Oct 2019 22:15:41.209 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=12478, just started
12478:C 17 Oct 2019 22:15:41.209 # Configuration loaded
[root@yhcs_1 ~]# /usr/local/redis/bin/redis-server /usr/local/redis_cluster/7001/redis.conf
[root@yhcs_1 ~]# /usr/local/redis/bin/redis-server /usr/local/redis_cluster/7002/redis.conf

[root@yhcs_1 redis_cluster]# ps -ef | grep redis
root 12479 1 0 22:15 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.43.176:7000 [cluster]
root 12484 1 0 22:15 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.43.176:7001 [cluster]
root 12503 1 0 22:19 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.43.176:7002 [cluster]

#根据以上步骤同样部署yhcs_2,然后启动各个节点
[root@yhcs_2 redis_cluster]# ps -ef |grep redis
root 23225 1 0 22:43 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.43.177:7000 [cluster]
root 23230 1 0 22:43 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.43.177:7001 [cluster]
root 23235 1 0 22:43 ? 00:00:00 /usr/local/redis/bin/redis-server 192.168.43.177:7002 [cluster]
root 23240 18761 0 22:43 pts/2 00:00:00 grep --color=auto redis

创建集群

------------------------虚线部分供参考,不需操作--------------------------
#Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,复制到/usr/local/bin 目录,即可直接在命令行中使用了。使用下面这个命令即可完成安装。
#先将 redis-trib.rb 复制到 /usr/local/bin 目录下

redis-trib.rb create --replicas 1 192.168.43.176:7000 192.168.43.176:7001 192.168.43.176:7002 192.168.43.177:7000 192.168.43.177:7001 192.168.43.177:7002

#其中,前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器。
[root@yhcs_1 redis_cluster]# redis-trib.rb create --replicas 1 192.168.43.176:7000 192.168.43.176:7001 192.168.43.176:7002 192.168.43.177:7000 192.168.43.177:7001 192.168.43.177:7002
/usr/bin/env: ruby: No such file or directory

[root@yhcs_1 redis_cluster]# yum -y install ruby ruby-devel rubygems rpm-build

[root@yhcs_1 redis_cluster]# redis-trib.rb create --replicas 1 192.168.43.176:7000 192.168.43.176:7001 192.168.43.176:7002 192.168.43.177:7000 192.168.43.177:7001 192.168.43.177:7002
WARNING: redis-trib.rb is not longer available!
#原因是因为redis5.0使用redis-cli作为创建集群的命令,使用c语言实现,不再使用ruby语言

#以上命令也许会因为yum源的问题,安装的版本会比较低,还是达不到要求,那就得移除重新安装(本次没有遇到,可忽略重装ruby)
redis-trib.rb:6: odd number list for Hash
white: 29, ^
redis-trib.rb:6: syntax error, unexpected ‘:’, expecting ‘}’
white: 29, ^
redis-trib.rb:7: syntax error, unexpected ‘,’, expecting kEND
[root@yhcs_1 bin]# yum remove -y ruby
[root@yhcs_1 bin]# yum remove -y rubygems
#本次ruby是在www.ruby-lang.org/en/downloads/下载ruby-2.6.3.tar.gz
[root@yhcs_1 ruby]# cd /data/software/ruby
[root@yhcs_1 ruby]# rz –E
rz waiting to receive.
[root@yhcs_1 ruby]# tar -xzf ruby-2.6.3.tar.gz
[root@yhcs_1 ruby]# cd ruby-2.6.3
[root@yhcs_1 ruby-2.6.3]# ./configure
[root@yhcs_1 ruby-2.6.3]# make
[root@yhcs_1 ruby-2.6.3]# make install
[root@yhcs_1 ruby-2.6.3]# ruby –v
-bash: /usr/bin/ruby: No such file or directory
[root@yhcs_1 ruby-2.6.3]# /usr/local/bin/ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
#说明ruby被装到了该目录下,而非系统认为的 /usr/bin/ruby
[root@yhcs_1 ruby-2.6.3]# ln -s /usr/local/bin/ruby /usr/bin/ruby
[root@yhcs_1 ruby-2.6.3]# ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

--------------------------------虚线内容结束------------------------------------

#(redis5之后自带有redis-cli --cluster可以创建集群)进到/usr/local/redis/bin执行以下命令,且已在前面启动了各个节点
[root@yhcs_1 redis_cluster]# cd /usr/local/redis/bin/
[root@yhcs_1 bin]# ./redis-cli --cluster create 192.168.43.176:7000 192.168.43.176:7001 192.168.43.176:7002 192.168.43.177:7000 192.168.43.177:7001 192.168.43.177:7002 --cluster-replicas 1
Could not connect to Redis at 192.168.43.177:7000: No route to host
#需关闭防火墙或者给防火墙配置对应的端口权限
[root@yhcs_1 ~]# systemctl stop firewalld
[root@yhcs_2 ~]# systemctl stop firewalld
#以下创建集群如
报错Node is not empty
1 node(s) may be unreachable
1)pkill redis-server #关闭redis
2)将每个节点下dump.rdb、nodes-***.conf、appendonly.aof(本次未开启.aof)文件删除;
3)172.168.43.176:7000> flushdb #清空当前数据库(可省略)
4)之后再执行脚本,成功执行;

[root@yhcs_1 bin]# ./redis-cli --cluster create 192.168.43.176:7000 192.168.43.176:7001 192.168.43.176:7002 192.168.43.177:7000 192.168.43.177:7001 192.168.43.177:7002 --cluster-replicas 1>>> 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.43.177:7002 to 192.168.43.176:7000
Adding replica 192.168.43.176:7002 to 192.168.43.177:7000
Adding replica 192.168.43.177:7001 to 192.168.43.176:7001
M: 8a823f513575f4b456f9700896ab67c0741ef2ce 192.168.43.176:7000
slots:[0-5460] (5461 slots) master
M: 80a9947f618f46ed5223411f015a47cda2dbbc8a 192.168.43.176:7001
slots:[10923-16383] (5461 slots) master
S: 5e096821ea062f8ecb0e7817e5e104ac92df766d 192.168.43.176:7002
replicates b9bcbf6376d2f957d0ee1bfb5cf6976caa6b788e
M: b9bcbf6376d2f957d0ee1bfb5cf6976caa6b788e 192.168.43.177:7000
slots:[5461-10922] (5462 slots) master
S: 6b79af71c9d0c35f455d9958f55ab58eabad546c 192.168.43.177:7001
replicates 80a9947f618f46ed5223411f015a47cda2dbbc8a
S: 6449a6b2d132f5ea036288e6dda2d2e3414e7557 192.168.43.177:7002
replicates 8a823f513575f4b456f9700896ab67c0741ef2ce
Can I set the above configuration? (type ‘yes’ to accept): yes 一定要输入全拼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.43.176:7000)
M: 8a823f513575f4b456f9700896ab67c0741ef2ce 192.168.43.176:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: b9bcbf6376d2f957d0ee1bfb5cf6976caa6b788e 192.168.43.177:7000
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 6b79af71c9d0c35f455d9958f55ab58eabad546c 192.168.43.177:7001
slots: (0 slots) slave
replicates 80a9947f618f46ed5223411f015a47cda2dbbc8a
M: 80a9947f618f46ed5223411f015a47cda2dbbc8a 192.168.43.176:7001
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 5e096821ea062f8ecb0e7817e5e104ac92df766d 192.168.43.176:7002
slots: (0 slots) slave
replicates b9bcbf6376d2f957d0ee1bfb5cf6976caa6b788e
S: 6449a6b2d132f5ea036288e6dda2d2e3414e7557 192.168.43.177:7002
slots: (0 slots) slave
replicates 8a823f513575f4b456f9700896ab67c0741ef2ce
[OK] All nodes agree about slots configuration.
Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.

#集群部署成功,接下来需要验证功能了

集群验证

[root@yhcs_1 bin]# ./redis-cli -p 7000 -c
127.0.0.1:7000> set name yhcs
-> Redirected to slot [5798] located at 192.168.43.177:7000
OK
192.168.43.177:7000> get name
“yhcs”
192.168.43.177:7000>
[root@yhcs_1 bin]# ./redis-cli -p 7002 -c
127.0.0.1:7002> get name
-> Redirected to slot [5798] located at 192.168.43.177:7000
“yhcs”
192.168.43.177:7000>

#集群连接
#连接方式为 redis-cli -c -p 7000 ,加参数 -c 可连接到集群,以集群模式进行操作。集群模式下只有0号数据库可用,无法再通过select来切换数据库。登录后创建一些key用于测试,可以看到输出信息显示这个key是被存到了其他机器上。使用get获取key的时候也可以看到该key是被分配到了哪个节点

#cluster nodes 查看节点的状态
#cluster failover 主从切换
#redis cluster 发生主从切换后,即使之前的主节点恢复了也不会变回主节点,而是作为从节点在工作,这一点和sentine模式是一样的。如果想要它变回主节点,只需要在该节点执行命令cluster failover

#redis集群查所有key命令:
./redis-cli -c --cluster call 192.168.43.176:7000 keys *

#以上说明集群运作正常,到此集群部署完成
#配置集群密码
关闭redis-cluster,修改所有redis服务器的配置文件添加密码(所有节点密码必须一致),然后重启redis-cluster

requirepass redispassword
masterauth redispassword

验证原理

(以下解释来源于网络)
redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。
Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

注意项
需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

参考文档

学习途中查寻的资料太多了,仅能列出部分,致敬!
redis集群报错Node is not empty :https://www.jianshu.com/p/338bc2a74300
redis-trib.rb命令详解:https://www.cnblogs.com/ivictor/p/9768010.html
Redis集群搭建与简单使用:https://www.cnblogs.com/wuxl360/p/5920330.html
Redis教程(八)cluster集群的配置:https://blog.csdn.net/weixin_42073629/article/details/117170279
Redis详解(二)------ redis的配置文件介绍:https://blog.csdn.net/sllin/article/details/106792448
Redis cluster集群:原理及搭建:https://blog.csdn.net/truelove12358/article/details/79612954

心不死,土不埋,学无止境

redis-cluster集群部署及测试(超详细)相关推荐

  1. Redis Cluster 集群部署

    2.4:Redis Cluster 部署 2.4.1:部署 Redis Cluster 的前提 时间同步: Redis Node 均采用相同的硬件配置.相同的密码.相同的 Redis 版本: Redi ...

  2. Redis Cluster集群知识学习总结

    Redis集群解决方案有两个: 1)  Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...

  3. 基于Redis6.2.6版本部署Redis Cluster集群

    基于Redis6.2.6版本部署Redis Cluster集群 文章目录 基于Redis6.2.6版本部署Redis Cluster集群 1.Redis6.2.6简介以及环境规划 2.二进制安装Red ...

  4. Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)

    前提:先安装好Redis,参考:http://www.cnblogs.com/EasonJim/p/7599941.html 说明:Redis Cluster集群模式可以做到动态增加节点和下线节点,使 ...

  5. redis cluster 集群 HA 原理和实操(史上最全、面试必备)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...

  6. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门

    目录 Redis 集群搭建Redis 是啥集群(Cluster)Redis Cluster 说明Redis Cluster 节点Redis Cluster 集群模式不能保证一致性创建和使用 Redis ...

  7. Docker搭建3主3从Redis Cluster集群

    本文使用镜像由慕课网的神思者老师提供 本文使用镜像是已经配置好了的Redis镜像, 如果需要自定义可修改配置文件或用官方Redis镜像进行部署 1. 拉取配置好的Redis镜像 docker pull ...

  8. redis 槽点重新分配 集群_5000+字硬核干货!Redis 分布式集群部署实战

    原理: Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储. 集群使用公式(CRC16 key)& 16384计算键key ...

  9. redis cluster 集群 安装 配置 详解

    redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...

最新文章

  1. Gridview改变单元格颜色
  2. 开发最前沿:项目案例实战之桥模式
  3. 苹果企业证书_今日更新:丨企业证书已更新丨苹果丨安卓软件下载说明丨
  4. Window下mysql的安装
  5. 图解在emu8086中学习几条汇编语言常用语句
  6. 三丰三坐标编程基本步骤_数控车床编程,经典实例教程
  7. 3.2.5 四则运算的例子
  8. 让互联网更快的协议,QUIC在腾讯的实践及性能优化
  9. 插入始终是1_C++入门篇(四十四),链表查询与结点插入
  10. python转字符_python 字符转换
  11. 数字图像的大小、所需比特数(二维)
  12. java ee 指南 pdf_Java EE 7权威指南:卷1(原书第5版) 中文pdf
  13. python链表实现栈_python实现链表队列栈
  14. composer 无法更新vonder
  15. tomcat7解压版安装过程
  16. 天津学习平面设计培训需要学习多久?
  17. 对话三星张代君:Bixby到底与Siri有什么不同?
  18. Google 就业岗分析
  19. vue+canvas如何实现b站萌系登录界面
  20. php连接mysql实现简单注册登陆页面

热门文章

  1. 手把手解决解决Python安装PCV
  2. 代码的设计图纸——UML(上)
  3. 无线鼠标突然没反应了
  4. uni-app轮播图实现之swiper
  5. FPGA结构与CAD设计(2)
  6. 中国5G无人仓现场运行披露
  7. iscc2023-misc【详解】
  8. 1.4OpenCV所有平台的环境配置,超级详细
  9. 信捷plc,9伺服通用程序架构
  10. 多阶段决策问题——DAG(算法竞赛入门经典笔记)