Fork me on GitHub

redis 主从备份(手动切换)

redis 默认都是master

redis集群中,必须使用相同版本的redis,最好精确到小版本

  一、开启redis服务,并使用redis客户端连接redis服务

1 redis-server 
2 redis-cli 

  二、使用SLAVEOF 将角色转换为slave,并指向redis 主服务器的IP和对应的端口(redis 中不区分大小写)

 SLAVEOF 192.168.1.4 6379 

输入:SLAVEOF ,后面会自动显示灰色的host 和port表示对方的主机和端口

  三、INFO查看

127.0.0.1:6379> info 
# Replication
role:slave
master_host:192.168.1.4
master_port:6379
master_link_status:down

  1、查看当前的redis中都有哪些key

127.0.0.1:6379> keys *
1) "a"

如果和master建立了连接,就会清空当前redis上的所有数据库,以master为准

  四、配置连接密码

127.0.0.1:6379> CONFIG SET masterauth 12345678
OK
CONFIG SET masterauth 后面跟上的12345678就是master redis的密码

  如果版本不一样,就会提示错误,我这里使用的是redis5.0.12

 slave 模式下是不能写数据的,只能从master那边同步过来

   五、永久有效,直接写到配置中

低版本redis 修改slaveof  <masterip> <masterport>

 高版本redis修改replicaof <masterip> <masterport>

replicaof 192.168.1.4 6379

  2、修改master认证密码

# masterauth <master-password>

修改为:
 masterauth 123456

注意:在redis 5.0版本中IP地址和对应的端口,密码,两边的<>符号必须去掉,否则会导致连不上对应的端口,密码无效。

   六、手动提升slave服务器为master服务器

  1、在需要提升的从服务器上执行slaveof no one

127.0.0.1:6379> slaveof no one 

  2、info查看状态

# Replication
role:master
connected_slaves:0
master_replid:ec04796a5c4f1edf3a76cb6cb63e1fd3410fae85
master_replid2:b77f70eeb9f8b8837e146ad0bb0991eeeedbee0e
master_repl_offset:120

这里就变成了master redis了这个时候之前作为从服务器的redis机器才能开始写东西

  3、修改配置文件,注释下面两行

vim /apps/redis/etc/redis.conf 
replicaof 192.168.1.4 6379
masterauth 123456

避免重启服务器后,还是做为slave角色去尝试连接master,版本不一样这里的replicaof 也可能是slaveof

  七、实现从1服务器同步主1 服务器,从2服务器同步从1服务器,

     主1 服务器IP地址:192.168.1.4

     从1 服务器IP地址:192.168.1.6

     从2 服务器IP地址:192.168.1.7

  1.1、修改从2服务器的redis配置文件,使其同步主1 服务器的数据

vim /apps/redis/etc/redis.conf 
replicaof 192.168.1.4 6379
masterauth 123456

  1.2、手动杀掉进程,重启redis服务,并指定对应的配置文件

1 kill -9 `ps -ef |grep redis|grep 6379|tr -s " "|cut -d' ' -f2`
2 redis-server /apps/redis/etc/redis.conf 

  1.3、使用info查看信息

127.0.0.1:6379> info 

  显示如下则表示成功,自动开始同步主服务器上的数据

# Replication
role:slave
master_host:192.168.1.4
master_port:6379
master_link_status:up

  2、修改从2 服务器实现同步从1 服务器数据

vim /apps/redis/etc/redis.conf 
replicaof 192.168.1.6 6379
masterauth 123456

注意:此处从服务器必须设置密码,否则也会连接不上的

以上就完成了,主服务器同步数据至从服务器,从服务器在同步数据至从服务器

   在有 slave 的”master”查看状态: 

# Replication 
role:slave  #当前服务器角色,slave表示从服务器,master表示主服务器
master_host:192.168.1.4 #主服务器IP地址
master_port:6379   #主服务器端口
master_link_status:up #当前连接状态, down表示没连接成功
master_last_io_seconds_ago:9 #最近一次与master 通信已经过去多少秒。 
master_sync_in_progress:0 #是否正在与master 通信。 ,0表示没有,1表示正在同步 slave_repl_offset:5334 #当前同步的偏移量。 slave_priority:100 #slave 优先级,master 故障后值越小越优先同步。
slave_read_only:1 #slave 开启只读状态,表示slave服务器不能直接写数据 connected_slaves:1 #当前有几个节点连接进来
slave0:ip=192.168.1.6,port=6379,state=online,offset=4223,lag=1 #连接的slave的机器地址,端口,状态,偏移量

master_replid:b77f70eeb9f8b8837e146ad0bb0991eeeedbee0e #第一个masterID(当前的master ID)
master_replid2:0000000000000000000000000000000000000000 #第二个master ID(如果机器切换过master,之前的master ID值就会被移动到这)
 

 


 

报错解决办法:

  1、(error) READONLY You can't write against a read only replica

因为连接的是从节点,从节点只有读的权限,没有写的权限

解决办法:

进入redis.conf配置文件,修改配置文件的slave-read-only为no,
那么从节点也就可以进行写的操作了

   2、编译失败之后可以试着清理下残留试试看

make distclean

  3、日志错误如下

1117:S 15 Jul 2021 10:09:59.963 * Connecting to MASTER 192.168.1.6:6379
1117:S 15 Jul 2021 10:09:59.963 * MASTER <-> REPLICA sync started
1117:S 15 Jul 2021 10:09:59.963 # Error condition on socket for SYNC: Connection refused

  3.1、解决办法

排查redis主服务器监听的端口是否是0.0.0.0

vim /apps/redis/etc/redis.conf 
bind 0.0.0.0

   4、输入密码

posted @ 2021-07-14 17:18  Alex-Lzy  阅读(3034)  评论(0编辑  收藏  举报