redis主从复制

发布时间 2023-07-31 21:05:11作者: zxinlog

1. 概念

指将一台Redis服务器的数据,复制到其它的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

2. 配置步骤

1、在/etc/redis下面,将6379.conf拷贝两份,分别称为6380.conf与6381.conf

2、修改配置文件6380.conf与6381.conf中的内容

redis默认端口是 6379,复制多份占用别的端口。

/etc/redis/6380.conf

修改内容: port、pidfile、logfile、dbfilename、appendfilename

port 6380
pidfile "/var/run/redis_6380.pid"
logfile "/var/log/redis_6380.log"
dbfilename "dump6380.rdb"
appendfilename "appendonly6380.aof"

/etc/redis/6381.conf

修改内容: port、pidfile、logfile、dbfilename、appendfilename

port 6381
pidfile "/var/run/redis_6381.pid"
logfile "/var/log/redis_6381.log"
dbfilename "dump_6381.rdb"
appendfilename "appendonly_6381.aof"

3. 启动多个配置文件

sudo redis-server /etc/redis/6379.conf
sudo redis-server /etc/redis/6380.conf
sudo redis-server /etc/redis/6381.conf

启动后通过 ps -elf | grep redis 查看。

[root@arch ~]# ps -elf | grep redis
5 S root         827       1  0  80   0 - 14616 do_epo 15:25 ?        00:00:16 redis-server 127.0.0.1:6379
5 S root        1878       1  0  80   0 - 14616 do_epo 19:58 ?        00:00:00 redis-server 127.0.0.1:6380
5 S root        1886       1  0  80   0 - 14616 do_epo 19:58 ?        00:00:00 redis-server 127.0.0.1:6381
0 S root        1892    1673  0  80   0 -  2417 pipe_r 19:58 pts/0    00:00:00 grep --color redis

开启多个终端,进入各自对应的客户端。

redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381

使用 info replication 查看主从信息。

4. 设置主从

默认情况,机器都是自认为自己是主机的状态。

# 6379 同 6380、 6381
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:3c4a35f44d9d0043f21b93c44a4e2a7b3e0618f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> 

slaveof

令 6380 作为6379的从机。在6380上执行 slaveof 6379_ip 6379_port ,也可以使用 slaveof no one 不作为任何机器的从机。

性质:

  • 从机不允许写操作。

  • 从机挂了,主机立马感知到。从机再次上线,初始状态为自认为主机。

  • 默认主机挂了,从机等待主机上线。

5. 哨兵模式

如果主机挂了,应让其他的从机之间再次选举出新的主机。通过设置哨兵监视主机。

当主机挂掉之后,会执行流言协议(造谣)与投票协议(少数服从多数)

配置步骤

1、在/etc/redis下面创建,sentinel.conf,然后给文件添加如下命令

#sentinel monitor {masterName} {masterIp} {masterPort} {quorum}
#sentinel monitor 主节点名称   主节点Ip    主节点端口  投票数
sentinel monitor master6379 127.0.0.1 6379 1

2、启动哨兵模式(将哨兵对应的配置文件启动)

sudo redis-sentinel /etc/redis/sentinel.conf

3、当主机6379挂掉之后,哨兵会执行流言协议与投票协议,将票数投递给6380或者6381,最后6380或者6381谁得到了票数多,谁就是新的主机。

总结:

传统的主从复制,主机挂掉之后,从机 会等待主机上线,如果主机一直不上线,那么传统主从复制就不能写操作,表明是有问题的。现在哨兵模式,可以解决主机挂掉之后,从机不能推选新主机的现象,也就是可以解决不能写的现象。