redis数据库集群三种模式

环境规划:

172.16.8.23    node1   172.16.8.24    node2

172.16.8.178  node3   172.16.8.179  node4


一.主从复制

(1).节点模式分为master节点和slave节点,master节点负责写入(也可读),slave节点必须是只读的,master和slave有任意节点宕不能自己切换或恢复

(2).一个master后面可以有多个slave,一个slave前端只能有一个master节点

(3). 当slave启动后,主动向master发送SYNC命令

1.下载安装redis包

[root@node1 ~]# wget  http://120.52.51.18/download.redis.io/releases/redis-5.0.4.tar.gz

[root@node1 ~]# tar xvf redis-5.0.4.tar.gz -C /opt/

[root@node1 ~]# yum install make gcc gcc-c++ -y

[root@node1 ~]# cd /opt/redis-5.0.4/

[root@node1 redis-5.0.4]# make && make install

2.master修改redis配置文件

[root@node1 redis-5.0.4]# vim redis.conf 

bind 172.16.8.23

daemonize yes

requirepass system123

[root@node1 redis-5.0.4]# src/redis-server redis.conf 

3.slave修改配置文件(每个从库都是这样)

[root@node2 redis-5.0.4]# vim redis.conf 

bind 172.16.8.24

daemonize yes

replicaof 172.16.8.23 6379

masterauth system123

[root@node2 redis-5.0.4]# src/redis-server redis.conf 

4.在master节点检查主从状态

[root@node1 redis-5.0.4]# src/redis-cli -h 172.16.8.23

172.16.8.23:6379> AUTH system123

OK

172.16.8.23:6379> info replication

# Replication

role:master

connected_slaves:3

slave0:ip=172.16.8.24,port=6379,state=online,offset=378,lag=0

slave1:ip=172.16.8.178,port=6379,state=online,offset=378,lag=1

slave2:ip=172.16.8.179,port=6379,state=online,offset=378,lag=1

master_replid:7dd8e0a27bddfe2c275b4c9d83f6f2bac27ea1d9

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:378

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:378

172.16.8.23:6379> 


二.哨兵模式

(1).监控主从数据库是否正常运行,master出现故障时,自动将slave转化为master

(2).多哨兵配置的时候,哨兵之间也会自动监控,多个哨兵可以监控同一个redis

1.在master节点配置

[root@node1 redis-5.0.4]# vim sentinel.conf 

protected-mode no

daemonize yes             --服务后台启动

logfile "/tmp/1.log"      --生成日志

sentinel monitor mymaster 172.16.8.23 6379 1    --mymaster自己定义,IP地址,端口,哨兵个数

sentinel auth-pass mymaster system123              --redis密码

[root@node1 redis-5.0.4]# src/redis-sentinel sentinel.conf

[root@node1 redis-5.0.4]# src/redis-cli -h 172.16.8.23

172.16.8.23:6379> AUTH system123

OK

172.16.8.23:6379> info replication

# Replication

role:master

connected_slaves:3

slave0:ip=172.16.8.24,port=6379,state=online,offset=4765,lag=1

slave1:ip=172.16.8.179,port=6379,state=online,offset=4765,lag=1

slave2:ip=172.16.8.178,port=6379,state=online,offset=4765,lag=1

master_replid:a7978e6db27163acc91cbc673114855f98dbc7a8

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:4765

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:4765

172.16.8.23:6379> SHUTDOWN          --将master的redis服务关闭

not connected> exit

[root@node1 redis-5.0.4]# tailf /tmp/1.log       --查看重新选master角色的日志

30006:X 28 Mar 2019 19:09:25.753 # +sdown master mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:25.754 # +odown master mymaster 172.16.8.23 6379 #quorum 1/1

30006:X 28 Mar 2019 19:09:33.124 # +new-epoch 2

30006:X 28 Mar 2019 19:09:33.124 # +try-failover master mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:33.129 # +vote-for-leader 2d798dd3a84c9f80b5f1a6c73fe6f2092b65faaa 2

