解决方案
解决方案一
① 概念介绍
公网ip:就是任意两台连接了互联网的电脑可以互相ping ip
,能够通的ip
内网ip:只是在内网中使用无法与外网连接的ip
②问题背景
在腾讯云上搭建的一个redis集群,集群启动后
可以看到启动节点对应的集群中的ip是内网ip10.0.8.6
正是这个问题造成了上诉问题。
③造成问题原因
在搭建集群的过程中.conf配置文件中的一个属性cluster-config-file nodes-9001.conf
,所对应的文件nodes-9001.conf
,它是在创建集群中生成的,路径是和启动集群的配置文件是同一位置
打开其中一个文件,可以其中一个对应的节点ip是内网ip10.0.8.6
正是这个原因造成了,获取不到集群ip节点
④解决方案
-
将集群节点kill掉
找到进程号
ps -ef|grep redis
将对应的节点进程号kill掉
kill -9 3839 3845 3874 4018 4120 4194
-
更改
nodes-9001.conf
文件中内网ip10.0.8.6
值
这里因为是集群可以将所有node文件都取出来,在外面更改完成后,在放回到此目录下 -
重新启动redis服务
redis-server /usr/local/redis-7.0.2/myredis-config/redis9001.conf redis-server /usr/local/redis-7.0.2/myredis-config/redis9002.conf redis-server /usr/local/redis-7.0.2/myredis-config/redis9003.conf redis-server /usr/local/redis-7.0.2/myredis-config/redis9004.conf redis-server /usr/local/redis-7.0.2/myredis-config/redis9005.conf redis-server /usr/local/redis-7.0.2/myredis-config/redis9006.conf
-
检验redis集群启动是否正常
- 登录redis节点
redis-cli -c -p 9001
如果redis配置了密码,需要输入
auth 密码
2. 查看Redis集群状况cluster nodes
可以看到已经没有内网ip在出现了
⑤ 附
搭建redis集群中的配置文件
<!-- redis集群配置 集群模式 -->
<bean class="org.springframework.data.redis.connection.RedisClusterConfiguration" id="redisClusterConfiguration">
<property name="maxRedirects" value="6"></property>
<property name="clusterNodes">
<set>
<!--注意这里主从必须交替配置-->
<!--例如43.138.78.17:9001 为master ,43.138.78.17:9006 是slave-->
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="43.138.78.17"></constructor-arg>
<constructor-arg name="port" value="9001"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="43.138.78.17"></constructor-arg>
<constructor-arg name="port" value="9006"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="43.138.78.17"></constructor-arg>
<constructor-arg name="port" value="9002"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="43.138.78.17"></constructor-arg>
<constructor-arg name="port" value="9004"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="43.138.78.17"></constructor-arg>
<constructor-arg name="port" value="9003"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="43.138.78.17"></constructor-arg>
<constructor-arg name="port" value="9005"></constructor-arg>
</bean>
</set>
</property>
</bean>
<!-- 配置Jedis连接池 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="1024" />
<property name="maxIdle" value="200" />
<property name="MaxWaitMillis" value="1000" />
<property name="testOnBorrow" value="true" />
</bean>
<!-- jedis连接工厂 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!-- <property name="password" value="2wsx1qaz" />-->
<property name="database" value="0" />
<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
<constructor-arg name="clusterConfig" ref="redisClusterConfiguration"/>
<property name="timeout" value="5000" />
</bean>