java redis多主多备_java 集成Redis 一主多从

1、测试代码如下:

public static voidmain(String[] args) {

Set sentinels = new HashSet();

sentinels.add("118.25.7.111:26379");

sentinels.add("118.25.7.111:26380");

sentinels.add("118.25.7.111:26381");

String clusterName= "mymaster";//此处添加密码

String password = "foo";//建立连接池配置参数

JedisPoolConfig config = newJedisPoolConfig();

config.setMaxIdle(50);//设置最小空闲数

config.setMinIdle(8);

config.setMaxWaitMillis(10000);

config.setTestOnBorrow(true);

config.setTestOnReturn(true);//Idle时进行连接扫描

config.setTestWhileIdle(true);//表示idle object evitor两次扫描之间要sleep的毫秒数

config.setTimeBetweenEvictionRunsMillis(30000);//表示idle object evitor每次扫描的最多的对象数

config.setNumTestsPerEvictionRun(10);//表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义

config.setMinEvictableIdleTimeMillis(60000);

JedisSentinelPool redisSentinelJedisPool= newJedisSentinelPool(clusterName,sentinels,config,password);

Jedis jedis= null;try{

jedis=redisSentinelJedisPool.getResource();

jedis.set("key", "aaa");

System.out.println(jedis.get("key"));

System.out.println(jedis.get("bbb"));

}catch(Exception e) {

e.printStackTrace();

}finally{//redisSentinelJedisPool.returnResource(jedis);

jedis.close();

}

redisSentinelJedisPool.close();

}

问题:

1、-DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command ‘CONFIG SET protected-mode no‘ from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to ‘no‘, and then restarting the server. 3) If you started the server manually just for testing, restart it with the ‘--protected-mode no‘ option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

解决:此处是因为sentinel的保护模式开启(默认)导致的,在sentinel对应的配置文件中将其关闭即可,即

#关闭保护模式

protected-mode no

2、redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

at redis.clients.util.Pool.getResource(Pool.java:53)

at redis.clients.jedis.JedisSentinelPool.getResource(JedisSentinelPool.java:209)

at com.ww.wwta.config.client.RedisClusterClient.main(RedisClusterClient.java:92)

Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect

at redis.clients.jedis.Connection.connect(Connection.java:207)

at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)

at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)

at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)

at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)

at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:433)

at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:362)

at redis.clients.util.Pool.getResource(Pool.java:49)

... 2 more

解决:未将对应的主服务的端口加入防火墙,将设置端口加入防火墙即可,即

firewall-cmd --permanent --zone=public --add-port=26380/tcp

firewall-cmd --reload

查看是否已加入:

firewall-cmd --permanent --zone=public --list-ports

3、连接127.0.0.1:6780连接拒绝

需将sentinel配置sentinel monitor mymaster 127.0.0.1 6380 2 -> sentinel monitor mymaster 118.25.7.111 6380 2

原文:https://www.cnblogs.com/kingsonfu/p/10140271.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值