30006:X 28 Mar 2019 19:09:33.129 # +elected-leader master mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:33.129 # +failover-state-select-slave master mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:33.184 # +selected-slave slave 172.16.8.178:6379 172.16.8.178 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:33.184 * +failover-state-send-slaveof-noone slave 172.16.8.178:6379 172.16.8.178 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:33.268 * +failover-state-wait-promotion slave 172.16.8.178:6379 172.16.8.178 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:34.182 # +promoted-slave slave 172.16.8.178:6379 172.16.8.178 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:34.182 # +failover-state-reconf-slaves master mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:34.234 * +slave-reconf-sent slave 172.16.8.179:6379 172.16.8.179 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:09:35.170 * +slave-reconf-inprog slave 172.16.8.179:6379 172.16.8.179 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:12:34.200 # +failover-end-for-timeout master mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:12:34.201 # +failover-end master mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:12:34.201 * +slave-reconf-sent-be slave 172.16.8.179:6379 172.16.8.179 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:12:34.201 * +slave-reconf-sent-be slave 172.16.8.24:6379 172.16.8.24 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:12:34.201 * +slave-reconf-sent-be slave 172.16.8.178:6379 172.16.8.178 6379 @ mymaster 172.16.8.23 6379

30006:X 28 Mar 2019 19:12:34.201 # +switch-master mymaster 172.16.8.23 6379 172.16.8.178 6379

30006:X 28 Mar 2019 19:12:34.201 * +slave slave 172.16.8.179:6379 172.16.8.179 6379 @ mymaster 172.16.8.178 6379

30006:X 28 Mar 2019 19:12:34.202 * +slave slave 172.16.8.24:6379 172.16.8.24 6379 @ mymaster 172.16.8.178 6379

30006:X 28 Mar 2019 19:12:34.202 * +slave slave 172.16.8.23:6379 172.16.8.23 6379 @ mymaster 172.16.8.178 6379

30006:X 28 Mar 2019 19:13:04.272 # +sdown slave 172.16.8.24:6379 172.16.8.24 6379 @ mymaster 172.16.8.178 6379

30006:X 28 Mar 2019 19:13:04.272 # +sdown slave 172.16.8.23:6379 172.16.8.23 6379 @ mymaster 172.16.8.178 6379

2.在 172.16.8.178节点查看master节点

[root@node3 redis-5.0.4]# src/redis-cli -h 172.16.8.178       --node3节点被选为master角色

172.16.8.178:6379> info replication

# Replication

role:master

connected_slaves:0

master_replid:ebd18241e560c1ccea06bc4f528071bdc189405a

master_replid2:a7978e6db27163acc91cbc673114855f98dbc7a8

master_repl_offset:12131

second_repl_offset:6452

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:12131

172.16.8.178:6379> 


三.集群模式(必须要有6台redis服务器,node1,2,3分别安装三个redis,node4安装三个redis)

1.修改配置文件,启动服务

[root@node1 redis-5.0.4]# vim redis.conf      --6台redis配置文件一样,都启动服务

bind 本机IP

daemonize yes 

appendonly yes

cluster-enabled yes

cluster-config-file nodes_node1.conf

cluster-node-timeout 15000

[root@node1 redis-5.0.4]# src/redis-cli -h 172.16.8.23      --必须清空redis中的数据

172.16.8.23:6379> FLUSHALL

OK

172.16.8.23:6379> SHUTDOWN

not connected> exit

[root@node1 redis-5.0.4]# src/redis-server  redis.conf 

13536:C 01 Apr 2019 15:26:15.629 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

13536:C 01 Apr 2019 15:26:15.629 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=13536, just started

13536:C 01 Apr 2019 15:26:15.629 # Configuration loaded

9785:C 01 Apr 2019 14:23:34.529 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

9785:C 01 Apr 2019 14:23:34.529 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=9785, just started

9785:C 01 Apr 2019 14:23:34.529 # Configuration loaded

[root@node1 redis-5.0.4]#

2.创建集群,使用集群

[root@node1 redis-5.0.4]# ./src/redis-cli --cluster create 172.16.8.23:6379 172.16.8.24:6379 172.16.8.178:6379 172.16.8.179:6379 

172.16.8.179:6380 172.16.8.179:6381 --cluster-replicas 1    --创建集群成功,6个redis节点(如果创建集群时出错,必须

删除flushall数据和删除nodes_6379.conf文件后启 动redis服务)

>>> Performing Cluster Check (using node 172.16.8.23:6379)

M: 06026556e78db8599f13095038c15682fda37ab4 172.16.8.23:6379

   slots:[0-5460] (5461 slots) master

   1 additional replica(s)

S: 479ee18ba7b8f94870b9c7eaf474a5039024a53f 172.16.8.179:6381

   slots: (0 slots) slave

   replicates 12d0de4285f5801cf8de7683da7a50e354cd5d21

