redis.conf配置文件
protected-mode yes port 7001 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_7001.pid loglevel verbose databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir ./ masterauth abcAbc123. replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 requirepass abcAbc123. lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 15000 cluster-replica-validity-factor 10 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 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
上面时原始的redis.conf去除了注释后 , 并修改了部分属性 , 修改部分如下:
# 端口号 port 7001 # 进程ID保存文件 pidfile /var/run/redis_7001.pid # 向主服务器认证的密码 masterauth abcAbc123. # 服务器自己的密码 与向主服务器认证密码保持一致 requirepass abcAbc123. # 开启appendaof模式 appendonly yes # 开启集群 cluster-enabled yes # 集群节点配置文件名称 cluster-config-file nodes-7001.conf
启动集群
cd /opt/redis/docker_redis_cluster && docker-compose up -d
测试集群
# 进入容器 docker exec -it redis1 /bin/bash # 使用集群方式连接Redis redis-cli -h 162.14.74.11 -p 7001 -c # 使用密码认证 162.14.74.11:7001> auth abcAbc123. OK # 使用cluster nodes查询集群节点 162.14.74.11:7001> cluster nodes ef24f98f9d811539ed3aa7ebd58b42c02ae11c1a 162.14.74.11:7005@17005 slave d77367d7830b4503980a14e379cb06a271906787 0 1663164275000 1 connected 5a92ba294e35f1d61e8091216c59c2fa44adfb9d 162.14.74.11:7002@17002 master - 0 1663164276864 2 connected 5461-10922 d77367d7830b4503980a14e379cb06a271906787 10.0.0.5:7001@17001 myself,master - 0 1663164274000 1 connected 0-5460 448b264edf1f697128395d8b6a656129024e2b55 162.14.74.11:7006@17006 slave 5a92ba294e35f1d61e8091216c59c2fa44adfb9d 0 1663164275861 2 connected 841ea8438a496f02c3866fa71fc9d4271b94e946 162.14.74.11:7004@17004 slave 851c1b20f0616b60f172837e7e4bce792397d8ac 0 1663164275000 3 connected 851c1b20f0616b60f172837e7e4bce792397d8ac 162.14.74.11:7003@17003 master - 0 1663164273856 3 connected 10923-16383
使用Docker方式实现集群 , 其实跟手动实现集群是一样的 , 只是使用docker-compose一键实现了该操作而已 。
2.3、Redis客户端分片与重定向
不同节点分组服务于相互无交集的分片(sharding) , Redis Cluster不存在单独的proxy或配置服务器 , 所以需要将客户端路由到目标的分片 。
Redis Cluster的客户端相比单机Redis需要具备路由语义的识别能力 , 且具备一定的路由缓存能力 。
2.3.1、moved重定向
我们直到 , Redis集群数据时存储在各个分片上的 , 如果我们连接某一个几点 , 但是数据没有在该节点上 , 将会被重定向到其他节点获取数据 。流程图如下:
流程图
文章插图
流程说明
- 1、每个节点都共享RedisCluster中槽和集群中对应节点的关系(元数据共享)
- 2、客户端向RedisCluster的任意节点发送命令 , 接收命令的节点会根据CRC16规则进行hash运算与16384取余 , 计算自己的槽和对应节点(计算所在槽和节点)
- 3、如果保存数据的槽被分配给当前节点 , 则去槽中执行命令 , 并把命令执行结果返回给客户端(数据就在本节点 , 执行就返回)
- 4、如果保存数据的槽不在当前节点的管理范围内 , 则向客户端返回moved重定向异常(不在 , 返回moved重定向标识)
推荐阅读
- Redis 的大 Key 对持久化有什么影响?
- 手机防窥膜的原理是什么?真的会影响视力吗?
- 碘酒消毒的原理是什么?
- 三大指纹识别原理 指纹识别技术
- 玄空风水原理和方法 大玄空风水
- 图解涡轮增压器工作原理 涡轮增压器工作原理
- 跳绳减肥原理是什么
- 瘦身舞蹈瘦腿的原理是什么?
- 详解反渗透膜(RO 反渗透膜原理工作原理)
- 精索静脉曲张手术原理
