docker下的redis集群

1. 安装 redis 镜像(这里使用6.0.8的版本)

docker pull redis:6.0.8

2. 放开服务器端口(启动服务器前的准备)

2.1 在liunx上打开对应的端口(这里使用一台机器多个容器方式)

打开9907,9908,9909,9910,9911,9912,19907,19908,19909,19910,19911,19912端口

2.2 linux中打开端口命令

firewall-cmd --zone=public --add-port=9907/tcp --permanent
后续把9907替换成其他端口依次打开即可

2.3 打开端口之后需要重启防火墙

systemctl restart firewalld.service

2.4 重启防火墙之后查看已开的端口

firewall-cmd --list-ports

2.5 最后一步

登录你的云平台,找到服务器里面的防火墙,把上述端口全部放开,一共12个端口。

3. 先尝在docke上启动6个redis容器,也就是6个redis服务

3.1 docker启动命令

docker run -d 
-p 9907:9907 
-p 19907:19907  
--privileged=true  
-v /www/server/docker-data/tomcat8/redis/redis-master-1-4/conf:/etc/redis 
-v /www/server/docker-data/tomcat8/redis/redis-master-1-4/data:/data  
--name redis-master-1-4 redis:6.0.8 redis-server /etc/redis/redis.conf  
--port 9907

命令解释:
docker run:运行容器
-p:linux上的端口:docker容器内启动的端口
-d:后台运行
--privileged=true:给容器内root权限
-v:容器卷挂载
--name:容器名字
redis:6.0.8:指定用哪个镜像
redis-server /etc/redis/redis.conf:(额外的命令),启动redis服务,使用指定目录下的配置文件
--port:redis-cli连接的端口,此处的端口要和docker容器内启动的端口一致,不然客户端连不上redis

3.2 注意:在docker内启动的redis,docker内部的/etc/redis/目录下是没有redis.conf配置文件的,第一次启动需要往linux目录/www/server/docker-data/tomcat8/redis/redis-master-1-4/conf/里面复制一个redis.conf

3.3 重复此命令

