redis哨兵搭建

redis高可用架构的三种方式

  • 主从复制(master slave)
    master提供读写,并且通过【全量复制 增量复制】方式把数据同步到从slave。当master挂了之后,没有自动选举新master的功能,只能人工干预,这段时间内不能提供服务,缺点很明显。
  • 哨兵
    哨兵是一个独立的进程,在生产环境上可以把它和redis实例分别部署在不同的机器。原理是,哨兵发送命令,等待redis服务器响应,从而实现监控redis服务器。
    哨兵的作用:
    1.监控多个redis服务
    2.当发现master挂了之后,执行故障转移。然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
  • 集群

搭建redis哨兵步骤

redis实例

 redis-master 192.168.127:6379
 redis-slave1 192.168.127:6001
 redis-slave2 192.168.127:6002

master-redis.conf

#为了测试方便关闭主机绑定
#bind 127.0.0.1 ::1
#关闭保护模式
protected-mode no
# 设置密码
requirepass 123456
#启用后台启动
daemonize yes
#设置master的密码
masterauth 123456

slave-redis.conf

#bind 127.0.0.1 ::1
#关闭保护模式
protected-mode no
# 设置密码
requirepass 123456
#设置master的ip和端口 老版本的使用 【slaveof <masterip> <masterport>】
#redis-5.0.4版本的使用下面的方式配置,其他版本自行查阅官方文档
replicaof <masterip> <masterport>
#设置master的密码
masterauth 123456
#分别把两个slave的端口设置为 6001 6002
port 6001
#启用后台启动
daemonize yes

分别在redis-master/bin redis-slave1/bin redis-slave2/bin下执行这个命令来启动redis服务./redis-server ../redis.conf,启动完后在redis-master/bin下执行./redis-cli -a 123456 -p 6379,这样我们就用客户端连接到了服务端,然后执行info replication,查看主从的相关配置:
master主从算是搭建好了,下来我们搭建哨兵,实现故障转移。

sentinel实例

sentinel1 192.168.127:20001
sentinel1 192.168.127:20002
sentinel1 192.168.127:20003

sentinel.conf

#修改端口
port 20001
#设置要监控的master的信息【sentinel monitor <master-name> <ip> <redis-port> <quorum>】
sentinel monitor mymaster 192.168.127.128 6379 2
# 设置master的密码【sentinel auth-pass <master-name> <password>】
sentinel auth-pass mymaster 123456
# 关闭保护模式
protected-mode

分别在sentinel1/bin sentinel2/bin sentinel3/bin 下执行./redis-sentinel ../sentinel.conf这个命令来启动哨兵。启动成功如下图所示:
snetinel

主从切换

刚开始端口为6379是主服务器,现在我们执行./redis-cli -a 123456 -p 6379 shutdown这个命令把master挂掉,看看是否能实现主从切换。
查看sentinel的启动日志,我们发现6001被选举为新的master了,如下图:
sentinel
我们去6001,执行info replication命令,看到确实变成了master
6001如果我们把挂到的6379 master启动起来,它会当成slave加入进来,如下图所示
6379

使用jedis客户端连接redis哨兵

package com.demo;

import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

public class JedisConnectionUtils {
	static JedisSentinelPool jedisSentinelPool=null;
	
	static{
		JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
		Set<String> sentinels=new HashSet<String>();
		sentinels.add("192.168.127.128:20001");
		sentinels.add("192.168.127.128:20002");
		sentinels.add("192.168.127.128:20003");
		jedisSentinelPool=new JedisSentinelPool("mymaster", sentinels,jedisPoolConfig,5000,"123456");
	}
	
	public static Jedis getJedis() {
		return jedisSentinelPool.getResource();
	}
}

今天redis的哨兵搭建就到这来结束了,大神勿喷,在留言区多交流,谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值