主从复制
特点:
主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库
从数据库一般都是只读的,并且接收主数据库同步过来的数据
一个master可以拥有多个slave,但是一个slave只能对应一个master
slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来
master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务
master挂了以后,不会在slave节点中重新选一个master
缺点:
master节点在主从模式中唯一,若master挂掉,则redis无法对外提供写服务。
配置方式
3台机器 IP1、IP2、IP3
IP1默认配置(主 master)
bind IP1 #监听ip,多个ip用空格分隔
daemonize yes #允许后台启动
logfile "/usr/local/redis/redis.log" #日志路径
dir /data/redis #数据库备份文件存放目录
requirepass 123456 #设置master连接密码
masterauth 123456 #设置连接master密码
appendonly yes #在/data/redis/目录生成appendonly.aof文件,将每一次写操作请求都追加到
#appendonly.aof 文件中
IP2(从 slave)
bind IP2
daemonize yes
logfile "/usr/local/redis/redis.log"
dir /data/redis
#replicaof IP1 6379
slaveof IP1 6379
requirepass 123456 #设置master连接密码
masterauth 123456 #设置连接master密码
appendonly yes
IP3(从 slave)
bind IP3
daemonize yes
logfile "/usr/local/redis/redis.log"
dir /data/redis
#replicaof IP1 6379
slaveof IP1 6379
requirepass 123456 #设置master连接密码
masterauth 123456 #设置连接master密码
appendonly yes
启动服务 redis-server redis.conf
验证是否成功如下图
Sentinel模式
介绍
sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义
当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的
配置文件也会被修改,比如slaveof属性会指向新的master
当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据
sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群
多sentinel配置的时候,sentinel之间也会自动监控
当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心
一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis
sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了
当使用sentinel模式的时候,客户端就不要直接连接Redis,而是连接sentinel的ip和port,由sentinel来提供具体的可提
供服务的Redis实现,这样当master节点挂掉以后,sentinel就会感知并将新的master节点提供给使用者。
新增sentinel.conf文件(配置文件只需要配置master的信息就好了,不用配置slave的信息,
因为slave能够被自动检测到(master节点中有关于slave的消息)。
--------------------------------------------------------------------------
# 这个是Redis6379配置内容,其他文件同理新增然后改一下端口即可,26380,和 26381。
#当前Sentinel服务运行的端口
port 26379
# 哨兵监听的主服务器
sentinel monitor mymaster 127.0.0.1 6379 2
# 3s内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000
#如果10秒后,mysater仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
-----------------------------------------------------------------------------
# 哨兵监听的主服务器 (详解)
sentinel monitor [master-group-name] [ip] [port] [quorum]
master-group-name:master名称(可以自定义)
ip port : IP地址和端口号
quorun:票数 几个Sentinel同意master就是挂掉了
通过redis-trib.rb可创建redis集群,然后通过–replicas后面接的数字,表示1个主节点对应几个从节点,那么我就做了如下的测试,想要达到的效果就是有6个节点,然后2个master节点,每个master节点对应2个slave节点,不就正好是6个节点了吗,但是在执行的时候报错:
[aiprd@hadoop2 src]$ ./redis-trib.rb create --replicas 2 192.168.30.10:7000 192.168.30.11:7003 192.168.30.10:7002 192.168.30.10:7001 192.168.30.11:7004 192.168.30.11:7005
Creating cluster
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 6 nodes and 2 replicas per node. #解释了,对于6个节点,不可能是3个master,每个有2个副本节点。因为,那样的结构需要9个节点。
*** At least 9 nodes are required. #至少需要9个节点。
以上信息的意思是:Redis集群至少需要3个master节点,所以现在总共有6个节点,就只能是1master对应1slave这种方式。
所以:
1master-1slave,redis集群需要6个节点
1master-2slave,redis集群需要9个节点,以此类推。