Redis一主两从搭建

Redis主从复制

1、采用异步的方式进行数据同步
3、支持级联复制, 某一个slave服务器可以作为另外slave服务器的主
4、进行主从复制时,master/slave不会阻塞客户端访问请求
5、自redis 2.6版本后,slave服务器默认工作在只读模式

****环境描述

172.16.68.169    7001    master
172.16.68.169    7002    slave
172.16.68.169    7003    slave

一、主从环境搭建

 注:redis搭建参考 https://www.cnblogs.com/lina-2159/p/13553695.html,在此基础上继续以下操作。

1、创建配置文件目录,以端口号来作为标识

# mkdir  -p  /usr/local/redis-4.0.11/conf/{7001,7002,7003}
# cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7001
# cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7002
# cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7003

2、修改master配置文件

7001]# grep '^[a-z]' redis.conf

bind 172.16.68.169
protected-mode no
port 7001
daemonize yes
pidfile "/var/run/redis_7001.pid"
dir "/usr/local/redis-4.0.11/conf/7001"
requirepass "123456"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

3、修改两个slave的配置文件

7002]# grep '^[a-z]' redis.conf

bind 172.16.68.169
protected-mode no
port 7002
daemonize yes
pidfile "/var/run/redis_7002.pid"
dir "/usr/local/redis-4.0.11/conf/7002"
requirepass "123456"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

masterauth "123456"
slaveof 172.16.68.169 7001
7003]# grep '^[a-z]' redis.conf

bind 172.16.68.169
protected-mode no
port 7003
daemonize yes
pidfile "/var/run/redis_7003.pid"
dir "/usr/local/redis-4.0.11/conf/7003"
requirepass "123456"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

masterauth "123456"
slaveof 172.16.68.169 7001

4、启动三个redis实例

# /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7001/redis.conf
# /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7002/redis.conf
# /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7003/redis.conf

5、查看复制状态

# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7001 -a 123456

172.16.68.169:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.68.169,port=7003,state=online,offset=14,lag=0
slave1:ip=172.16.68.169,port=7002,state=online,offset=0,lag=1
master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7002 -a 123456

172.16.68.169:7002> info replication
# Replication
role:slave
master_host:172.16.68.169
master_port:7001
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:196
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196
# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7003 -a 123456

172.16.68.169:7003> info replication
# Replication
role:slave
master_host:172.16.68.169
master_port:7001
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:252
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:252
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:252

至此,redis一主两从搭建完毕。

二、Redis高可用sentinel

但是master突然宕机了怎么办?slave需要手动提升为master,这种不太现实,我们需要一个能监控master状态的服务,一旦检测到master的状态是down,就从slave中选一个当master,这就需要sentinel登场啦。

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

1、sentinel配置

# vim  /usr/local/redis-4.0.11/sentinel.conf

port 26379
daemonize yes
dir "/usr/local/redis-4.0.11"
logfile "26379.log"

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 172.16.68.169 7001 1   #监控的主机为7001
sentinel down-after-milliseconds mymaster 5000     #master宕机5s后提升slave为主
sentinel auth-pass mymaster 123456                      #redis认证密码

2、启动sentinel

# /usr/local/redis-4.0.11/src/redis-sentinel   /usr/local/redis-4.0.11/sentinel.conf

 3、redis切换测试

停掉master7001

# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7001 -a 123456

Warning: Using a password with '-a' option on the command line interface may not be safe.
172.16.68.169:7001> shutdown

 可以看到此时7003已经成为了master

注:这里我只启用了一个哨兵,当然也可以启用多个,配置多个哨兵和一个类似,监控的都要是master服务器,别忘记把哨兵监听的端口号变一变呀。

posted @ 2020-09-16 11:27  灰蓝色的白云梦想  阅读(438)  评论(0编辑  收藏  举报