PS:对于使用者来说,Redis5.0和4.0都是一样的,但是redis 4.0的集群部署需要额外安装ruby的东西,5.0中则集成到了redis-cli,部署起来更方便
1.1 安装Redis
本章基于CentOS 7.9.2009编写而成,由于Linux发行版众多,安装过程可能有些许不同,仅供参考
1、下载Redis源码:wget http://download.redis.io/releases/redis-5.0.13.tar.gz
2、解压:tar xzf redis-5.0.13.tar.gz
3、cd redis-5.0.13/deps/
4、make hiredis lua jemalloc linenoise(编译依赖的库)
5、cd ..
6、编译:make -j 4(4表示使用4核编译,默认是1核,请根据实际情况修改参数)
1.2 部署单机版Redis
1、使用cd命令切换目录到Redis主目录下
2、创建一个文件夹用于存放单机版的数据和配置:mkdir single
3、拷贝一份配置文件到single文件夹:cp redis.conf single/redis.conf
4、切换到single目录:cd single/
5、使用你熟悉的编辑器修改redis.conf文件
第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6379(端口号) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6379 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第171行:logfile ${redis.home} /single/redis .log(日志路径) 第218行:RDB持久化配置,全部注释掉并加上save "" 表示关闭RDB持久化 #save 900 1(每900秒内有1个key修改则进行持久化) #save 300 10(每300秒内有10个key修改则进行持久化) #save 60 10000(每60秒内有10000个key修改则进行持久化) save "" #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第263行: dir ${redis.home} /single/ 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) |
6、在single目录下新建一个文件:touch start.sh并加入以下内容
#!/bin/sh #注意:这个目录是指你实际的redis安装目录,比如/home/iceberg/Program/redis-5.0.13 cd /home/iceberg/Program/redis-5 .0.13 src /redis-server single /redis .conf & |
授予其可执行权限chmod 777 start.sh,运行即可启动
7、关闭redis
不要使用Kill -9的方法强制关闭Redis,不仅是Redis,任何程序都不应该使用这个方式关闭!这会使得程序预设的清理代码不执行!!!
在single目录下新建一个文件:touch stop.sh并加入以下内容
#!/bin/sh #注意:这个目录是指你实际的redis安装目录,比如/home/iceberg/Program/redis-5.0.13 cd /home/iceberg/Program/redis-5 .0.13 src /redis-cli -p 6379 shutdown #如果配置了密码要加上-a 你的密码 #src/redis-cli -p 6379 -a 123456 shutdown |
8、redisson配置(redis客户端配置)
(1)包含密码
{ "singleServerConfig" : { "address" : "redis://127.0.0.1:6379" , "timeout" : 5000 , "password" : "123456" , "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } |
(2)不包含密码
{ "singleServerConfig" : { "address" : "redis://127.0.0.1:6379" , "timeout" : 5000, "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } |
1.3 部署主从版Redis
1、使用cd命令切换目录到Redis主目录下
2、创建一个文件夹用于存放主从版的数据和配置:mkdir replication
3、进入目录:cd replication
4、创建两个文件夹:mkdir master slave
5、切换到主目录,把配置文件分别拷贝到master和slave,cp redis.conf replication/master/redis.conf、cp redis.conf replication/slave/redis.conf
6、使用你熟悉的编辑器修改redis.conf文件
(1)主redis配置
第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6379(端口号,主从的端口号必须不一样) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6379 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第171行:logfile ${redis.home} /replication/master/redis .log #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第263行: dir ${redis.home} /replication/master/ #如何设置密码的话,下边两个配置必须同时存在或同时注释掉,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) |
(2)从redis配置
第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6380(端口号,主从的端口号必须不一样) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6380 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第171行:logfile ${redis.home} /replication/slave/redis .log #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第263行: dir ${redis.home} /replication/slave/ 第281行:slaveof <masterip> <masterport>(配置主节点的ip和端口号) #如何设置密码的话,下边两个配置必须同时存在或同时注释掉,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) |
7、启动和关闭脚本与单机版类似,把目录改成主从对应的目录,配置对端口号即可
8、配置
(1)包含密码
{ "masterSlaveServersConfig" :{ "readMode" : "MASTER" , "slaveAddresses" :[ "redis://127.0.0.1:6381" , "redis://127.0.0.1:6380" ], "masterAddress" : "redis://127.0.0.1:6379" , "timeout" : 5000 , "password" : "123456" , "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } |
(2)不包含密码
{ "masterSlaveServersConfig" :{ "readMode" : "MASTER" , "slaveAddresses" :[ "redis://127.0.0.1:6381" , "redis://127.0.0.1:6380" ], "masterAddress" : "redis://127.0.0.1:6379" , "timeout" : 5000 , "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } 1.4 部署哨兵版Redis 1、使用cd命令切换目录到Redis主目录下 2、创建一个文件夹用于存放哨兵版的数据和配置:mkdir sentinel 3、首先配置好主从节点,并启动(主从的相关配置请参考第三节) 4、创建三个文件夹:mkdir sentinel1 sentinel2 sentinel3 5、复制sentinel.conf到三个文件夹中(注意这里的配置文件不是redis.conf!) 6、sentinel.conf需要修改的地方如下(注意这里的配置文件不是redis.conf!) (1)sentinel1 #取消注释,允许远程连接 第17行:protected-mode no 第21行:port 26379(端口号) #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第50行: dir ${redis.home} /replication/sentinel1/ (数据存储目录) 第69行:sentinel monitor mymaster 10.60.44.87 6379 2(配置哨兵监控哪个主节点,mymaster是主节点的别名,2表示主从切换至少需要2台哨兵节点同意,一般为n /2 +1,n表示哨兵节点数) #配置密码,注释掉表示不需要密码 第71行:sentinel auth-pass mymaster 123456 #额外增加配置 #后台运行该redis节点 daemonize yes #日志存储路径 logfile "${redis.home}/sentinel/sentinel1/redis.log" | (2)sentinel2 #取消注释,允许远程连接 第17行:protected-mode no 第21行:port 26380(端口号) #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第50行: dir ${redis.home} /replication/sentinel2/ (数据存储目录) 第69行:sentinel monitor mymaster 10.60.44.87 6379 2(配置哨兵监控哪个主节点,mymaster是主节点的别名,2表示主从切换至少需要2台哨兵节点同意,一般为n /2 +1,n表示哨兵节点数) #配置密码,注释掉表示不需要密码 第71行:sentinel auth-pass mymaster 123456 #额外增加配置 #后台运行该redis节点 daemonize yes #日志存储路径,${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 logfile "${redis.home}/replication/sentinel2/redis.log" | (3)sentinel3 #取消注释,允许远程连接 第17行:protected-mode no 第21行:port 26381(端口号) #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第50行: dir ${redis.home} /replication/sentinel3/ (数据存储目录) 第69行:sentinel monitor mymaster 10.60.44.87 6379 2(配置哨兵监控哪个主节点,mymaster是主节点的别名,2表示主从切换至少需要2台哨兵节点同意,一般为n /2 +1,n表示哨兵节点数) #配置密码,注释掉表示不需要密码 第71行:sentinel auth-pass mymaster 123456 #额外增加配置 #后台运行该redis节点 daemonize yes #日志存储路径,${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 logfile "${redis.home}/replication/sentinel3/redis.log" | 7、在sentinel1文件夹中新建一个文件,touch start.sh,填入以下内容 #!/bin/sh #注意:这个目录是指你实际的redis安装目录 cd /home/iceberg/Program/redis-5 .0.13 src /redis-sentinel sentinel /sentinel1/sentinel .conf & |
授予其可执行权限chmod 777 start.sh,运行即可启动 其他哨兵把sentinel1改成sentinel2或sentinel3即可 8、关闭Redis与单机版类似,把目录改成哨兵对应的目录,配置对端口号即可 9、配置 (1)包含密码的配置 { "sentinelServersConfig" :{ "readMode" : "MASTER" , "sentinelAddresses" :[ "redis://127.0.0.1:26379" , "redis://127.0.0.1:26389" ], "masterName" : "mymaster" , "password" : "123456" , "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } |
(2)不包含密码的配置 { "sentinelServersConfig" :{ "readMode" : "MASTER" , "sentinelAddresses" :[ "redis://127.0.0.1:26379" , "redis://127.0.0.1:26389" ], "masterName" : "mymaster" , "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } 1.5 配置集群版Redis 1、使用cd命令切换目录到Redis主目录下 2、创建一个文件夹用于存放集群版的数据和配置:mkdir cluster 3、新建六个文件夹(Redis集群最少三主三从),mkdir master1 master2 master3 slave1 slave2 slave3 ,并复制redis.conf文件进去(这里假设的是一台机器的情况,如果你是用六台机器部署,就建一个文件夹就好) 5、集群相关配置如下 (1)master1 第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6381(端口号) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6381 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第171行:logfile ${redis.home} /cluster/master1/redis .log #注意:${redis.home}替换成redis的安装目录,比如/home/iceberg/Program/redis-5.0.13 第263行: dir ${redis.home} /cluster/master1/ #如何设置密码的话,下边两个配置必须同时存在或同时注释掉,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) # 开启集群模式 第814行:cluster- enable yes #集群内部配置文件 第822行:cluster-config- file “nodes-6381.conf” | (2)master2 第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6382(端口号,主从的端口号必须不一样) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6382 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录 第171行:logfile ${redis.home} /cluster/master2/redis .log #注意:${redis.home}替换成redis的安装目录 第263行: dir ${redis.home} /cluster/master2/ #下边两个配置必须同时存在,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) # 开启集群模式 第814行:cluster- enable yes #集群内部配置文件 第822行:cluster-config- file “nodes-6382.conf” | (3)master3 第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6383(端口号,主从的端口号必须不一样) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6383 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录 第171行:logfile ${redis.home} /cluster/master3/redis .log 第218行:RDB持久化配置,全部注释掉并加上save "" 表示关闭RDB持久化 #save 900 1(每900秒内有1个key修改则进行持久化) #save 300 10(每300秒内有10个key修改则进行持久化) #save 60 10000(每60秒内有10000个key修改则进行持久化) save "" #注意:${redis.home}替换成redis的安装目录 第263行: dir ${redis.home} /cluster/master3/ #下边两个配置必须同时存在,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) # 开启集群模式 第814行:cluster- enable yes #集群内部配置文件 第822行:cluster-config- file “nodes-6383.conf” | (4)slave1 第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6391(端口号,主从的端口号必须不一样) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6391 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录 第171行:logfile ${redis.home} /cluster/slave1/redis .log #注意:${redis.home}替换成redis的安装目录 第263行: dir ${redis.home} /cluster/slave1/ #下边两个配置必须同时存在,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) # 开启集群模式 第814行:cluster- enable yes #集群内部配置文件 第822行:cluster-config- file “nodes-6391.conf” | (5)slave2 第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6392(端口号,主从的端口号必须不一样) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6392 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录 第171行:logfile ${redis.home} /cluster/slave2/redis .log #注意:${redis.home}替换成redis的安装目录 第263行: dir ${redis.home} /cluster/slave2/ #下边两个配置必须同时存在,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) # 开启集群模式 第814行:cluster- enable yes #集群内部配置文件 第822行:cluster-config- file “nodes-6392.conf” | (6)slave3 第69行:bind 127.0.0.1(注释掉) 第88行:protected-mode no 第92行:port 6393(端口号,主从的端口号必须不一样) 第136行:daemonize yes (后台运行) 第158行:pidfile /var/run/redis_6393 .pid(后边的数字改成跟端口号一致) #注意:${redis.home}替换成redis的安装目录 第171行:logfile ${redis.home} /cluster/slave3/redis .log #注意:${redis.home}替换成redis的安装目录 第263行: dir ${redis.home} /cluster/slave3/ #下边两个配置必须同时存在,且密码必须相同 第288行:masterauth <master-password>(设置redis的密码,注释掉表示不需要) 第500行:requirepass foobared(设置redis的密码,注释掉表示不需要) #注意:如果之前redis已经运行过,需要删除RDB文件dump.rdb!!!具体路径就是第263行的dir目录 第672行:appendonly yes (开启AOF持久化) # 开启集群模式 第814行:cluster- enable yes #集群内部配置文件 第822行:cluster-config- file “nodes-6393.conf” | 6、使用单机版的启动脚本将启动上述六个redis实例 7、切换到redis主目录下,执行 #通过-a指定密码 src /redis-cli -a 123456 --cluster create --cluster-replicas 0 10.60.52.134:6381 10.60.52.134:6382 10.60.52.134:6383 |
输入yes,可以看到如下提示 发现所有16384个槽都分配成功,集群创建完成。 不过此时只有三个主节点,还需要设置一下从节点,这里要记录一下ID和ip:port的对应关系,不要清空了,下一步有用 8、手动添加从节点 我们假设你想要的对应关系是6381(主)-6391(从)、6382(主)-6392(从)、6383(主)-6393(从) src /redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master- id cdd3d8faba1cb6a26faba5c2ffcd274b638aa159 10.60.52.134:6391 10.60.52.134:6381 src /redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master- id faa8847464a78ae58b95c0b2ea895250bd023864 10.60.52.134:6392 10.60.52.134:6382 src /redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master- id 0b4a8d999b04423a99dfa8d099e77534ecb925a0 10.60.52.134:6393 10.60.52.134:6383 |
依次执行命令,将从节点添加到集群中,如下图所示: 9、集群完整性检查 集群完整性指所有的槽都必须分配到存活的主节点上,只要16384个槽有一个没有分配给节点则表示集群不完整。我们可以使用check命令检测任意一个节点即可完成检查,输入: src /redis-cli -a 123456 --cluster check 10.60.52.134:6381 |
可以看到3主3从,且16384个槽都分配完毕,表示集群完整,如下图所示 10、配置 (1)包含密码的配置 { "clusterServersConfig" : { "readMode" : "MASTER" , "nodeAddresses" : [ "redis://10.60.44.57:6371" , "redis://10.60.44.57:6372" , "redis://10.60.44.57:6373" ], "password" : "123456" , "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } |
(2)不包含密码的配置 { "clusterServersConfig" : { "readMode" : "MASTER" , "nodeAddresses" : [ "redis://10.60.44.57:6371" , "redis://10.60.44.57:6372" , "redis://10.60.44.57:6373" ]. "pingConnectionInterval" : 2000 }, "codec" : { "class" : "com.fingard.luna.framework.cache.redis.component.ExtendJsonJacksonCodec" }, "transportMode" : "NIO" } |
|
为了方便修改,以上是展开的配置,但是配置在apollo的时候需要压缩一下,可以搜索任意的在线JSON格式化网站进行压缩 |