1、服务节点说明
Master节点ip和端口为:127.0.0.1:6380
Slave节点ip和端口为:127.0.0.1:6381;127.0.0.1:6382
哨兵节点说明:127.0.0.1:26380;127.0.0.1:26381;127.0.0.1:26382
Redis哨兵集群拓扑图.png
2、配置主从模式
2.1、redis修改配置
2.1.1、Master的redis.conf
# 设置哪些IP可以连接redis-server,4个0表示全部[!!危险!!]
bind 127.0.0.1
port 6380
# 设置redis启动为后台守护进程
daemonize yes
# pidfile的路径(daemonize yes时,redis默认会把pid写入下面的文件)
pidfile /usr/local/redis-5.0.9/logs/redis_6380.pid
# 日志级别
loglevel notice
# 日志文件路径
logfile /usr/local/redis-5.0.9/logs/redis_6380.log
# 持久化数据存放的目录
dir /usr/local/redis-5.0.9/data/
# 本地客户端登录密码
requirepass 000000
# 主节点登陆密码
masterauth 000000
# 同时连接Redis服务的最大客户端数量(默认10000)
maxclients 10000
# 设置为后台启动
protected-mode no
2.1.2、Slave的redis.conf
Slave1的redis.conf
# 设置哪些IP可以连接redis-server,4个0表示全部[!!危险!!]
bind 127.0.0.1
port 6381
# 设置redis启动为后台守护进程
daemonize yes
# pidfile的路径(daemonize yes时,redis默认会把pid写入下面的文件)
pidfile /usr/local/redis-5.0.9-slave1/logs/redis_6381.pid
# 日志级别
loglevel notice
# 日志文件路径
logfile /usr/local/redis-5.0.9-slave1/logs/redis_6381.log
# 持久化数据存放的目录
dir /usr/local/redis-5.0.9-slave1/data/
# 本地客户端登录密码
requirepass 000000
# 主节点登陆密码
masterauth 000000
# 同时连接Redis服务的最大客户端数量(默认10000)
maxclients 10000
# 配置主从关系,只配置从节点!!!
slaveof 127.0.0.1 6380
# 设置为后台启动
protected-mode no
Slave2的redis.conf
# 设置哪些IP可以连接redis-server,4个0表示全部[!!危险!!]
bind 127.0.0.1
port 6382
# 设置redis启动为后台守护进程
daemonize yes
# pidfile的路径(daemonize yes时,redis默认会把pid写入下面的文件)
pidfile /usr/local/redis-5.0.9-slave2/logs/redis_6382.pid
# 日志级别
loglevel notice
# 日志文件路径
logfile /usr/local/redis-5.0.9-slave2/logs/redis_6382.log
# 持久化数据存放的目录
dir /usr/local/redis-5.0.9-slave2/data/
# 本地客户端登录密码
requirepass 000000
# 主节点登陆密码
masterauth 000000
# 同时连接Redis服务的最大客户端数量(默认10000)
maxclients 10000
# 配置主从关系,只配置从节点!!!
slaveof 127.0.0.1 6380
# 设置为后台启动
protected-mode no
2.2、启动主从模式Redis
# 启动redis
/usr/local/redis-5.0.9/bin/redis-server /usr/local/redis-5.0.9/etc/redis.conf
/usr/local/redis-5.0.9-slave1/bin/redis-server /usr/local/redis-5.0.9-slave1/etc/redis.conf
/usr/local/redis-5.0.9-slave2/bin/redis-server /usr/local/redis-5.0.9-slave2/etc/redis.conf
2.3、验证
2.3.1、查看进程
# 查看是否3个redis进程
ps -ef|grep redis|grep -v grep
2.3.2、登录查看
Master节点登录查看
# redis-cli登录redis服务查看
/usr/local/redis-5.0.9/bin/redis-cli -p 6380 -a 000000
# 查看主从状态
info replication
主从模式中的主节点信息.jpg
Slave1节点登录查看
# redis-cli登录redis服务查看
/usr/local/redis-5.0.9-slave1/bin/redis-cli -p 6381 -a 000000
# 查看主从状态
info replication
主从模式中slave1信息.jpg
Slave2节点登录查看
# redis-cli登录redis服务查看
/usr/local/redis-5.0.9-slave2/bin/redis-cli -p 6382 -a 000000
# 查看主从状态
info replication
主从模式中slave2信息.jpg
2.4、测试
2.4.1、Master设置
127.0.0.1:6380> set key 1
OK
2.4.2、Slave查看
127.0.0.1:6381> get key
"1"
127.0.0.1:6382> get key
"1"
127.0.0.1:6382> set key2 2
(error) READONLY You can't write against a read only replica
3、配置哨兵模式
3.1、Master上的sentinel.conf
# sentinel 使用的端口
port 26380
# 设置sentinel启动为后台守护进程
daemonize yes
# pidfile的路径(daemonize yes时,redis默认会把pid写入下面的文件)
pidfile /usr/local/redis-5.0.9/logs/redis-sentinel_26380.pid
# 日志文件路径
logfile /usr/local/redis-5.0.9/logs/redis-sentinel_26380.log
# 持久化数据存放的目录
dir /usr/local/redis-5.0.9/data/
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效.需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)
sentinel monitor master001 127.0.0.1 6380 2
# sentinel auth-pass <master-name> <password>
# 当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass master001 000000
# sentinel down-after-milliseconds <master-name> <milliseconds>
# 这个配置项指定需要多少时间无响应,一个master才会被这个sentinel主观地认为是不可用的.单位是毫秒,默认为30秒
sentinel down-after-milliseconds master001 10000
# sentinel parallel-syncs <master-name> <numslaves>
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用.可以通过将这个值设为1(默认就是1)来保证每次只有一个slave处于不能处理命令请求的状态
sentinel parallel-syncs master001 1
# sentinel failover-timeout <master-name> <milliseconds>
# failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel 将会认为此次failover失败,默认为3分钟,单位为毫秒
sentinel failover-timeout master001 180000
#是否拒绝重新配置通知脚本,默认拒绝(yes).
sentinel deny-scripts-reconfig yes
3.2、Slave的sentinel.conf
slave1的sentinel.conf
# sentinel 使用的端口
port 26381
# 设置sentinel启动为后台守护进程
daemonize yes
# pidfile的路径(daemonize yes时,redis默认会把pid写入下面的文件)
pidfile /usr/local/redis-5.0.9/logs/redis-sentinel_26381.pid
# 日志文件路径
logfile /usr/local/redis-5.0.9/logs/redis-sentinel_26381.log
# 持久化数据存放的目录
dir /usr/local/redis-5.0.9/data/
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效.需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)
sentinel monitor master001 127.0.0.1 6380 2
# sentinel auth-pass <master-name> <password>
# 当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass master001 000000
# sentinel down-after-milliseconds <master-name> <milliseconds>
# 这个配置项指定需要多少时间无响应,一个master才会被这个sentinel主观地认为是不可用的.单位是毫秒,默认为30秒
sentinel down-after-milliseconds master001 10000
# sentinel parallel-syncs <master-name> <numslaves>
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用.可以通过将这个值设为1(默认就是1)来保证每次只有一个slave处于不能处理命令请求的状态
sentinel parallel-syncs master001 1
# sentinel failover-timeout <master-name> <milliseconds>
# failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel 将会认为此次failover失败,默认为3分钟,单位为毫秒
sentinel failover-timeout master001 180000
#是否拒绝重新配置通知脚本,默认拒绝(yes).
sentinel deny-scripts-reconfig yes
slave2的sentinel.conf
# sentinel 使用的端口
port 26382
# 设置sentinel启动为后台守护进程
daemonize yes
# pidfile的路径(daemonize yes时,redis默认会把pid写入下面的文件)
pidfile /usr/local/redis-5.0.9/logs/redis-sentinel_26382.pid
# 日志文件路径
logfile /usr/local/redis-5.0.9/logs/redis-sentinel_26382.log
# 持久化数据存放的目录
dir /usr/local/redis-5.0.9/data/
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效.需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)
sentinel monitor master 127.0.0.1 6380 2
# sentinel down-after-milliseconds <master-name> <milliseconds>
# 这个配置项指定需要多少时间无响应,一个master才会被这个sentinel主观地认为是不可用的.单位是毫秒,默认为30秒
sentinel down-after-milliseconds master 10000
# sentinel parallel-syncs <master-name> <numslaves>
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用.可以通过将这个值设为1(默认就是1)来保证每次只有一个slave处于不能处理命令请求的状态
sentinel parallel-syncs master 1
# sentinel failover-timeout <master-name> <milliseconds>
# failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel 将会认为此次failover失败,默认为3分钟,单位为毫秒
sentinel failover-timeout master 180000
#是否拒绝重新配置通知脚本,默认拒绝(yes).
sentinel deny-scripts-reconfig yes
3.3、启动sentinel
# 启动redis
/usr/local/redis-5.0.9/bin/redis-sentinel /usr/local/redis-5.0.9/etc/sentinel.conf
/usr/local/redis-5.0.9-slave1/bin/redis-sentinel /usr/local/redis-5.0.9-slave1/etc/sentinel.conf
/usr/local/redis-5.0.9-slave2/bin/redis-sentinel /usr/local/redis-5.0.9-slave2/etc/sentinel.conf
3.4、验证
3.4.1、查看进程
# 查看是否6个redis进程
ps -ef|grep redis|grep -v grep
3.4.2、登录查看
登录查看
# redis-cli登录redis服务查看
/usr/local/redis-5.0.9/bin/redis-cli -p 26380 -a 000000
# 查看哨兵
info sentinel
3.5、测试
3.5.1、关闭Master(127.0.0.1:5671),查看Master是否变更
# 登录Master节点
/usr/local/redis-5.0.9/bin/redis-cli -p 6380 -a 000000
# 关闭
127.0.0.1:6380> shutdown
3.5.2、登录Slave的redis查看主从状态
# 登录slave1节点
/usr/local/redis-5.0.9-slave1/bin/redis-cli -p 6381 -a 000000
# 查看主从状态
info replication
127.0.0.1:6381> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6382,state=online,offset=162416,lag=0
master_replid:5dfa9dce3e68788817ba87645838956a502ff62f
master_replid2:c43446f5fb7a54e871a93a460cfbfc4cae58ff35
master_repl_offset:162550
second_repl_offset:11643repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:162550
# 登录slave1节点
/usr/local/redis-5.0.9-slave2/bin/redis-cli -p 6382 -a 000000
# 查看主从状态
info replication
127.0.0.1:6382> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:197896
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:5dfa9dce3e68788817ba87645838956a502ff62f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:197896
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:12202
repl_backlog_histlen:185695
3.5.3、查看读写是否同步
# set值
127.0.0.1:6381> set key1 2
OK
# 查看值
127.0.0.1:6382> get key1
"2"