redis主从、集群

redis sentinel哨兵实现redis高可用

一.redis主从

在同一台机器上部署主从:

主上的配置
配置文件:

/etc/redis.conf 

关于和主从有关的具体配置

bind 127.0.0.1
port 6379
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis_6379.log"
dir /data/redis

从上的配置
配置文件:

cp /etc/redis.conf /etc/redis2.conf

具体需要更改的配置:

port 6380
pidfile /var/run/redis_6380.pid
logfile "/var/log/redis_6380.log"
dir /data/redis2
还需要增加一行(指定主):
replicaof 127.0.0.1 6379 #我的redis是5以上
或者
Slaveof 127.0.0.1 6379 #5以下的

然后,创建从的数据目录:

mkdir /data/redis2

启动主从:

redis-server /etc/redis.conf
redis-server /etc/redis2.conf

查看:

netstat -lnpt |grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      6669/redis-server 1 
tcp        0      0 127.0.0.1:6380          0.0.0.0:*               LISTEN      10022/redis-server  

进入从redis:

redis-cli -h 127.0.0.1 -p 6380

关于主从的补充:
如果主上配置了密码:
requirepass ligen #ligen是密码
那么从上也需要进行相应的配置:

masterauth ligen #后面是密码

从上默认只读:

replica-read-only yes

redis主从事先不用同步,设置之后自动同步。

二.redis集群

redis集群是从3.0之后才支持的架构,官方称之为cluster。
redis集群有什么用?
一个redis,数据量大的话太过于臃肿,超过设备读写能力将会十分缓慢,而且单一设备不安全,容易导致丢失。
什么是redis集群?
redis集群是有多个redis节点组成。每个redis节点有主从redis构成,其中主只有一个,从可以有多个,而且从一般只做备份。多个redis节点共享数据,所有的redis数据集合才是完整的。
redis集群的特点:
它不支持同时处理多个键,当并发量很高的时候,同时创建键值会降低性能且导致不可预测是行为。redis集群根据算法均匀把键均匀的分布在各个节点上。支持在线增加、删除节点。客户端可以连任何一个节点进行读写。

redis集群配置搭建:
环境准备,准备三台机器,每台机器两个节点一主一从(需要把前面的Slaveof 127.0.0.1 6379 从配置删除),总共6个redis节点:
192.168.247.160:6379 master
192.168.247.160:6380 slave

192.168.247.170:6379 master
192.168.247.170:6380 slave

192.168.247.180:6379 master
192.168.247.180:6380 slave

额外用一台机器用来集群搭建好之后的增加和删除节点:
192.168.247.160:6381 master
192.168.247.160:6382 slave

环境准备好后,开始集群配置:

其中两台的配置如下,其他改端口和文件名就可以:

bind 192.168.247.160
port 6379  
daemonize yes
pidfile /var/run/redis_6379.pid 
dir /var/redis_6379
appendonly yes 
#开启集群
cluster-enabled yes  
#集群的配置文件,首次启动会自动创建
cluster-config-file nodes-6379.conf  
#集群节点连接超时时间,15秒
cluster-node-timeout 15000 
bind 192.168.247.160
port 6380  
daemonize yes
pidfile /var/run/redis_6380.pid 
dir /var/redis_6380
appendonly yes 
#开启集群
cluster-enabled yes  
#集群的配置文件,首次启动会自动创建
cluster-config-file nodes-6380.conf  
#集群节点连接超时时间,15秒
cluster-node-timeout 15000 

如果开启了firewalld,所有机器都需要增加如下规则:

firewall-cmd --permanent --add-port 6379-6380/tcp
firewall-cmd --permanent --add-port  16379-16380/tcp
firewall-cmd --reload

构建集群:

redis-cli --cluster create 192.168.247.160:6379 192.168.247.160:6380 192.168.247.170:6379 192.168.247.170:6380 192.168.247.180:6379 192.168.247.180:6380 --cluster-replicas 1

显示:
在这里插入图片描述
注意:如果提示如下错误
在这里插入图片描述
则是由于上次redis集群没有配置成功,生成了每个节点的配置文件和db的备份文件,所以才会产生这个错误。
所以办法就是删除redis数据目录文件。

redis集群增加节点

增加主节点192.168.247.160:6381 master
首先配置好配置文件:

bind 192.168.247.160
port 6381 
daemonize yes
pidfile /var/run/redis_6381.pid 
dir /data/redis_6381
appendonly yes 
#开启集群
cluster-enabled yes  
#集群的配置文件,首次启动会自动创建
cluster-config-file nodes-6381.conf  
#集群节点连接超时时间,15秒
cluster-node-timeout 15000 

创建目录:

mkdir /data/redis_6381

启动:

redis-server /etc/redis3.conf

将6381增加到集群中:

redis-cli --cluster add-node 192.168.247.160:6381 192.168.247.160:6380
#命令格式:6381 为要添加的节点
#6380 为已经存在的节点
#此时该节点只是作为主节点添加到了集群中,但是没有进行分片,是不可存储数据的,如果要存储数据,需要进行分片操作。

给6381节点分配槽:

redis-cli --cluster reshard 192.168.247.160:6381

在这里插入图片描述
查看节点:
在这里插入图片描述

为6381添加从节点
配置配置文件,跟之前类似,只需要修改端口和文件名就行。
启动之后,执行:

redis-cli --cluster add-node 192.168.247.160:6382 192.168.247.160:6381 --cluster-slave --cluster-master-id cb03a50941a8818e2f7bf4acfbbc68c4dbaf97e8
#添加从且指定主
#cb03a50941a8818e2f7bf4acfbbc68c4dbaf97e8 是master的id

redis集群操作

连接集群:
可以在任何一个节点上去连接集群,创建键值redis将根据算法分到主节点上

redis-cli -c -h 192.168.247.160 -p 6380

说明:在创建key的过程中,它会把不同的key分配到不同的slot中,即使我们登录到了129:6380,但在写入数据时,它会选择其他节点。

查看集群情况:

redis-cli --cluster check 192.168.247.180:6379 #任意节点都可以查看

删除集群节点:

redis-cli --cluster del-node 192.168.247.160:6382 88e3937e0e468ef8417ce47ad6e5aa5cfeb29b42
#这里必须是没有槽的节点,所以必须先移除槽,否则报错 被删除的node重启后,依然记得集群中的其它节点,这是需要执行cluster forget nodeid来忘记其它节点

删除主节点:
首先要归还槽,过程和分配槽类似,只不过是归还:

redis-cli --cluster reshard 192.168.247.160:6381

在这里插入图片描述
删除主节点,和删除从一样:

redis-cli --cluster del-node 192.168.247.160:6381 cb03a50941a8818e2f7bf4acfbbc68c4dbaf97e8
发布了108 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37369726/article/details/104114985