docker run -d 
 -p 9907:9907  
 -p 19907:19907  
 --privileged=true  
 -v /www/server/docker-data/tomcat8/redis/redis-master-1-4/conf:/etc/redis 
 -v /www/server/docker-data/tomcat8/redis/redis-master-1-4/data:/data  
 --name redis-master-1-4 redis:6.0.8 redis-server /etc/redis/redis.conf  
 --port 9907
 把9907替换成9908,9909,9910,9911,9![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9dc9b001bc53432cbaa9ea83f99f5fef.png#pic_center)
912重复启动,
 ---注意:-v后面的linux上的目录也要替换成不同的6个---

3.4 使用Portainer查看(如下图,此时6个redis服务启动成功)在这里插入图片描述

3.5 随便找一个redis服务容器进入(如下图)

docker exec -it redis-master-1-4 /bin/bash

3.6 进入redis服务容器之后输入下方命令进入redis-cli(如下图)

redis-cli -p 9907

在这里插入图片描述

4. 启动集群前的准备

4.1 修改redis.conf

 打开/www/server/docker-data/tomcat8/redis/redis-master-1-4/conf/目录下的配置文件件
 修改以下内容:
 
 appendonly yes 
 masterauth 123456
 cluster-announce-ip 127.0.0.1(这里我只是举例,不要写127.0.0.1,替换为你的服务器ip)
 cluster-announce-port 9912(6个redis服务,6个不同的端口)
 cluster-announce-bus-port 19912 (6个redis服务,6个不同的端口,在redis端口前面加个1即可)
 cluster-enabled yes
 cluster-config-file nodes-9912.conf (可改可不改)
 cluster-node-timeout 5000
字段
appendonly开启aof
masterauth对于主从结构的redis集群,当主redis设置了连接密码时,需要在从redis上设置此密码。
cluster-announce-ip集群节点的汇报ip,防止nat
cluster-announce-port集群节点的汇报port,防止nat
cluster-announce-bus-port此端口是用来进行节点通信的,一个节点挂了,其他节点就知道了,一般都是10000+端口 (比如端口是9907,则此处的端口就是19907)
cluster-enabled启动集群模式
cluster-config-file集群节点信息文件
cluster-node-timeoutredis节点宕机被发现的时间

4.2 注意:daemonize no一定要为no,否则docker容器起不来。

4.3 注意:6个redis服务,6个redis的配置文件都要修改

 appendonly yes 
 masterauth 123456
 cluster-announce-ip 127.0.0.1(这里我只是举例,不要写127.0.0.1,替换为你的服务器ip)
 cluster-enabled yes
 cluster-node-timeout 5000
 以上这几个字段,6个配置文件的内容可以一样

 cluster-announce-port 9912
 cluster-announce-bus-port 19912 
 cluster-config-file nodes-9912.conf 
 此处的端口要对应各自配置文件的端口

4.4 修改完重启6个redis服务容器

5. 设置redis集群

5.1 随便进入一个redis服务容器

docker exec -it redis-master-1-4 /bin/bash
输入:

redis-cli -a 123456 --cluster create 
127.0.0.1:9907 
127.0.0.1:9908 
127.0.0.1:9909 
127.0.0.1:9910 
127.0.0.1:9911 
127.0.0.1:9912 
--cluster-replicas 1

注意:127.0.0.1 替换为你自己的ip

5.2 出现如下绿色字体代表成功

在这里插入图片描述
在这里插入图片描述

5.3 查看集群主从详情

redis-cli -a 123456 -c -p 9907 cluster nodes

命令解释:
-a:密码
-c:集群模式
-p:端口
cluster nodes:集群节点

注意:在下面可以看到哪个服务器是主节点,哪个是从节点,并且能看到主节点分配的哈希槽的范围是多少

在这里插入图片描述

至此,docker上部署redis集群完成

6. 集群的扩容缩容(如何增加一个主节点)

6.1 新建并启动一个redis服务容器

重复上面的步骤,在新建并启动一个redis服务容器

注意:此处我的主节点端口是9905,19905

6.2 进入这个新建的redis容器内部

docker exec -it  redis-master-0-1-kuorong /bin/bash

6.3 把这个新建的redis容器加入到已有的集群中

添加:
redis-cli -a 123456 --cluster add-node 127.0.0.1:9905 127.0.0.1:9907
注意:第一个ip为新增的redis服务地址 ,第二个为集群内的某个redis集群地址。

查看:
redis-cli -c -a 123456 -h 127.0.0.1 -p 9905 cluster nodes
查看后你会发现,9905已经成为一个主节点了,但是redis还没有给这个主节点分配任何哈希槽

注意:127.0.0.1替换为你的ip

6.4 给新增的主节点分配哈希槽

redis-cli -a 123456 --cluster reshard 127.0.0.1:9905 --cluster-from b59910c6dca165c833a0eb89738a2d4a20bf101a,4311d78555934312e77443a8afecb6ab29954746,44d1db8ce64b4461908e5bf19a3752d1222f87a3 
--cluster-to ae78503af53dfb1fa97f4034a65463ba24af0fb5 --cluster-slots 4000

参数解释:
--cluster reshard(后面跟的是新增的主节点的ip+port)
--cluster-from  (槽位来源的主节点的id)
--cluster-to (槽位要往哪个节点分配的节点id)
--cluster-slots  (分配多了多少槽位)
注意:127.0.0.1替换为你的ip

6.5 注意:给集群中新的主节点分配槽位,是从每个老的主节点中匀出来的,要是老的主节点的某个槽位上有数据,这个槽位将不会分配给新的主节点!如果每个槽位都有数据,那么在新增节点后,集群会通过异步复制的方式将属于新节点负责的槽位的数据从旧节点迁移到新节点上。

7. 集群的扩容缩容(如何增加一个从节点)

7.1 新建并启动一个redis服务容器

重复上面的步骤,在新建并启动一个redis服务容器

注意:此处我的主节点端口是9906,19906

7.2 进入这个新建的redis容器内部

docker exec -it  redis-master-0-1-kuorong /bin/bash

7.3 把这个新建的redis容器加入到已有的集群中

添加:
redis-cli -a 123456 --cluster add-node 127.0.0.1:9906 127.0.0.1:9907
注意:第一个ip为新增的redis服务地址 ,第二个为集群内的某个redis集群地址。

查看:
redis-cli -c -a 123456 -h 127.0.0.1 -p 9906 cluster nodes
查看后你会发现,9906已经成为一个主节点了,别怀疑,得先成主节点,再成9905的从节点

注意:127.0.0.1替换为你的ip

7.4 我们需要执行replicate命令。首先,我们需要连接到9906节点的客户端,然后使用集群命令来执行操作。

先进入redis容器内部(进入容器内部的命令我就不多说了),在进入9906节点的客户端
redis-cli -p 9906

执行:
cluster replicate ae78503af53dfb1fa97f4034a65463ba24af0fb5

解释:后面这串id为9905的节点id

7.5查看下目前的集群状态,9906节点已成功添加为9905节点的从节点了

8. 集群的扩容缩容(如何删除一个从节点,注意:集群的缩容只能先缩从节点)

8.1 我们删除9906这个从节点

进入容器内部执行以下命令:
redis-cli -a 123456 --cluster del-node 127.0.0.1:9906 420649c7ba16ac1aa89ddc94e3c49ef5b4a0298b
指定节点的IP地址为[IP地址],端口为[端口号],节点ID为[9906]

注意:127.0.0.1替换为你的ip

8.2 查看(查看完你会发现,从节点9906已经被移除了)

redis-cli -c -a 123456 -h 127.0.0.1 -p 9905 cluster nodes
注意:127.0.0.1替换为你的ip

9. 集群的扩容缩容(如何删除一个主节点)

9.1 移动主节点内的槽位

因为主节点里面分配了hash槽。因此,我们必须先将9905里的hash槽放入其他可用主节点中,
然后再进行移除节点操作,以避免数据丢失问题。目前只能将master的数据迁移到一个节点上,
暂时无法实现平均分配功能。执行命令如下
redis-cli -a 123456 --cluster reshard 127.0.0.1:9905

注意:127.0.0.1替换为你的ip

9.2 步骤9.1的输出如下

(ps:移动多少槽位,因为刚才我们移过来的是4000,所以我们全部移走)
How many slots do you want to move (from 1 to 16384)? 4000
(ps:这里是需要把数据移动到哪?我们要把槽位全部移动到9907上面去,所以这里填9907的主节点id)
What is the receiving node ID? dfca1388f124dec92f394a7cc85cf98cfa02f86f
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
(ps:这里是需要数据源,也就是我们的9905节点id)
Source node 1:2728a594a0498e98e4b83a537e19f9a0a3790f38
(ps:这里直接输入done 开始生成迁移计划)
Source node 2:done
... ...
(ps:这里输入yes开始迁移)
Do you want to proceed with the proposed reshard plan (yes/no)? Yes

9.3 现在,让我们来查看一下集群的当前状态,你会注意到,9905下面已经没有任何哈希槽了,这证明迁移已经成功完成!

redis-cli -c -a 123456 -h 127.0.0.1 -p 9907 cluster nodes

注意:127.0.0.1替换为你的ip

9.4 最后,我们可以直接使用del-node命令删除9905主节点。这样就可以完全移除该节点了。

redis-cli -a 123456 --cluster del-node 127.0.0.1:9905 ae78503af53dfb1fa97f4034a65463ba24af0fb5

注意:127.0.0.1替换为你的ip

9.5 现在,让我们来查看一下集群的当前状态(你会发现一切都已经还原到最初的状态了!)

redis-cli -c -a 123456 -h 127.0.0.1 -p 9907 cluster nodes

10. 由于 Redis 采用 Gossip 协议,所以可以让新节点与任意一个现有集群节点握手,一段时间后整个集群都会知道新节点的加入。

至此,大功告成,redis集群的扩容缩容结束!!!

redis配置文件详解

  1 daemonize no  默认情况下, redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yes
  2 daemonize yes
  3 
  4 #  当 redis 在后台运行的时候, Redis 默认会把 pid 文件放在 /var/run/redis.pid ,你可以配置到其他地址。
  5 #  当运行多个 redis 服务时,需要指定不同的 pid 文件和端口
  6 pidfile /var/run/redis_6379.pid
  7 
  8 #  指定 redis 运行的端口,默认是 6379
  9 port 6379
 10 
 11 #  在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志
 12 tcp-backlog 511
 13 
 14 #  指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
 15 # bind 192.168.1.100 10.0.0.1
 16 # bind 127.0.0.1
 17 
 18 #  设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接
 19 #  0 是关闭此设置
 20 timeout 0
 21 
 22 #  TCP keepalive
 23 #  在 Linux 上,指定值(秒)用于发送 ACKs 的时间。注意关闭连接需要双倍的时间。默认为 024 tcp-keepalive 0
 25 
 26 #  指定日志记录级别,生产环境推荐 notice
 27 #  Redis 总共支持四个级别: debug 、 verbose 、 notice 、 warning ,默认为 verbose
 28 #  debug     记录很多信息,用于开发和测试
 29 #  varbose   有用的信息,不像 debug 会记录那么多
 30 #  notice    普通的 verbose ,常用于生产环境
 31 #  warning   只有非常重要或者严重的信息会记录到日志
 32 
 33 loglevel notice
 34 
 35 #  配置 log 文件地址
 36 #  默认值为 stdout ,标准输出,若后台模式会输出到 /dev/null37 logfile /var/log/redis/redis.log
 38 
 39 #  可用数据库数
 40 #  默认值为 16 ,默认数据库为 0 ,数据库范围在 0- ( database-1 )之间
 41 databases 16
 42 
 43 ################################ 快照#################################
 44 #  保存数据到磁盘,格式如下 :
 45 #  save  
 46 #    指出在多长时间内,有多少次更新操作,就将数据同步到数据文件 rdb 。
 47 #    相当于条件触发抓取快照,这个可以多个条件配合
 48 #    比如默认配置文件中的设置,就设置了三个条件
 49 #   save 900 1  900 秒内至少有 1 个 key 被改变
 50 #   save 300 10  300 秒内至少有 300 个 key 被改变
 51 #   save 60 10000  60 秒内至少有 10000 个 key 被改变
 52 # save 900 1
 53 # save 300 10
 54 # save 60 10000
 55 
 56 #  后台存储错误停止写。
 57 stop-writes-on-bgsave-error yes
 58 
 59 #  存储至本地数据库时(持久化到 rdb 文件)是否压缩数据,默认为 yes
 60 rdbcompression yes
 61 
 62 #  RDB 文件的是否直接偶像 chcksum
 63 rdbchecksum yes
 64 
 65 #  本地持久化数据库文件名,默认值为 dump.rdb
 66 dbfilename dump.rdb
 67 
 68 #  工作目录
 69 #  数据库镜像备份的文件放置的路径。
 70 #  这里的路径跟文件名要分开配置是因为 redis 在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成,
 71 #  再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。
 72 #  AOF 文件也会存放在这个目录下面
 73 #  注意这里必须制定一个目录而不是文件
 74 dir /var/lib/redis-server/
 75 
 76 ################################# 复制 #################################
 77 
 78 #  主从复制 . 设置该数据库为其他数据库的从数据库 .
 79 #  设置当本机为 slav 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步
 80 # slaveof 
 81 
 82 #  当 master 服务设置了密码保护时 ( 用 requirepass 制定的密码 )
 83 #  slave 服务连接 master 的密码
 84 # masterauth 
 85 
 86 #  当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
 87 #  1)  如果 slave-serve-stale-data 设置为 yes( 默认设置 ) ,从库会继续响应客户端的请求
 88 #  2)  如果 slave-serve-stale-data 是指为 no ,出去 INFOSLAVOF 命令之外的任何请求都会返回一个
 89 #      错误 "SYNC with master in progress"
 90 slave-serve-stale-data yes
 91 
 92 #  配置 slave 实例是否接受写。写 slave 对存储短暂数据(在同 master 数据同步后可以很容易地被删除)是有用的,但未配置的情况下,客户端写可能会发送问题。
 93 #  从 Redis2.6 后,默认 slave 为 read-only
 94 slaveread-only yes
 95 
 96 #  从库会按照一个时间间隔向主库发送 PINGs. 可以通过 repl-ping-slave-period 设置这个时间间隔,默认是 1097 #  repl-ping-slave-period 10
 98 #  repl-timeout  设置主库批量数据传输时间或者 ping 回复时间间隔,默认值是 6099 #  一定要确保 repl-timeout 大于 repl-ping-slave-period
100 # repl-timeout 60
101 
102 #  在 slave socket 的 SYNC 后禁用 TCP_NODELAY
103 #  如果选择“ yes ” ,Redis 将使用一个较小的数字 TCP 数据包和更少的带宽将数据发送到 slave , 但是这可能导致数据发送到 slave 端会有延迟 , 如果是 Linux kernel 的默认配置,会达到 40 毫秒 .
104 #  如果选择 "no" ,则发送数据到 slave 端的延迟会降低,但将使用更多的带宽用于复制 .
105 repl-disable-tcp-nodelay no
106 
107 #  设置复制的后台日志大小。
108 #  复制的后台日志越大, slave 断开连接及后来可能执行部分复制花的时间就越长。
109 #  后台日志在至少有一个 slave 连接时,仅仅分配一次。
110 # repl-backlog-size 1mb
111 
112 #  在 master 不再连接 slave 后,后台日志将被释放。下面的配置定义从最后一个 slave 断开连接后需要释放的时间(秒)。
113 #  0 意味着从不释放后台日志
114 # repl-backlog-ttl 3600
115 
116 #  如果 master 不能再正常工作,那么会在多个 slave 中,选择优先值最小的一个 slave 提升为 master ,优先值为 0 表示不能提升为 master 。
117 slave-priority 100
118 
119 #  如果少于 N 个 slave 连接,且延迟时间 <=M 秒,则 master 可配置停止接受写操作。
120 #  例如需要至少 3 个 slave 连接,且延迟 <=10 秒的配置:
121 # min-slaves-to-write 3
122 # min-slaves-max-lag 10
123 #  设置 0 为禁用
124 #   默认 min-slaves-to-write 为 0 (禁用), min-slaves-max-lag 为 10
125 
126 ################################## 安全 ###################################
127 
128 #  设置客户端连接后进行任何其他指定前需要使用的密码。
129 #  警告:因为 redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行 150K 次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解
130 #  requirepass foobared
131 #  命令重命名 .
132 #  在一个共享环境下可以重命名相对危险的命令。比如把 CONFIG 重名为一个不容易猜测的字符。
133 #  举例 :
134 #  rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
135 #  如果想删除一个命令,直接把它重命名为一个空字符 "" 即可,如下:
136 #  rename-command CONFIG ""
137 
138 ################################### 约束###################################
139 
140 #  设置同一时间最大客户端连接数,默认无限制, 
141 #  Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,
142 #  如果设置  maxclients 0 ,表示不作限制。
143 #  当客户端连接数到达限制时, Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息
144 # maxclients 10000
145 
146 #  指定 Redis 最大内存限制, Redis 在启动时会把数据加载到内存中,达到最大内存后, Redis 会按照清除策略尝试清除已到期的 Key
147 #  如果 Redis 依照策略清除后无法提供足够空间,或者策略设置为 ”noeviction” ,则使用更多空间的命令将会报错,例如 SET, LPUSH 等。但仍然可以进行读取操作
148 #  注意: Redis 新的 vm 机制,会把 Key 存放内存, Value 会存放在 swap 区
149 #  该选项对 LRU 策略很有用。
150 #  maxmemory 的设置比较适合于把 redis 当作于类似 memcached 的缓存来使用,而不适合当做一个真实的 DB151 #  当把 Redis 当做一个真实的数据库使用的时候,内存使用将是一个很大的开销
152 # maxmemory 
153 
154 #  当内存达到最大值的时候 Redis 会选择删除哪些数据?有五种方式可供选择
155 #  volatile-lru ->  利用 LRU 算法移除设置过过期时间的 key (LRU: 最近使用  Least RecentlyUsed )
156 #  allkeys-lru ->  利用 LRU 算法移除任何 key
157 #  volatile-random ->  移除设置过过期时间的随机 key
158 #  allkeys->random -> remove a randomkey, any key
159 #  volatile-ttl ->  移除即将过期的 key(minor TTL)
160 #  noeviction ->  不移除任何可以,只是返回一个写错误
161 #  注意:对于上面的策略,如果没有合适的 key 可以移除,当写的时候 Redis 会返回一个错误
162 #  默认是 :  volatile-lru
163 # maxmemory-policy volatile-lru  
164 
165 # LRU  和  minimal TTL 算法都不是精准的算法,但是相对精确的算法 ( 为了节省内存 ) ,随意你可以选择样本大小进行检测。
166 #  Redis 默认选择 3 个样本进行检测,你可以通过 maxmemory-samples 进行设置
167 # maxmemory-samples 3
168 
169 ############################## AOF###############################
170 
171 #  默认情况下, redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。
172 #  所以 redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。
173 #  开启 append only 模式之后, redis 会把所接收到的每一次写操作请求都追加到 appendonly.aof 文件中,当 redis 重新启动时,会从该文件恢复出之前的状态。
174 #  但是这样会造成 appendonly.aof 文件过大,所以 redis 还支持了 BGREWRITEAOF 指令,对 appendonly.aof 进行重新整理。
175 #  你可以同时开启 asynchronous dumps 和  AOF
176 appendonly no
177 
178 #  AOF 文件名称  ( 默认 : "appendonly.aof")
179 #  appendfilename appendonly.aof
180 #  Redis 支持三种同步 AOF 文件的策略 :
181 #  no:  不进行同步,系统去操作  . Faster.
182 #  always: always 表示每次有写操作都进行同步 . Slow, Safest.
183 #  everysec:  表示对写操作进行累积,每秒同步一次 . Compromise.
184 #  默认是 "everysec" ,按照速度和安全折中这是最好的。
185 #  如果想让 Redis 能更高效的运行,你也可以设置为 "no" ,让操作系统决定什么时候去执行
186 #  或者相反想让数据更安全你也可以设置为 "always"
187 #  如果不确定就用  "everysec".
188 #  appendfsync always
189 appendfsync everysec
190 # appendfsync no
191 
192 #  AOF 策略设置为 always 或者 everysec 时,后台处理进程 ( 后台保存或者 AOF 日志重写 ) 会执行大量的 I/O 操作
193 #  在某些 Linux 配置中会阻止过长的 fsync() 请求。注意现在没有任何修复,即使 fsync 在另外一个线程进行处理
194 #  为了减缓这个问题,可以设置下面这个参数 no-appendfsync-on-rewrite
195 no-appendfsync-on-rewrite no
196 
197 # AOF  自动重写
198 #  当 AOF 文件增长到一定大小的时候 Redis 能够调用  BGREWRITEAOF  对日志文件进行重写
199 #  它是这样工作的: Redis 会记住上次进行些日志后文件的大小 ( 如果从开机以来还没进行过重写,那日子大小在开机的时候确定 )
200 #  基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动
201 #  同时需要指定一个最小大小用于 AOF 重写,这个用于阻止即使文件很小但是增长幅度很大也去重写 AOF 文件的情况
202 #  设置  percentage 为 0 就关闭这个特性
203 auto-aof-rewrite-percentage 100
204 auto-aof-rewrite-min-size 64mb
205 
206 ################################ LUASCRIPTING #############################
207 #  一个 Lua 脚本最长的执行时间为 5000 毫秒( 5 秒),如果为 0 或负数表示无限执行时间。
208 lua-time-limit 5000
209 
210 ################################LOW LOG################################
211 #  Redis Slow Log  记录超过特定执行时间的命令。执行时间不包括 I/O 计算比如连接客户端,返回结果等,只是命令执行时间
212 #  可以通过两个参数设置 slow log :一个是告诉 Redis 执行超过多少时间被记录的参数 slowlog-log-slower-than( 微妙 )213 #  另一个是 slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除
214 #  下面的时间以微妙为单位,因此 1000000 代表一秒。
215 #  注意指定一个负数将关闭慢日志,而设置为 0 将强制每个命令都会记录
216 slowlog-log-slower-than 10000
217 
218 #  对日志长度没有限制,只是要注意它会消耗内存
219 #  可以通过  SLOWLOG RESET 回收被慢日志消耗的内存
220 #  推荐使用默认值 128 ,当慢日志超过 128 时,最先进入队列的记录会被踢出
221 slowlog-max-len 128
222 
223 ################################  事件通知  #############################
224 #  当事件发生时, Redis 可以通知 Pub/Sub 客户端。
225 #  可以在下表中选择 Redis 要通知的事件类型。事件类型由单个字符来标识:
226 # K     Keyspace 事件,以 _keyspace@_ 的前缀方式发布
227 # E     Keyevent 事件,以 _keysevent@_ 的前缀方式发布
228 # g     通用事件(不指定类型),像 DEL, EXPIRE, RENAME,229 # $     String 命令
230 # s     Set 命令
231 # h     Hash 命令
232 # z     有序集合命令
233 # x     过期事件(每次 key 过期时生成)
234 # e     清除事件(当 key 在内存被清除时生成)
235 # A     g$lshzxe 的别称,因此 ”AKE” 意味着所有的事件
236 # notify-keyspace-events 带一个由 0 到多个字符组成的字符串参数。空字符串意思是通知被禁用。
237 #  例子:启用 list 和通用事件:
238 # notify-keyspace-events Elg
239 #  默认所用的通知被禁用,因为用户通常不需要改特性,并且该特性会有性能损耗。
240 #  注意如果你不指定至少 KE 之一,不会发送任何事件。
241 notify-keyspace-events “”
242 
243 ##############################  高级配置  ###############################
244 
245 #  当 hash 中包含超过指定元素个数并且最大的元素没有超过临界时,
246 #  hash 将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
247 #  Redis Hash 对应 Value 内部实际就是一个 HashMap ,实际这里会有 2 种不同实现,
248 #  这个 Hash 的成员比较少时 Redis 为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的 HashMap 结构,对应的 valueredisObject 的 encoding 为 zipmap,
249 #  当成员数量增大时会自动转成真正的 HashMap, 此时 encoding 为 ht 。
250 hash-max-zipmap-entries 512
251 hash-max-zipmap-value 64  
252 
253 #  和 Hash 一样,多个小的 list 以特定的方式编码来节省空间。
254 # list 数据类型节点值大小小于多少字节会采用紧凑存储格式。
255 list-max-ziplist-entries 512
256 list-max-ziplist-value 64
257 
258 # set 数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。
259 set-max-intset-entries 512
260 
261 #  和 hashe 和 list 一样 , 排序的 set 在指定的长度内以指定编码方式存储以节省空间
262 # zsort 数据类型节点值大小小于多少字节会采用紧凑存储格式。
263 zset-max-ziplist-entries 128
264 zset-max-ziplist-value 64
265 
266 #  Redis 将在每 100 毫秒时使用 1 毫秒的 CPU 时间来对 redis 的 hash 表进行重新 hash ,可以降低内存的使用
267 #  当你的使用场景中,有非常严格的实时性需要,不能够接受 Redis 时不时的对请求有 2 毫秒的延迟的话,把这项配置为 no 。
268 #  如果没有这么严格的实时性要求,可以设置为 yes ,以便能够尽可能快的释放内存
269 activerehashing yes
270 
271 # 客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,
272 # 可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
273 #  可以三种不同客户端的方式进行设置:
274 #  normal ->  正常客户端
275 #  slave  -> slave 和 MONITOR 客户端
276 #  pubsub ->  至少订阅了一个 pubsub channel 或 pattern 的客户端
277 #  每个 client-output-buffer-limit 语法 :
278 #  client-output-buffer-limit   
279 #  一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。
280 #  例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开
281 #  如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。
282 #  默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,
283 #  只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。
284 #  把硬限制和软限制都设置为 0 来禁用该特性
285 client-output-buffer-limit normal 0 0 0
286 client-output-buffer-limit slave 256mb 64mb60
287 client-output-buffer-limit pubsub 32mb 8mb60
288 
289 # Redis 调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除过期的 Key ,等等。
290 #  不是所有的任务都以相同的频率执行,但 Redis 依照指定的“ Hz ”值来执行检查任务。
291 #  默认情况下,“ Hz ”的被设定为 10292 #  提高该值将在 Redis 空闲时使用更多的 CPU 时,但同时当有多个 key 同时到期会使 Redis 的反应更灵敏,以及超时可以更精确地处理。
293 #  范围是 1500 之间,但是值超过 100 通常不是一个好主意。
294 #  大多数用户应该使用 10 这个预设值,只有在非常低的延迟的情况下有必要提高最大到 100295 hz 10  
296 
297 #  当一个子节点重写 AOF 文件时,如果启用下面的选项,则文件每生成 32M 数据进行同步。
298 aof-rewrite-incremental-fsync yes
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用Docker部署Redis集群的步骤: 1.拉取Redis官方镜像: ```shell docker pull redis ``` 2.创建一个自定义的网络: ```shell docker network create redis-net ``` 3.创建6个Redis容器,3个作为主节点,3个作为从节点: ```shell docker run -d --name redis-1 --net redis-net redis redis-server --appendonly yes docker run -d --name redis-2 --net redis-net redis redis-server --appendonly yes docker run -d --name redis-3 --net redis-net redis redis-server --appendonly yes docker run -d --name redis-4 --net redis-net redis redis-server --appendonly yes docker run -d --name redis-5 --net redis-net redis redis-server --appendonly yes docker run -d --name redis-6 --net redis-net redis redis-server --appendonly yes ``` 4.将容器分配到不同的主节点和从节点: ```shell docker exec -it redis-1 redis-cli cluster meet <ip-address-of-redis-2> 6379 docker exec -it redis-1 redis-cli cluster meet <ip-address-of-redis-3> 6379 docker exec -it redis-4 redis-cli cluster meet <ip-address-of-redis-5> 6379 docker exec -it redis-4 redis-cli cluster meet <ip-address-of-redis-6> 6379 docker exec -it redis-1 redis-cli cluster replicate <node-id-of-redis-2> docker exec -it redis-1 redis-cli cluster replicate <node-id-of-redis-3> docker exec -it redis-4 redis-cli cluster replicate <node-id-of-redis-5> docker exec -it redis-4 redis-cli cluster replicate <node-id-of-redis-6> ``` 5.检查集群状态: ```shell docker exec -it redis-1 redis-cli cluster info ``` 6.在集群中添加键值对: ```shell docker exec -it redis-1 redis-cli set mykey "Hello World" docker exec -it redis-4 redis-cli get mykey ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值