目录
主从搭建
复制配置文件redis.windows.conf,
修改其中两个配置文件中的端口号,及日志,rdb,aof文件保存地址。使三个redis服务的端口,日志文件,持久化文件不一样。
创建三个不同端口的redis服务。
PS E:\Redis-x64-3.2.100> ./redis-server.exe --service-install redis.windows-6380.conf --service-name redis6380 --port 6380
PS E:\Redis-x64-3.2.100> ./redis-server.exe --service-install redis.windows-6381.conf --service-name redis6381 --port 6381
PS E:\Redis-x64-3.2.100> ./redis-server.exe --service-install redis.windows.conf --service-name redis6379 --port 6379
启动这三个服务。
PS E:\Redis-x64-3.2.100> ./redis-server.exe --service-start --service-name redis6380
[16420] 24 Dec 10:54:22.715 # Redis service successfully started.
PS E:\Redis-x64-3.2.100> ./redis-server.exe --service-start --service-name redis6381
[4784] 24 Dec 10:54:33.558 # Redis service successfully started.
PS E:\Redis-x64-3.2.100> ./redis-server.exe --service-start --service-name redis
[14900] 24 Dec 10:54:42.511 # Redis service successfully started.
PS E:\Redis-x64-3.2.100>
客户端登录
PS E:\Redis-x64-3.2.100> ./redis-cli.exe -h 127.0.0.1 -p 6380
修改从服务器的配置文件(这里设置6379这个为主服务器)
slaveof 127.0.0.1 6379
masterauth ******
一主二从搭建就完成了。
启动哨兵
新建配置文件sentinel.conf
#只需配置主服务器
sentinel monitor mymaster 127.0.0.1 6379 1
#主服务器密码
sentinel auth-pass mymaster ******
启动
./redis-server.exe sentinel.conf --sentinel
哨兵会自动寻找从数据库并将信息加到之前的配置文件sentinel.conf
使主数据库宕机
在6379客户端输入shutdown关闭服务
一段时间后哨兵重新选举主数据库,自动修改配置文件内容。
多哨兵
这里设置3个,一般为奇数个2n+1,投票数为n+1,即2
密码主从数据库要一样
关闭保护模式,否则哨兵之间无法通信,在多哨兵模式下,比如3个哨兵,只有当投票数为2的情况下才选举成功,哨兵之间无法通信投票数只会为1,无法完成选举;所以单哨兵不关闭保护模式也是可以正常工作的
sentinel.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster ******
新建其他两个的配置文件sentinel26380.conf sentinel26381.conf 只需改变哨兵端口号为不一样的数字
其他相关参数(可省)
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
#down-after-milliseconds:
#超过多少毫秒跟一个redis实例断了连接,哨兵就可能认为这个redis实例挂了。这个值小于1s,哨兵每隔down-after-milliseconds向数据库和其他哨兵发送一次ping命令,大于1s,哨兵每隔1s发送一次ping。
#parallel-syncs:
#新的master被切换之后,同时有多少个slave被切换到去连接新master,重新做同步,数字越低,花费的时间越多。假设redis是1个master,4个slave,然后master宕机了,4个slave中有1个切换成了master,剩下3个slave就要挂到新的master上面去,这个时候:
如果parallel-syncs是1,那么3个slave,一个一个地挂接到新的master上面去,1个挂接完,而且从新的master sync完数据之后,再挂接下一个;
如果parallel-syncs是3,那么一次性就会把所有slave挂接到新的master上去 。
#failover-timeout:
#执行故障转移的timeout超时时长。
分别启动哨兵
./redis-server.exe sentinel.conf --sentinel
使主数据库宕机
pid为19464的哨兵首先发现主数据库宕机,接着13676也发现主数据库宕机,于是投票通过,开始哨兵头选举,第一个发现的哨兵当选,负责恢复故障,端口号为6379数据库成为新的主数据库。
选举原理
领头哨兵选举:
1.发现主数据库客观下线的哨兵(A)向其他哨兵发送命令,要求对方选自己成为leader。
2.如果目标哨兵没有选过其他人,则会同意A当选。
3.A发现有超过半数且超过设置的quorum投票数的哨兵同意(保证最多一个当选),则A成当选。
4.若有多个哨兵节点同时参选,可能会没有任何哨兵成功当选,将会重新选举。
新主数据库选择按如下顺序:
1.所有在线数据库中优先级最高的。
2.如有多个优先级最高数据库,则按复制的命令偏移量越大越优先(复制越完整)。
3.若都一样,按运行Id最小的优先。
20210204 对该博文做了一些补充,因为发现过了几个月,有些地方自己写的自己都看不明白了。