S: 9bd04e9109fad35b05e68028d3eb6c11886afe0e 172.16.8.179:6379

   slots: (0 slots) slave

   replicates 454cc89b5a6644199ae7895672c29078208495b9

M: 12d0de4285f5801cf8de7683da7a50e354cd5d21 172.16.8.24:6379

   slots:[5461-10922] (5462 slots) master

   1 additional replica(s)

M: 454cc89b5a6644199ae7895672c29078208495b9 172.16.8.178:6379

   slots:[10923-16383] (5461 slots) master

   1 additional replica(s)

S: ae36c01a1ec426f6443b01857b50dae868dc9a11 172.16.8.179:6380

   slots: (0 slots) slave

   replicates 06026556e78db8599f13095038c15682fda37ab4

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

[root@node1 redis-5.0.4]# src/redis-cli --cluster help    --帮助信息

[root@node1 redis-5.0.4]# src/redis-cli --cluster info 172.16.8.23:6379      --查看集群状态信息

172.16.8.23:6379 (06026556...) -> 0 keys | 5461 slots | 1 slaves.

172.16.8.24:6379 (12d0de42...) -> 0 keys | 5462 slots | 1 slaves.

172.16.8.178:6379 (454cc89b...) -> 0 keys | 5461 slots | 1 slaves.

[OK] 0 keys in 3 masters.

0.00 keys per slot on average.

[root@ node1 redis-5.0.4]# src/redis-cli -h 172.16.8.23 -c -p 6379     --在node1节点写入数据

172.16.8.23:6379> set k1 v1

-> Redirected to slot [12706] located at 172.16.8.178:6379

OK

172.16.8.178:6379> KEYS *

1) "k1"

172.16.8.178:6379> get k1

"v1"

172.16.8.178:6379> 

3.在其它节点查看数据

[root@ node2 redis-5.0.4]# src/redis-cli -h 172.16.8.24 -c -p 6379     --在node2节点查看数据

172.16.8.24:6379> get k1

-> Redirected to slot [12706] located at 172.16.8.178:6379

"v1"

172.16.8.178:6379> 



错误处理:

(1).redis.conf配置文件有开启auth认证,需要关闭认证

[root@node1 redis-5.0.4]# redis-cli --cluster create 172.16.8.23:6379 172.16.8.24:6379 172.16.8.178:6379 172.16.8.179:6379 --cluster-replicas 

1

[ERR] Node 172.16.8.23:6379 NOAUTH Authentication required.

[root@node1 redis-5.0.4]# 

解决方法:

[root@node1 redis-5.0.4]# vim redis.conf

#masterauth system123

[root@node1 redis-5.0.4]#

(2).每个redis必须为空,没有数据

[root@node1 redis-5.0.4]# redis-cli --cluster create 172.16.8.23:6379 172.16.8.24:6379 172.16.8.178:6379 172.16.8.179:6379 --cluster-replicas 

1

[ERR] Node 172.16.8.23:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in 

database 0.

[root@node1 redis-5.0.4]# 

解决方法:

[root@node1 redis-5.0.4]#src/redis-cli -h 172.16.8.24

172.16.8.24:6379> FLUSHALL

OK

172.16.8.24:6379> 

(3).redis节点数据必须要6个,6个以下不行

[root@node1 redis-5.0.4]# ./src/redis-cli --cluster create 172.16.8.23:6379 172.16.8.24:6379 172.16.8.178:6379 --cluster-replicas 1

*** ERROR: Invalid configuration for cluster creation.

*** Redis Cluster requires at least 3 master nodes.

*** This is not possible with 3 nodes and 1 replicas per node.

*** At least 6 nodes are required.

[root@node1 redis-5.0.4]#

(4).集群槽位重新分配(重新启动服务时必须清空redis数据和删除nodes_6379.conf文件)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[ERR] Not all 16384 slots are covered by nodes.

[root@node1 redis-5.0.4]# 

解决方法:

[root@node1 redis-5.0.4]# src/redis-cli --cluster help                        --帮助信息

[root@node1 redis-5.0.4]# src/redis-cli --cluster check 172.16.8.23:6379       --检查各节点的状态

[root@node1 redis-5.0.4]# src/redis-cli --cluster fix 172.16.8.23:6379            --修复节点

[root@node1 redis-5.0.4]# src/redis-cli --cluster reshard 172.16.8.23:6379    --重新分配节点




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25854343/viewspace-1350258/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25854343/viewspace-1350258/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值