redis之集群

发布于:2024-05-06 ⋅ 阅读:(24) ⋅ 点赞:(0)

一.redis主从模式和redis集群模式的区别

redis主从模式:所有节点上的数据一致,但是key过多会影响性能

redis集群模式:将数据分散到多个redis节点,数据分片存储,提高了redis的吞吐量

二.redis cluster集群的特点

数据分片        多个存储入口        故障自动切换

三.redis数据存储机制

通过哈希算法将数据存储到集群中的卡槽中

四.redis cluster集群规划
三主: 192.168.145.142:7000        192.168.145.159:7001        192.168.145.160:7002
三从: 192.168.145.142:8000           192.168.145.159:8001            192.168.145.160:8002
三从保证主有问题时,及时切换
 

192.168.145.142端配置:

#创建配置文件目录
mkdir -p /data/cluster/7000
mkdir -p /data/cluster/8000
#创建配置文件......其余5个主机配置,配置文件修改端口和目录即可,其余参数一样
vim /data/cluster/7000/redis.conf
cluster-enabled yes
port 7000
dir "/data/cluster/7000" 
logfile "redis.log"
pidfile "redis.pid"
daemonize yes
bind 0.0.0.0
requirepass redispwd
masterauth redispwd
tcp-backlog 511 
tcp-keepalive 300
loglevel notice
stop-writes-on-bgsave-error yes 
rdbcompression yes
rdbchecksum yes
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
slave-serve-stale-data yes  
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
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
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events g$  
hash-max-ziplist-entries 512  
hash-max-ziplist-value 64  
list-max-ziplist-entries 512  
list-max-ziplist-value 64  
set-max-intset-entries 512  
zset-max-ziplist-entries 128  
zset-max-ziplist-value 64  
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0  
client-output-buffer-limit slave 256mb 64mb 60  
client-output-buffer-limit pubsub 32mb 8mb 60  
hz 10
aof-rewrite-incremental-fsync yes

启动主redis:
redis-server /data/cluster/7000/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 22:45 ?        00:00:00 redis-server 0.0.0.0:7000 [cluster]
root        3534    3181  0 22:51 pts/1    00:00:00 grep --color=auto redis

创建3个主集群,任意一端操作均可:
redis-cli -a redispwd --cluster create 192.168.145.142:7000 192.168.145.159:7001 192.168.145.160:7002
redis-cli -a redispwd --cluster create 192.168.145.142:7000 192.168.145.160:7001 192.168.145.161:7002


查看集群信息:
[root@bogon ~]#redis-cli -a redispwd -p 7000 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_ping_sent:588
cluster_stats_messages_pong_sent:560
cluster_stats_messages_sent:1148
cluster_stats_messages_ping_received:558
cluster_stats_messages_pong_received:588
cluster_stats_messages_meet_received:2
cluster_stats_messages_received:1148

[root@bogon ~]#redis-cli -a redispwd -p 7000 cluster nodes
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714490094021 3 connected 10923-16383
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 myself,master - 0 0 1 connected 0-5460
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714490092968 2 connected 5461-10922


在任意一个节点,向集群中写入数据:
[root@bogon ~]# redis-cli -p 7000 -a redispwd -c  #-c以及群的方式写入
127.0.0.1:7000> set k1 v1	#发现数据被写入了192.168.145.160:7002
-> Redirected to slot [12706] located at 192.168.145.160:7002
OK
192.168.145.160:7002> set k2 v2		#再次写入的数据被存储到了192.168.145.142:7000,可以看出数据是分布式存储的
-> Redirected to slot [449] located at 192.168.145.142:7000
OK

查看存储的数据:
只能在对应的节点上查看对应的数据
[root@bogon ~]# redis-cli -p 7000 -a redispwd -c
127.0.0.1:7000> set k1 v1
-> Redirected to slot [12706] located at 192.168.145.160:7002   #7000端口生成的7002端口的数据
OK
[root@bogon ~]# redis-cli -p 7002 -a redispwd -c  #登录7002端查看数据
127.0.0.1:7002> get k1
"v1"


搭建3个从集群,实现redis的高可用:
启动从redis:
[root@bogon ~]# redis-server /data/cluster/8000/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:09 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:00 redis-server 0.0.0.0:8000 [cluster]
root        3771    3181  0 00:08 pts/1    00:00:00 grep --color=auto redis


在任意一个节点向3个主节点添加从库:
#查看集群各个节点的master id  
[root@bogon ~]# redis-cli -a redispwd -p 7000 cluster nodes
	                                                                                                                                                                       7000的master id                                                          从节点                         主节点
[root@bogon ~]# redis-cli -a redispwd --cluster add-node --cluster-slave --cluster-master-id 7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.159:8001 192.168.145.142:7000
[root@bogon ~]# redis-cli -a redispwd --cluster add-node --cluster-slave --cluster-master-id b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.160:8002 192.168.145.159:7001
[root@bogon ~]# redis-cli -a redispwd --cluster add-node --cluster-slave --cluster-master-id c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.142:8000 192.168.145.160:7002


