Linux环境下Redis三主三从集群搭建
文章目录
- 模式参考图
- 模式参考图分析
- 具体操作步骤
- 搭建过程遇到的问题以及解决方案
模式参考图
主 | 从 |
---|---|
192.1.227.28:6379 | 192.1.227.29:7000 |
主 | 从 |
---|---|
192.1.227.29:6379 | 192.1.227.30:7000 |
主 | 从 |
---|---|
192.1.227.30:6379 | 192.1.227.28:7000 |
模式参考图分析
192.1.227.28、192.1.227.29、192.1.227.30 三台服务器共6个实例,其中每台2个实例(端口号区分,port为6379 即主,7000 则从):一主一从。例如在192.1.227.28 中,主为192.1.227.28:6379,从为 192.1.227.28:7000。但是,需要注意的点是,同主机的主从并非是真正的主从,而是分别为其他主机的主从,即192.1.227.28:6379 的从是 192.1.227.29:7000,192.1.227.28:7000的主是192.1.227.30:6379。
而实现这类指向性主从的关键命令为:./rediscli--cluster create 192,1.227.28:6379 192.1.227.29:6379 192 1.227.29:7000 192.1.227.30:7000 192.1.227.28:7000 --cluster-replicas 1
前三为主,后三为从,同时第一个主的从就是第一个从,以此类推。
具体操作步骤
-
解压 redis 的 tar 包
tar xzvf redis-6.2.7 targ2
-
编辑 redis.conf文件(以 192,1.227.28:6379 实例为例)
#cd 到安装目录 cd redis-6.2.7/ #备份 redis.conf 文件,以便操作失败回滚,其实压缩包在也没事 cp redis.conf redis_back.conf #由于每台主机需要 2个redis,实例,所以每台需要两个redis.conf,文件且做好命名区分 mv redis.conf redis_6379.conf #这里我们仅先编辑 redis_6379.conf,其他5个redis.conf,文件的修改点都一样 vim redis_6379.conf #注意2个点,跟如下不一致需要修改 # bind 127.0.0.1 ::1 bind 0.0 0.0 -:1 #设置redis默认后台启动 daemonize yes #关闭保护模式 protected-mode yes #修改 redis启动对应的进程文件名称,建议修改做好区分 pidfile /var/run/redis_6379.pid #修改端口号 port 6379 #开启集群 cluster-enabled yes #集群节点配置文件名称,配置文件首次启动会自动生成(本人亲测:不设置后面实例启动会出现节点 xxx 已存在之类的报错导致启动失败,具体报错为英文,可到相应日志文件查看) cluster-config-file /usr/local/redis/6379/nodes-6379.conf #dump落盘文件名称 dbfilename 6379.rdb #日志文件名称 logfile /usr/local/redis/6379/redis_6379.1og #aof落盘文件 appendfilename "6379_aof"
-
集群模式单机单例启动测试
redis一般启动命令为xx/xx/redis-server xx/xx/配置文件
,编译安装的 redis的 redis-server 可能在/usr/local/redis/src,非编译安装的一般在安装目录的 src目录下,即 redis-6.2.7/src。总之,如果找不到 redis-server,可以使用find / -name redis-server
搜索。
启动:xx/xx/redis-server xx/xx/redis_6379.conf
查看进程:
ps -ef | grep redis
测试连通性:
#-p指定端口号 xx/xx/redis-cli -p 6379 ping
-
配置文件下发修改
redis_6379.conf 直接远程拷贝给其他主机即可,不用再做修改redis_7000.conf 依照2中的修改点将6379 修改为 7000 即可,之后直接远程拷贝给其他主机即可,不用再做修改。
远程拷贝命令:scp 本地文件路径 远程主机用户名@远程主机IP:远程目标目录
#本地配置文件所在目录与远程目标目录保持一致
scp /usr/local/redis/redis_6379.conf redis@192 1.227.29:/usr/local/redis
出现密码填写交互提示的话就输入用户redis的密码即可。
scp /usr/local/redis/redis_6379.conf redis@192 1.227.30:/usr/local/redis scp /usr/local/redis/redis_7000.conf redis@192 1.227.29:/usr/local/redis scp /usr/local/redis/redis_7000 conf redis@192.1.227.30:/usr/local/redis
-
3台主机6个实例分别启动
/usr/local/redis/src/redis-server /usr/local/redis/redis_6379.conf /usr/local/redis/src/redis-server /usr/local/redis/redis_7000.conf
-
创建集群
顺便选择一台主机,这里以 192.1.227.28 为例。#--cluster-replicas 1表示一主有一从 redis-cli -cluster create 192.1.227.28:6379 192.1.227.29:6379 192.1.227.30:6379 192.1.227.29:7000 192.1.227.30:7000 192.1.227.28:7000 --cluster-replicas 1
搭建过程遇到的问题以及解决方案
redis-cli -cluster create 192.1.227.28:6379 192.1.227.29:6379 192.1.227.30:6379 192.1.227.29:7000 192.1.227.30:7000 192.1.227.28:7000 --cluster-replicas 1
出现
【ERR】 Node is not empty,Either the node already knows other nodes (check with CLUSTER NODES) or contains some keys in database 0.
解决方案:
- 删除 dump,rdb、aof、nodes.conf文件,重启
- 报错已经很明确告诉你解决方案了:节点不为空,要么已经知道其他节点(检查集群节点)或者第0个索引的数据库包含一些 key。“第0个索引的数据库包含一些 key”我们可以使用 flushdb 或者 flushall 删除所有 key,重启。
参考1
参考2
参考3
参考4
参考5
参考6
参考7
参考8
参考9
参考10
参考11
参考12