赞
踩
1.下载安装包并解压,文章以redis-5.0.14版本为例,如下图所示
2.复制三份redis文件目录分别放置在redis_master、redis_slave1、redis_slave2三个文件夹中,完成复制后,如下图所示
Redis主从服务器配置
节点 | IP | 端口 | 从属关系 |
---|---|---|---|
Master | 127.0.0.1 | 6380 | 主服务器 |
Slave1 | 127.0.0.1 | 6381 | 从服务器 |
Slave2 | 127.0.0.1 | 6382 | 从服务器 |
1.在Redis核心配置文件Redis.windows.conf中修改公用参数
#通过本机客户端访问redis服务,如果需要其它设备进行访问,可设置为0.0.0.0 bind 127.0.0.1 #如果以后台的方式运行,我们就需要指定一个pid文件 pidfile "" #RDB文件保存的位置 dir "" #保护模式 protected-mode no #后台运行 daemonize yes #从服务器连接主服务器 masterauth <master-password> #设置从服务器只读 replica-read-only yes #Redis服务器连接密码,没有可注释 requirepass foobared
2.Master重要参数
#服务运行占用的端口号,从服务器分别设置为6281、6382
port 6380
3.Slave1重要参数
#服务运行占用的端口号,从服务器分别设置为6281、6382
port 6381
#设置主从关系,5.0版本前为:slaveof
replicaof 127.0.0.1 6380
4.Slave2重要参数
#服务运行占用的端口号,从服务器分别设置为6281、6382
port 6382
#设置主从关系,5.0版本前为:slaveof
replicaof 127.0.0.1 6380
1.分别进入redis-server.exe所在目录,cmd
redis-server.exe redis.windows.conf
Master启动成功,如图所示
Slave1启动成功,如图所示
Slave2启动成功,如图所示
2.分别进入redis-cli.exe所在目录,cmd
redis-cli.exe -h 【IP地址】 -p 【端口号】
在Redis客户端查看主从信息
#Master节点 127.0.0.1:6380> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6381,state=online,offset=370895,lag=0 slave1:ip=127.0.0.1,port=6382,state=online,offset=370895,lag=0 master_replid:7d7b5a63aa4e2f47c7374797ccd0c69d98223232 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:370895 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:370895 127.0.0.1:6380> #Slave1节点 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:372372 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:7d7b5a63aa4e2f47c7374797ccd0c69d98223232 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:372372 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:372372 127.0.0.1:6381> #Slave2节点 127.0.0.1:6382> info replication # Replication role:slave master_host:127.0.0.1 master_port:6380 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:373702 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:7d7b5a63aa4e2f47c7374797ccd0c69d98223232 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:373702 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:29 repl_backlog_histlen:373674 127.0.0.1:6382>
#Master节点 PS D:\SoftWare\Redis\redis-5.0.14\redis_test\redis_master> .\redis-cli.exe -h 127.0.0.1 -p 6380 127.0.0.1:6380> auth 111111 OK 127.0.0.1:6380> get num (nil) 127.0.0.1:6380> set num 10 OK 127.0.0.1:6380> #Slave1节点 PS D:\SoftWare\Redis\redis-5.0.14\redis_test\redis_slave1> .\redis-cli.exe -h 127.0.0.1 -p 6381 127.0.0.1:6381> auth 111111 OK 127.0.0.1:6381> get num (nil) 127.0.0.1:6381> get num "10" 127.0.0.1:6381> #Slave2节点 PS D:\SoftWare\Redis\redis-5.0.14\redis_test\redis_slave2> .\redis-cli.exe -h 127.0.0.1 -p 6382 127.0.0.1:6382> auth 111111 OK 127.0.0.1:6382> get num (nil) 127.0.0.1:6382> get num "10" 127.0.0.1:6382>
完成以上操作,一主二从关系就以成功搭建,并实现了数据主从复制
哨兵配置
节点 | IP | 端口 | 从属关系 |
---|---|---|---|
Sentinel1 | 127.0.0.1 | 26380 | 无 |
Sentinel2 | 127.0.0.1 | 26381 | 无 |
Sentinel3 | 127.0.0.1 | 26382 | 无 |
1、分别在redis安装目录下,创建sentinel.conf文件
#哨兵运行的端口号 port 26380 #后台运行,指定redis是否要用守护线程的方式启动 daemonize yes #保护模式,保护你的redis实例,防止被访问和利用,可允许外部访问 protected-mode no #Redis工作目录,RDB文件存储的位置 dir "" #禁止修改脚本 sentinel deny-scripts-reconfig yes # 配置监听的主服务器,mymaster代表服务器的名称,127.0.0.1代表监控的主服务器,6380代表端⼝,2代表只有两个或两个以上的哨兵认为主服务器不可⽤的时候,才会进⾏failover操作。 sentinel monitor mymaster 127.0.0.1 6380 2 #从库访问主库的密码认证,要保持一致 sentinel auth-pass mymaster 111111 #超过指定等待时间后主节点尚未对哨兵做出回应,哨兵将认为主节点已宕机,默认30 s sentinel down-after-milliseconds mymaster 5000 #故障转移超时时间,如果该时间内没完成failover操作,则认为本次failover失败,默认180 s sentinel failover-timeout mymaster 30000
1.分别进入redis-server.exe所在目录,cmd
redis-server.exe sentinel.conf --sentinel
Sentinel1启动成功,如图所示
##哨兵ID
Sentinel ID is 56686714ba3fd341877f6c91a2e97fda732d671f
##声明哨兵监控的主数据库名称及其 ip地址, 端口号等
+monitor master mymaster 127.0.0.1 6380 quorum 2
##发现了6381、6382从数据库,从属于6380主库
+slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
+slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380
##声明26381、26382两个哨兵正在监控6380主服务器
+sentinel sentinel b7ec8c8851dfd997e73ac96da36857e1c20262c8 127.0.0.1 26381 @ mymaster 127.0.0.1 6380
+sentinel sentinel a4443b1dc5faa8e889482657a6b4446c81d583f7 127.0.0.1 26382 @ mymaster 127.0.0.1 6380
Sentinel2启动成功,如图所示
##哨兵ID
Sentinel ID is b7ec8c8851dfd997e73ac96da36857e1c20262c8
##声明哨兵监控的主数据库名称及其 ip地址, 端口号等
+monitor master mymaster 127.0.0.1 6380 quorum 2
##发现了6381、6382从服务器,从属于6380主库
+slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
+slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380
##声明26380、26382两个哨兵正在监控6380主服务器
+sentinel sentinel 56686714ba3fd341877f6c91a2e97fda732d671f 127.0.0.1 26380 @ mymaster 127.0.0.1 6380
+sentinel sentinel a4443b1dc5faa8e889482657a6b4446c81d583f7 127.0.0.1 26382 @ mymaster 127.0.0.1 6380
Sentinel3启动成功,如图所示
##哨兵ID
Sentinel ID is a4443b1dc5faa8e889482657a6b4446c81d583f7
##声明哨兵监控的主数据库名称及其 ip地址, 端口号等
+monitor master mymaster 127.0.0.1 6380 quorum 2
##发现了6381、6382从服务器,从属于6380主库
+slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
+slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380
##声明26381、26380两个哨兵正在监控6380主服务器
+sentinel sentinel b7ec8c8851dfd997e73ac96da36857e1c20262c8 127.0.0.1 26381 @ mymaster 127.0.0.1 6380
+sentinel sentinel 56686714ba3fd341877f6c91a2e97fda732d671f 127.0.0.1 26380 @ mymaster 127.0.0.1 6380
在控制台即可看出三个哨兵已完成了互相连接以及对主库的监控
完成以上操作,三哨兵就已成功搭建
Sentinel1控制台
## sentinel1主观认为主库宕机 +sdown master mymaster 127.0.0.1 6380 ## 集群版本号变为1,集群版本由哨兵控制 +new-epoch 1 ## sentinel1投票给sentinel3 +vote-for-leader a4443b1dc5faa8e889482657a6b4446c81d583f7 1 ##半数哨兵主观认为主库宕机,转变为客观认为主库宕机 +odown master mymaster 127.0.0.1 6380 #quorum 3/2 ##下次故障转移将会在Wed Jul 5 11:38:42 2023后才会执行,跟前面日期比对相差6分钟,在上次故障转移发生后的6分钟内,再次出现节点故障,在6分钟内哨兵不会执行故障转移,会在6分钟后执行; Next failover delay: I will not start a failover before Wed Jul 5 11:38:42 2023 ## 更新sentinel1哨兵配置文件 +config-update-from sentinel a4443b1dc5faa8e889482657a6b4446c81d583f7 127.0.0.1 26382 @ mymaster 127.0.0.1 6380 ##宣布选举出6382为新的主库 +switch-master mymaster 127.0.0.1 6380 127.0.0.1 6382 ##新发现6381、6380两个从库,从属于6382主库 +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6382 +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382 ##新发现一个6380从库宕机,从属于6382 +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382
Sentinel2控制台(信息相似,不再赘述,请参考Sentinel1)
+sdown master mymaster 127.0.0.1 6380 +new-epoch 1 +vote-for-leader a4443b1dc5faa8e889482657a6b4446c81d583f7 1 +odown master mymaster 127.0.0.1 6380 #quorum 3/2 Next failover delay: I will not start a failover before Wed Jul 5 11:38:42 2023 +config-update-from sentinel a4443b1dc5faa8e889482657a6b4446c81d583f7 127.0.0.1 26382 @ mymaster 127.0.0.1 6380 +switch-master mymaster 127.0.0.1 6380 127.0.0.1 6382 +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6382 +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382 +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382
Sentinel3控制台
##Sentinel3主观发现6380主库宕机 +sdown master mymaster 127.0.0.1 6380 ##已满2个哨兵主观认为主库宕机,转变为客观认为主库宕机 +odown master mymaster 127.0.0.1 6380 #quorum 2/2 ##集群版本变为1 +new-epoch 1 ##准备进行故障转移 +try-failover master mymaster 127.0.0.1 6380 ##Sentinel3投票给Sentinel3 +vote-for-leader a4443b1dc5faa8e889482657a6b4446c81d583f7 1 ##收到Sentinel1、Sentinel2各选举的一票 56686714ba3fd341877f6c91a2e97fda732d671f voted for a4443b1dc5faa8e889482657a6b4446c81d583f7 1 b7ec8c8851dfd997e73ac96da36857e1c20262c8 voted for a4443b1dc5faa8e889482657a6b4446c81d583f7 1 ##赢得指定纪元的选举,可以进行故障迁移操作了 +elected-leader master mymaster 127.0.0.1 6380 ##故障转移操作现在处于等待状态,哨兵正在寻找可以升级为主服务器的从服务器 +failover-state-select-slave master mymaster 127.0.0.1 6380 ##找到合适的从库6382,可升级为主库 +selected-slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380 ##正在将指定的从服务器升级为主服务器,等待升级功能完成 +failover-state-send-slaveof-noone slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380 ##等待其它的哨兵确认主从关系 +failover-state-wait-promotion slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380 ##全部确认成功 +promoted-slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6380 ## 开始对集群中的所有slave做reconf更新配置文件操作 +failover-state-reconf-slaves master mymaster 127.0.0.1 6380 ##向指定的slave发送"slaveof"指令,令其跟随新的master。 +slave-reconf-sent slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380 ##主观销毁一个宕机的主库 -odown master mymaster 127.0.0.1 6380 ##目标slave正在执行'slaveof'操作,如果期间接收到了新的"slave-reconf-sent"命令,则在会在当前操作执行完毕后,再次执行slaveof +slave-reconf-inprog slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380 ##目标slave配置信息更新完毕,leader可以对下一个slave开始reconfig操作了。 +slave-reconf-done slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380 ##本次故障转移完毕 +failover-end master mymaster 127.0.0.1 6380 ##故障转移完毕后,各个sentinel开始监控新的master。 +switch-master mymaster 127.0.0.1 6380 127.0.0.1 6382 ##发现6381、6380两个从库,从属于6382主库 +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6382 +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382 ##发现一个6380从库宕机,该从库从属于6382主库 +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382
Slave1控制台
Slave2控制台
通过观察可以发现三哨兵协调工作,完成了故障转移,选举出了新的主库,实现了Redis服务的高可用
【1】查看哨兵控制台打印信息
Sentinel1控制台
##主观销毁一个宕机的从属于6382主库的从库
-sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382
Sentinel2控制台
##主观销毁一个宕机的从属于6382主库的从库
-sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382
##切换从节点,6380主库由主节点变为从节点
+convert-to-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382
Sentinel3控制台
##主观销毁一个宕机的从属于6382主库的从库
-sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6382
【2】查看Redis服务端打印信息
原Master控制台
原Slave1控制台
无变化
原Slave2控制台
【3】查看客户端打印信息
6380客户端
127.0.0.1:6380> info replication # Replication role:slave master_host:127.0.0.1 master_port:6382 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:3840022 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:11817d2078727031b6fedd5293784babe162c1b3 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:3840022 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:3732102 repl_backlog_histlen:107921 127.0.0.1:6380>
6381客户端
127.0.0.1:6381> info replication # Replication role:slave master_host:127.0.0.1 master_port:6382 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:3841765 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:11817d2078727031b6fedd5293784babe162c1b3 master_replid2:7d7b5a63aa4e2f47c7374797ccd0c69d98223232 master_repl_offset:3841765 second_repl_offset:437165 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2793190 repl_backlog_histlen:1048576 127.0.0.1:6381>
6382客户端
127.0.0.1:6382> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=3843774,lag=1
slave1:ip=127.0.0.1,port=6380,state=online,offset=3843641,lag=1
master_replid:11817d2078727031b6fedd5293784babe162c1b3
master_replid2:7d7b5a63aa4e2f47c7374797ccd0c69d98223232
master_repl_offset:3843774
second_repl_offset:437165
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2795199
repl_backlog_histlen:1048576
127.0.0.1:6382>
由此可看出,6382成为新的主库,6380、6381成为从库,同时从属于6382主库
【4】查看哨兵配置文件变化
Sentinel1
port 26380 daemonize yes protected-mode no dir "D:\\SoftWare\\Redis\\redis-5.0.14\\redis_test\\redis_master" sentinel myid 56686714ba3fd341877f6c91a2e97fda732d671f sentinel deny-scripts-reconfig yes sentinel monitor mymaster 127.0.0.1 6382 2 sentinel auth-pass mymaster 111111 sentinel config-epoch mymaster 1 # Generated by CONFIG REWRITE sentinel leader-epoch mymaster 1 sentinel known-replica mymaster 127.0.0.1 6380 sentinel known-replica mymaster 127.0.0.1 6381 sentinel known-sentinel mymaster 127.0.0.1 26381 b7ec8c8851dfd997e73ac96da36857e1c20262c8 sentinel known-sentinel mymaster 127.0.0.1 26382 a4443b1dc5faa8e889482657a6b4446c81d583f7 sentinel current-epoch 1
Sentinel2
port 26381 daemonize yes protected-mode no dir "D:\\SoftWare\\Redis\\redis-5.0.14\\redis_test\\redis_slave1" sentinel myid b7ec8c8851dfd997e73ac96da36857e1c20262c8 sentinel deny-scripts-reconfig yes sentinel monitor mymaster 127.0.0.1 6382 2 sentinel auth-pass mymaster 111111 sentinel config-epoch mymaster 1 # Generated by CONFIG REWRITE sentinel leader-epoch mymaster 1 sentinel known-replica mymaster 127.0.0.1 6380 sentinel known-replica mymaster 127.0.0.1 6381 sentinel known-sentinel mymaster 127.0.0.1 26382 a4443b1dc5faa8e889482657a6b4446c81d583f7 sentinel known-sentinel mymaster 127.0.0.1 26380 56686714ba3fd341877f6c91a2e97fda732d671f sentinel current-epoch 1
Sentinel3
port 26382 daemonize yes protected-mode no dir "D:\\SoftWare\\Redis\\redis-5.0.14\\redis_test\\redis_slave2" sentinel myid a4443b1dc5faa8e889482657a6b4446c81d583f7 sentinel deny-scripts-reconfig yes sentinel monitor mymaster 127.0.0.1 6382 2 sentinel auth-pass mymaster 111111 sentinel config-epoch mymaster 1 # Generated by CONFIG REWRITE sentinel leader-epoch mymaster 1 sentinel known-replica mymaster 127.0.0.1 6380 sentinel known-replica mymaster 127.0.0.1 6381 sentinel known-sentinel mymaster 127.0.0.1 26380 56686714ba3fd341877f6c91a2e97fda732d671f sentinel known-sentinel mymaster 127.0.0.1 26381 b7ec8c8851dfd997e73ac96da36857e1c20262c8 sentinel current-epoch 1
。。。结束,谢谢观看
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。