redis哨兵模式搭建redis-sentinel

redis哨兵模式实现redis高可用的解决方案,最低要求三个sentinel监控主从节点
操作系统: centos6.8
redis版本:redis-4.0
这里使用三台linux服务器搭建

到redis官网下载redis4.0到三台服务器
也可以选择5.0版本使用,这里使用4.0

#下载编译所需环境
yum -y install gcc gcc-c++

cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar -xvf redis-4.0.14.tar.gz
cd redis-4.0.14
make && make install

这里编译之后就可以了 redis目录是/usr/local/redis-4.0.14

创建配置文件
分别在三个服务器上进行操作

mkdir -p /opt/redis/redis-cluster
mkdir -p /opt/redis/redis-sentinel
cp redis-7001.conf /opt/redis/redis-cluster
cp sentinel-8001.conf /opt/redis/redis-sentinel

redis配置文件

# 守护进程模式
daemonize yes
#pid路径
pidfile "/opt/redis/redis-cluster/redis-7001.pid"
# 监听端口
port 7001
# 一个客户端空闲多少秒后关闭连接(0代表禁用,永不关闭)
timeout 30
# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK
tcp-keepalive 60
# 指定服务器调试等级
# 可能值:
# debug (大量信息,对开发/测试有用)
# verbose (很多精简的有用信息,但是不像debug等级那么多)
# notice (适量的信息,基本上是你生产环境中需要的)
# warning (只有很重要/严重的信息会记录下来)
loglevel notice
# 指明日志文件名
logfile "/opt/redis/redis-cluster/redis7001.log"
# 设置数据库个数
databases 8

# 会在指定秒数和数据变化次数之后把数据库写到磁盘上
# 900秒(15分钟)之后,且至少1次变更
# 300秒(5分钟)之后,且至少10次变更
# 60秒之后,且至少10000次变更
save 900 1
save 300 10
save 60 10000

# 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作
# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难
stop-writes-on-bgsave-error yes

# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象
rdbcompression yes

# 版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠。
rdbchecksum yes

# 持久化数据库的文件名
dbfilename "dump-master.rdb"

# 工作目录
dir "/opt/redis/redis-cluster"

# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为可以有两种:
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,
# 可能是正常数据,或者是过时了的数据,也可能是还没获得值的空数据。
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步
# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
slave-serve-stale-data yes

# 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve的数据在同master同步之后将很容易被删除
slave-read-only no

# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY?
# 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave
# 上有延迟,Linux内核的默认配置会达到40毫秒
# 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使用更多的带宽
repl-disable-tcp-nodelay no

# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来
# 选择一个slave提升=升为master。
# 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,
# 哨兵将挑选优先级最小数字为10的slave。
# 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被
# 哨兵挑选提升为master
slave-priority 100

# 当master服务设置了密码保护时,slav服务连接master的密码
#masterauth qwe123

# 密码验证
# 警告:因为Redis太快了,所以外面的人可以尝试每秒150k的密码来试图破解密码。这意味着你需要
# 一个高强度的密码,否则破解太容易了
#requirepass qwe123
# redis实例最大占用内存,不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见: maxmemmory-policy)删除key
maxmemory 2gb

# 最大内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下面五个行为里选:
# volatile-lru -> 根据LRU算法删除带有过期时间的key。
# allkeys-lru -> 根据LRU算法删除任何key。
# volatile-random -> 根据过期设置来随机删除key, 具备过期时间的key。 
# allkeys->random -> 无差别随机删, 任何一个key。 
# volatile-ttl -> 根据最近过期时间来删除(辅以TTL), 这是对于有过期时间的key 
# noeviction -> 谁也不删,直接在写操作时返回错误。
maxmemory-policy volatile-lru

# 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。
appendonly no

从库配置文件上需要修改端口和日志文件路径

redis-sentinel配置文件

port 8001

# 守护进程模式
daemonize yes

#保护模式一定要关闭,否则将无法实现主备切换
protected-mode no

# 指明日志文件名
logfile "/opt/redis/redis-sentinel/sentinel1.log"

# 工作路径,sentinel一般指定/tmp比较简单
dir "/opt/redis/redis-sentinel"

sentinel deny-scripts-reconfig yes

# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor MyMaster 10.65.213.18 7002 2

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。这里是3s
sentinel down-after-milliseconds MyMaster 3000

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout MyMaster 10000

# 设置master和slaves验证密码 
#sentinel auth-pass MyMaster qwe123

依次启动redis sentinel

/usr/local/redis-4.0.14/src/redis-server /opt/redis/redis-cluster/redis-7001.conf
/usr/local/redis-4.0.14/src/redis-server /opt/redis/redis-cluster/redis-7002.conf
/usr/local/redis-4.0.14/src/redis-server /opt/redis/redis-cluster/redis-7003.conf

然后启动sentinel
/usr/local/redis-4.0.14/src/redis-sentinel  /opt/redis/redis-sentinel/sentinel-8001.conf
/usr/local/redis-4.0.14/src/redis-sentinel  /opt/redis/redis-sentinel/sentinel-8002.conf
/usr/local/redis-4.0.14/src/redis-sentinel  /opt/redis/redis-sentinel/sentinel-8003.conf
此处如果无报错哨兵模式就已经搭建完成
检测主从及哨兵
/usr/local/redis-4.0.14/src/redis-cli -p 7001
127.0.0.1:7001> info replication
# Replication
role:slave
master_host:10.65.213.18
master_port:7002
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:16170951
slave_priority:100
slave_read_only:0
connected_slaves:0
master_replid:5d593ee64a3aaaaaaaaaaaaaaaaaaaaaaaaaa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:16170951
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15122376
repl_backlog_histlen:1048576

/usr/local/redis-4.0.14/src/redis-cli -p 8001
127.0.0.1:8001> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=MyMaster,status=ok,address=10.65.213.18:7002,slaves=2,sentinels=3

可以试着kill掉主redis节点 测试是否会自动切换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
搭建Redis哨兵模式,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Redis。如果没有安装,可以使用以下命令进行安装: ``` sudo apt-get update sudo apt-get install redis-server ``` 2. 创建三个配置文件,分别为redis-sentinel.conf、redis-master.conf和redis-slave.conf。 3. 在redis-master.conf中,配置Redis主节点的相关信息,包括端口号、绑定IP和密码等,如下所示: ``` port 6379 bind 127.0.0.1 requirepass your_password ``` 4. 在redis-slave.conf中,配置Redis从节点的相关信息,如下所示: ``` port 6380 bind 127.0.0.1 requirepass your_password slaveof 127.0.0.1 6379 ``` 5. 在redis-sentinel.conf中,配置Redis哨兵的相关信息,如下所示: ``` port 26379 sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 180000 sentinel auth-pass mymaster your_password ``` 6. 启动Redis主节点、从节点和哨兵节点。分别使用以下命令启动: ``` redis-server redis-master.conf redis-server redis-slave.conf redis-sentinel redis-sentinel.conf --sentinel ``` 7. 现在,你已经成功搭建Redis哨兵模式。你可以通过向Redis主节点写入数据,然后查看从节点是否同步数据来验证是否正常工作。 请注意,以上步骤仅供参考,具体的配置和命令可能会因你的环境而有所不同。确保你按照自己的需求进行相应的配置和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪兽在此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值