redis: 主从复制和哨兵模式(十三)

redis 主从复制

最低要求是一主二从(一个主机和两个从机)
主机才能写 从机只能读
只要从机连接到主机 数据就会全量复制到从机

环境配置(同一台机器)

1:配置文件

redis.conf配置如下:

port 6379

pidfile /var/run/redis_6379.pid

logfile "6379.log"

dbfilename dump6379.rdb

redis01.conf配置如下:

port 6380

pidfile /var/run/redis_6380.pid

logfile "6380.log"

dbfilename dump6380.rdb

replicaof 127.0.0.1 6379 #配置自己的主机

redis02.conf配置如下:

port 6381

pidfile /var/run/redis_6381.pid

logfile "6381.log"

dbfilename dump6381.rdb

replicaof 127.0.0.1 6379 #配置自己的主机
2:启动三个redis服务
[root@ruiyiserver bin]# redis-server redis-config/redis.conf 
[root@ruiyiserver bin]# redis-server redis-config/redis01.conf 
[root@ruiyiserver bin]# redis-server redis-config/redis02.conf 
3:测试三个服务是否正常
[root@ruiyiserver bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG

[root@ruiyiserver bin]# redis-cli -p 6380
127.0.0.1:6380> ping
PONG

[root@ruiyiserver bin]# redis-cli -p 6381
127.0.0.1:6381> ping
PONG
4:查看节点信息 info replication

6379:(主)

role:master #主机
connected_slaves:2 #从机数量  
slave0:ip=127.0.0.1,port=6380,state=online,offset=56,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=56,lag=1
master_replid:1df77e446ddea2a4f61046e251a42c66f8d35175
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

6380:

127.0.0.1:6380> info replication
# Replication
role:slave #从机角色
master_host:127.0.0.1 #自己的主机信息
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:98
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1df77e446ddea2a4f61046e251a42c66f8d35175
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98

6381:

127.0.0.1:6381> info replication
# Replication
role:slave #从机角色
master_host:127.0.0.1 #自己的主机信息
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:126
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1df77e446ddea2a4f61046e251a42c66f8d35175
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126

redis 哨兵模式

哨兵模式基于主从复制!

环境配置(同一台机器)

1:配置文件

sentinel01.conf

# 端口
port 26379

# 是否后台启动
daemonize yes

# pid文件路径
pidfile /var/run/redis-sentinel01.pid

# 日志文件路径
logfile "/var/log/sentinel01.log"

# 定义工作目录
dir /tmp

# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster 127.0.0.1 6379 2

# 如果mymaster 30秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds mymaster 30000

# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人>在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步>的进程将变慢。
sentinel parallel-syncs mymaster 1

# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout mymaster 180000

# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes

sentinel02.conf

# 端口
port 26380

# 是否后台启动
daemonize yes

# pid文件路径
pidfile /var/run/redis-sentinel02.pid

# 日志文件路径
logfile "/var/log/sentinel02.log"

# 定义工作目录
dir /tmp

# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster 127.0.0.1 6379 2

# 如果mymaster 30秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds mymaster 30000

# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人>在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步>的进程将变慢。
sentinel parallel-syncs mymaster 1

# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout mymaster 180000

# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes

sentinel03.conf

# 端口
port 26381

# 是否后台启动
daemonize yes

# pid文件路径
pidfile /var/run/redis-sentinel03.pid

# 日志文件路径
logfile "/var/log/sentinel03.log"

# 定义工作目录
dir /tmp

# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster 127.0.0.1 6379 2

# 如果mymaster 30秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds mymaster 30000

# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人>在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步>的进程将变慢。
sentinel parallel-syncs mymaster 1

# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout mymaster 180000

# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
3:启动三个哨兵服务
[root@ruiyiserver bin]# redis-sentinel redis-config/sentinel01.conf 
[root@ruiyiserver bin]# redis-sentinel redis-config/sentinel02.conf 
[root@ruiyiserver bin]# redis-sentinel redis-config/sentinel03.conf 
[root@ruiyiserver bin]# ps -ef | grep redis
root     13129     1  0 20:28 ?        00:00:03 redis-server 127.0.0.1:6379         
root     13136     1  0 20:28 ?        00:00:02 redis-server 127.0.0.1:6380           
root     13144     1  0 20:28 ?        00:00:02 redis-server 127.0.0.1:6381           
root     13178 13159  0 20:29 pts/1    00:00:00 redis-cli -p 6379
root     13203 13185  0 20:29 pts/2    00:00:00 redis-cli -p 6380
root     13226 13208  0 20:29 pts/3    00:00:00 redis-cli -p 6381
root     14056     1  0 21:18 ?        00:00:00 redis-sentinel *:26379 [sentinel]          
root     14065     1  0 21:18 ?        00:00:00 redis-sentinel *:26380 [sentinel]          
root     14070     1  0 21:18 ?        00:00:00 redis-sentinel *:26381 [sentinel]
4:断开主机连接并且等待30秒
127.0.0.1:6379> SHUTDOWN
not connected> exit
5:查看两个从机的状态

6380:已变成主机

127.0.0.1:6380> info replication
# Replication
role:master #主机
connected_slaves:1 #从机数量
slave0:ip=127.0.0.1,port=6381,state=online,offset=25134,lag=0
master_replid:578fca51bbadf225cfa32d03b0dec23543a60bea
master_replid2:1df77e446ddea2a4f61046e251a42c66f8d35175
master_repl_offset:25134
second_repl_offset:22837
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:25134

6381:还是从机

127.0.0.1:6381> info replication
# Replication
role:slave #从机
master_host:127.0.0.1
master_port:6380 #自己的主机信息
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:44027
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:578fca51bbadf225cfa32d03b0dec23543a60bea
master_replid2:1df77e446ddea2a4f61046e251a42c66f8d35175
master_repl_offset:44027
second_repl_offset:22837
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:44027
6:恢复6379 并查看状态

6379:已变成从机

127.0.0.1:6379> info replication
# Replication
role:slave #从机
master_host:127.0.0.1
master_port:6380 #自己的主机信息
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:0
master_link_down_since_seconds:1586438664
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:bfa848ba383079c3912623b4dae24bd10dc5658f
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
posted @ 2020-04-09 23:07  努力的校长  阅读(118)  评论(0编辑  收藏  举报