加入节点后,查看角色:
[root@bogon ~]# redis-cli -a redispwd -p 7000 cluster nodes
1d267c8598fa178c5aa594a7151ff7c49e271b45 192.168.145.142:8000@18000 slave c63dfc9a880d9b2d48864b8690797fe75ec8e173 0 1714495446733 3 connected
f04dfb05f6f2bd0d6f426d8f405633c53d26d978 192.168.145.160:8002@18002 slave b7b7c09a232814774a259ae24aeeb8bbacaf6db6 0 1714495448194 2 connected
473bf9546b864d493c45a453d1d34e07bc642958 192.168.145.159:8001@18001 slave 7fbae96055629879bfce1f2ea6419e882e84cf75 0 1714495450251 1 connected
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 myself,master - 0 1714495449000 1 connected 0-5460
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714495451296 2 connected 5461-10922
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714495452324 3 connected 10923-16383
发现出现了3主3从




在任意一端,验证cluster集群的高可用:

停掉7000的主库,查看8001是否提升为主库:
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:16 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:06 redis-server 0.0.0.0:8000 [cluster]
root        3927    3181  0 01:02 pts/1    00:00:00 grep --color=auto redis
[root@bogon ~]# kill -9 3522
[root@bogon ~]# ps -ef | grep redis
root        3764       1  0 00:03 ?        00:00:06 redis-server 0.0.0.0:8000 [cluster]
root        3929    3181  0 01:03 pts/1    00:00:00 grep --color=auto redis


以8000的redis为入口,查看角色变化:
[root@bogon ~]# redis-cli -a redispwd -p 8000 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714496715467 2 connected 5461-10922
f04dfb05f6f2bd0d6f426d8f405633c53d26d978 192.168.145.160:8002@18002 slave b7b7c09a232814774a259ae24aeeb8bbacaf6db6 0 1714496718560 2 connected
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714496717531 3 connected 10923-16383
1d267c8598fa178c5aa594a7151ff7c49e271b45 192.168.145.142:8000@18000 myself,slave c63dfc9a880d9b2d48864b8690797fe75ec8e173 0 1714496573000 3 connected
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 master,fail - 1714496585074 1714496577517 1 disconnected
473bf9546b864d493c45a453d1d34e07bc642958 192.168.145.159:8001@18001 master - 0 1714496716504 4 connected 0-5460
发现了8001提升为了主库


恢复redis的7000入口:
[root@bogon ~]# redis-cli -a redispwd -p 7000 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
1d267c8598fa178c5aa594a7151ff7c49e271b45 192.168.145.142:8000@18000 slave c63dfc9a880d9b2d48864b8690797fe75ec8e173 0 1714497284618 3 connected
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714497281543 3 connected 10923-16383
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714497283596 2 connected 5461-10922
f04dfb05f6f2bd0d6f426d8f405633c53d26d978 192.168.145.160:8002@18002 slave b7b7c09a232814774a259ae24aeeb8bbacaf6db6 0 1714497282573 2 connected
473bf9546b864d493c45a453d1d34e07bc642958 192.168.145.159:8001@18001 master - 0 1714497280513 4 connected 0-5460
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 myself,slave 473bf9546b864d493c45a453d1d34e07bc642958 0 1714497277000 4 connected
发现自动转换成了从角色


使恢复redis的7000再次作为主角色:
[root@bogon ~]# redis-cli -p 7000 -a redispwd -c
127.0.0.1:7000> cluster failover
OK
127.0.0.1:7000> info   #转换成了主角色
# Replication
role:master
connected_slaves:1


192.168.145.159端配置:

#创建配置文件目录
mkdir -p /data/cluster/7001
mkdir -p /data/cluster/8001
#创建配置文件
同上,修改端口和目录即可

启动主redis:
redis-server /data/cluster/7001/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 22:45 ?        00:00:00 redis-server 0.0.0.0:7000 [cluster]
root        3534    3181  0 22:51 pts/1    00:00:00 grep --color=auto redis

查看集群信息:
同上

搭建3个从集群,实现redis的高可用:
启动从redis:
[root@bogon ~]# redis-server /data/cluster/8001/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:09 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:00 redis-server 0.0.0.0:8000 [cluster]
root        3771    3181  0 00:08 pts/1    00:00:00 grep --color=auto redis






192.168.145.160端配置:

#创建配置文件目录
mkdir -p /data/cluster/7002
mkdir -p /data/cluster/8002
#创建配置文件
同上,修改端口和目录即可

启动主redis:
redis-server /data/cluster/7002/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 22:45 ?        00:00:00 redis-server 0.0.0.0:7000 [cluster]
root        3534    3181  0 22:51 pts/1    00:00:00 grep --color=auto redis

查看集群信息:
同上

搭建3个从集群,实现redis的高可用:
启动从redis:
[root@bogon ~]# redis-server /data/cluster/8002/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:09 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:00 redis-server 0.0.0.0:8000 [cluster]
root        3771    3181  0 00:08 pts/1    00:00:00 grep --color=auto redis