主从服务器如何自动切换,redis集群主从切换,jedis客户端如何自动切换访问

大家好,我是redis学习的新人,今天写这篇文章,希望记录一下最近的学习 其实到现在我也不不知道redis具体能做什么,大概是缓存,这个暂时不管,先实现我想要的结果。 这边如何启动redis不讲了,请参考:http://www.runoob.com/redis/redis-tutorial.html redis是支持集群的,所以需要配置redis集群,总的来说,将下载的redis文件复制多份, 修改一下配置就可以实现集群,我自己的总结: 我把我的实例打了个包,希望对大家有帮助

主从配置:

主服务器中的设置:

1:修改bind参数:绑定的服务器地址 (本地:127.0.0.1)

从服务器配置

1. 修改bing参数:绑定服务器地址 (注:不一定与主服务器在一起)

2. 修改port参数:端口号 (注:如果在同一个服务器上,端口号不同来区分)

3. slaveof参数: 设置主服务器的地址以及端口号(设置master的Host以及Port) [注意:

需要顶格写,不能有空格] ]

4. 如果主服务器设置了密码,从服务器需要修改masterauth参数

配置好了主从服务器(从服务器只读),尝试一下,确实可以实现值的同步

List shards = new ArrayList();

JedisShardInfo shard1 = new JedisShardInfo("127.0.0.1", "6379");

JedisShardInfo shard2 = new JedisShardInfo("127.0.0.1", "6380");

shards.add(shard1);

shards.add(shard2);

JedisPoolConfig jpc = new JedisPoolConfig();

jpc.setMaxIdle(10);

jpc.setMaxTotal(30);

jpc.setMaxWaitMillis(3*1000);

ShardedJedisPool sjPool = new ShardedJedisPool(jpc, shards);

ShardedJedis jedis = sjPool.getResource();

jedis.set("temp", "heeloworld");

System.out.println("----"+jedis.get("temp")+"-----");

但是这样还不够,毕竟集群真正作用是一个服务器挂了,其他的可以接着用 网上又看到“哨兵”(Redis-Sentinel),详情请见:https://segmentfault.com/a/1190000002680804 因此自己做了一些尝试,确实可以实现该功能。

1.之前已经准备好了主从服务器多个,每个里面添加一个sentinel.conf的文件

2.文件的内容是

####master sentinel.conf

##sentinel实例之间的通讯端口 default 26379

port 36379

####sentinel需要监控的master信息:.

####应该小于集群中slave的个数,只有当至少个sentinel实例提交"master失效" 才会认为master为ODWON("客观"失效) .

sentinel myid 45e995cdd93d2db1e48d563c8b3a4f69caf03274

##**以下地址是主服务器地址,特别留意:主从切换后,此处的地址会改变哟**

sentinel monitor mymaster 127.0.0.1 6379 1

sentinel down-after-milliseconds mymaster 1000

sentinel config-epoch mymaster 10

接下来就展示一下我的例子

下两张图展示的是两个服务器,一个是6379端口一个是6380端口,

通过info replication命令,可以从role看出服务器的角色:master(主服务器),slave(从服务器)

再下面两张是启动sentinel监听的画面,所占用的端口可以修改sentinel.conf的port属性

d6707157ddce80e2571576f6703fa242.png

3a3bc9f0114c9e67521212873f08f1eb.png

主从服务器都启动,读写数据都没有问题

0030c913c2864783f68cbfc73714505f.png

这个时候,将主服务器关闭

e8f362f29977927204cbb2e1a34ee2c5.png

这个时候注意从服务器的role从slave变成了master

52a9436e4e6cf0c76fc7a71ff7d7b4ee.png

最后读取数据也没有问题,而且获取数据的服务器地址从6379,变成了6380,

说明我们的功能实现了,主从切换,客户端请求也切换到获取最新的主服务数据

477ba5726c76d54c057a52f839194c53.png

注意:想必大家也注意到我的代码中的问题,前面我是用的ShardedJedisPool对象请求数据,

但是到后来,代码里使用的JedisSentinelPool,为什么会有这样一个变化,

是因为ShardedJedisPool对象在主从服务器切换之后,就无法请求到数据了,

但是JedisSentinelPool就可以,具体原理我也不清楚。

最后,这是我的一点点看法,有不对的地方希望大家可以提示我,毕竟我了解的不多,

在这里希望大牛可以给我些指导,在项目中如何使用redis,有没有实例可以给我学习学习,谢谢大家!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值