linux环境的redis实现高可用以及使用哨兵实现高可用技术

序言

依然接着在实现上上篇redis分片技术的前提条件下

1.1 Redis分片中存在问题

说明:
	1.如果分片中的一个节点宕机,将会影响整个服务.
	2.采用分片技术,可能会出现数据负载不均现象.
	3.Redis分片没有数据的备份
1.2 结构划分
1. 6379主机
2. 6380 6381从机
1.3 配置3台主机
1.进入安装目录复制文件
    cp -r shards sentinel

在这里插入图片描述

2.修改三个sentinel的持久化文件名称

在这里插入图片描述
在这里插入图片描述

将配置文件修改好之后,启动服务器.

在这里插入图片描述

1.4 配置主从
1. 检查当前节点的状态
		info replication

在这里插入图片描述
此时默认的条件下,redis节点都是主机.

2.执行挂载命令
	SLAVEOF 192.168.197.132 6379

分别将6380,6381挂载到6379,当6379的从机

在这里插入图片描述

3.主从测试
	在redis主机中set数据,检查从机中是否有同步数据.

在这里插入图片描述

2.1 哨兵实现高可用

2.2 调用原理

在这里插入图片描述

2.3 配置哨兵
1.复制哨兵的文件
		 cp sentinel.conf sentinel

在这里插入图片描述
2.关闭保护模式
在这里插入图片描述

3.编辑监控主机的信息
	sentinel monitor mymaster 127.0.0.1 6379 2
	mymaster:代表当前主机信息 ip:端口

3.1 哨兵投票的票数
在这里插入图片描述

4.修改推选时间 改为10秒

在这里插入图片描述

5. 修改推选超时时间
		如果20之内没有完成推选,则重新推选

在这里插入图片描述

2.4 哨兵高可用测试
1.启动命令
		redis-sentinel sentinel.conf

在这里插入图片描述
通过日志可以看见,redis主机是6379

2.将6379宕机,检查redis哨兵是否会自动推选.

在这里插入图片描述
日志发现,哨兵推选了6381为主机

进入6381端口库查看
在这里插入图片描述

3.1 多个哨兵实现redis高可用

3.1.1 准备多个哨兵配置文件
说明:将原有哨兵复制三份.名称分别为
	sentinel-6379.conf/sentinel-6380.conf/sentinel-6381.conf

在这里插入图片描述

3.1.2 修改哨兵配置文件

1.修改哨兵的端口
在这里插入图片描述

2.修改序列号,保证序列号不一样
在这里插入图片描述

3.修改选举票数
在这里插入图片描述

3.1.3 多个哨兵测试

分别启动多台哨兵.检查哨兵的状态.将redis主机宕机后,检查哨兵是否自动推选.程序是否正确.
用下面命令分别启动三台哨兵

redis-sentinel sentinel-6379.conf
redis-sentinel sentinel-6380.conf
redis-sentinel sentinel-6381.conf

日志可看见宕机主机6381后以后,现在推选6380为主机了
在这里插入图片描述

3.1.4 哨兵搭建策略
1.先配置主从结构
	主从结构搭建完成后,可实现数据的自动同步,并且维护各自的持久化文件.
2.编辑单台哨兵的配置文件.
3.扩展多台哨兵.
3.1.5 哨兵的优点
1.可以实现redis的高可用
2.对应调用者可以通过	哨兵链接当前主机

代码实现哨兵的测试

public class SentinelTest {
	
	public static void main(String[] args) {
		//1.定义池
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxTotal(1000);
		
		//2.将redis哨兵节点写入集合
		Set<String> sentinels = new HashSet<>();
		sentinels.add("192.168.197.132:26379");
		sentinels.add("192.168.197.132:26380");
		sentinels.add("192.168.197.132:26381");
		
		//3.定义连接池
		JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels,poolConfig);
		Jedis jedis = pool.getResource();
		jedis.set("2020", "今年是鼠年");
		System.out.println("输出内容是:"+jedis.get("2020"));
		pool.returnResource(jedis);
	}
}
输出内容

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值