阿里云centos7 集群版redis5.0.2 多虚拟机

单机版:
https://blog.csdn.net/qq_41430431/article/details/105159805
集群版:
https://blog.csdn.net/qq_41430431/article/details/105162001

以下的密码对应:
redis.conf->requirepass xxx(你的密码)

根据单机版之后进行操作

1.拷贝单机版内容

cp bin/ ../redis-cluster/redis01 -r(位置:/usr/local/redis)

2.删除多余文件,清空数据库

如果没有进行单机测试的话,直接进行2.1就足够了

2.1删除节点下aof、rdb等本地备份文件

节点下aof、rdb等本地备份文件删除;(路径:redis-cluster/redis01)
在这里插入图片描述

2.2清空之前单机版本内的所有数据


如果/etc/hosts内容如下:

::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
公网IP:dd8vqweiojxd48mZ dd8vqweiojxd48mZ 

以下所有:私网IP->127.0.0.1


/redis-cli -h 私网IP -p 端口 -a xxx(你的密码)
私网IP:7001>  flushdb      #清空当前数据库

3.修改redis.conf

#修改端口号
port 7001
#启用集群
cluster-enabled yes
#请求密码
requirepass xxx(你的密码)
#绑定IP
bind 0.0.0.0

4.复制redis02-06

cp redis01 redis02 -r
cp redis01 redis03 -r
cp redis01 redis04 -r
cp redis01 redis05 -r
cp redis01 redis06 -r

5.修改redis端口号

修改所有redis.conf的端口号(7001-7006)

6.编辑脚本

6.1 启动脚本

vim start-all.sh

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

6.2 停止脚本

vim shutdown-all.sh

redis01/redis-cli -p 7001 -a xxx(你的密码) shutdown
redis01/redis-cli -p 7002 -a xxx(你的密码) shutdown
redis01/redis-cli -p 7003 -a xxx(你的密码) shutdown
redis01/redis-cli -p 7004 -a xxx(你的密码) shutdown
redis01/redis-cli -p 7005 -a xxx(你的密码) shutdown
redis01/redis-cli -p 7006 -a xxx(你的密码) shutdown

分别给脚本赋予用户执行权限

chmod u+x  shutdown-all.sh
chmod u+x  start-all.sh

执行start-all.sh
查看:ps aux|grep redis

[root@iZ8vkqg41egvdio redis-cluster]# ps aux|grep redis
root     31517  0.0  0.4 163096  7716 ?        Ssl  15:05   0:01 ./redis-server 0.0.0.0:7001 [cluster]
root     31519  0.0  0.4 156440  7736 ?        Ssl  15:05   0:01 ./redis-server 0.0.0.0:7002 [cluster]
root     31521  0.0  0.4 156440  7724 ?        Ssl  15:05   0:01 ./redis-server 0.0.0.0:7003 [cluster]
root     31523  0.0  0.4 156440  7984 ?        Ssl  15:05   0:01 ./redis-server 0.0.0.0:7004 [cluster]
root     31531  0.0  0.4 156440  7984 ?        Ssl  15:05   0:01 ./redis-server 0.0.0.0:7005 [cluster]
root     31536  0.0  0.4 156440  7984 ?        Ssl  15:05   0:01 ./redis-server 0.0.0.0:7006 [cluster]

7.防火墙

7.1 添加端口:

firewall-cmd --zone=public --add-port=700*/tcp --permanent(*代表1-6

7.2 重启防火墙

systemctl reload firewalld.service

7.3 查看防火墙

firewall-cmd --zone=public --list-ports
出现: 7001/tcp 7002/tcp 7003/tcp 7004/tcp 7005/tcp 7006/tcp

8.复制redis-cli

#位置:/root/redis-5.0.2/src
#如果没有redis-cli文件,在redis-5.0.2内使用"make",就会在src内出现了。
cp redis-cli /usr/local/redis-cluster/

9.执行

./redis-cli --cluster create 私有IP:7001 私有IP:7002 私有IP:7003 私有IP:7004 私有IP:7005 私有IP:7006 --cluster-replicas 1 -a xxx(你的密码)

10.开放安全组

开放三个就足够了,根据你的集群主从关系。
在这里插入图片描述

软件测试

阿里云服务器:

./redis-cli -h 私有IP -p 7001 -a xxx(你的密码) -c(由于是集群要-c)

[root@iZ8vkqg41egvdio redis-cluster]# ./redis-cli -h 私有IP -p 7001 -a xxx(你的密码) -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
私有IP:7001> set asd 111
-> Redirected to slot [7539] located at 私有IP:7002
OK
私有IP:7002> set aaqw 222
-> Redirected to slot [13861] located at 私有IP:7003

远程:
配置:
在这里插入图片描述
在这里插入图片描述

代码测试

开放:

安全组内要开发端口,即redis端口+10000,否则会报错。
在这里插入图片描述

依赖:

<!-- Redis客户端 -->
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.9.0</version>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
	<version>2.4.2</version>
</dependency>

错误:redis JedisConnectionException: Could not get a resource from the pool

说明:我在本机测试远程连接,使用 applicationContext-redis.xml加载数据,如果是读get成功、如果是set、或者是lpush是报上面的错误。但是我在java内创建实例,就可以进行远程操作,这个问题,我也不知道为什么。所以我就不理会了,等我以后工作了,去问问别人。

测试代码

//import java.io.IOException;
//import java.util.HashSet;
//import java.util.Set;
//
//import org.junit.Test;
//import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.test.context.ContextConfiguration;
//import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
//
//import com.muyou.common.redis.JedisClient;
//
//import redis.clients.jedis.HostAndPort;
//import redis.clients.jedis.JedisCluster;
//import redis.clients.jedis.JedisPoolConfig;
//
//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration("classpath:spring/applicationContext-redis.xml")
//public class testRedis {
//
//	@Autowired
//	private JedisClient jedisClient;
//	
//	@Test
//	public void testJCluster() {
//		System.out.println(jedisClient);
//		System.out.println(jedisClient.get("qwe"));
//		jedisClient.set("qwe", "qqq");
//	}
//
//	
//	@Test
//    public void testJedisCluster() throws IOException {
//        /*redis.clients.jedis.JedisCluster.JedisCluster(Set<HostAndPort> nodes)*/
//        Set<HostAndPort> nodes = new HashSet<>();
//        String clusterHost = "公网IP";
//        nodes.add(new HostAndPort(clusterHost, 7001));
//        nodes.add(new HostAndPort(clusterHost, 7002));
//        nodes.add(new HostAndPort(clusterHost, 7003));
//        nodes.add(new HostAndPort(clusterHost, 7004));
//        nodes.add(new HostAndPort(clusterHost, 7005));
//        nodes.add(new HostAndPort(clusterHost, 7006));
//        
//        JedisPoolConfig jedisConfig = new JedisPoolConfig();
//        JedisCluster cluster  = new JedisCluster(nodes,2000,2000,3,"zzz111",jedisConfig);
////        向redis集群中保存数据
//        cluster.set("name", "EEE");
//        cluster.lpush("zaq", "99", "222");
//        System.out.println(cluster);
//        String name = cluster.get("name");
//        System.out.println(555+name);
//        cluster.close();
//    }
//	
//}

配置

redis.host =公网IP
redis.port1=7001
redis.port2=7002
redis.port3=7003
redis.port4=7004
redis.port5=7005
redis.port6=7006
redis.clusterpassword=密码

applicationContext-redis.xml

<!-- 连接池配置 -->
	<!-- 配置jedis连接池 -->
	<bean id="jedisPoolConfig"
		class="redis.clients.jedis.JedisPoolConfig">
		<!-- 最大连接数 -->
		<property name="maxTotal" value="30" />
		<!-- 最大空闲连接数 -->
		<property name="maxIdle" value="10" />
		<!-- 每次释放连接的最大数目 -->
		<property name="numTestsPerEvictionRun" value="1024" />
		<!-- 释放连接的扫描间隔(毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<!-- 连接最小空闲时间 -->
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
		<property name="maxWaitMillis" value="1500" />
		<!-- 在获取连接的时候检查有效性, 默认false -->
		<property name="testOnBorrow" value="true" />
		<!-- 在空闲时检查有效性, 默认false -->
		<property name="testWhileIdle" value="false" />
		<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
		<property name="blockWhenExhausted" value="false" />
	</bean>

	<!-- jedis集群版配置 -->
	<bean id="hostport1" class="redis.clients.jedis.HostAndPort">
		<constructor-arg name="host" value="${redis.host}" />
		<constructor-arg name="port" value="${redis.port1}"
			type="int" />
	</bean>
	<bean id="hostport2" class="redis.clients.jedis.HostAndPort">
		<constructor-arg name="host" value="${redis.host}" />
		<constructor-arg name="port" value="${redis.port2}"
			type="int" />
	</bean>
	<bean id="hostport3" class="redis.clients.jedis.HostAndPort">
		<constructor-arg name="host" value="${redis.host}" />
		<constructor-arg name="port" value="${redis.port3}"
			type="int" />
	</bean>
	<bean id="hostport4" class="redis.clients.jedis.HostAndPort">
		<constructor-arg name="host" value="${redis.host}" />
		<constructor-arg name="port" value="${redis.port4}"
			type="int" />
	</bean>
	<bean id="hostport5" class="redis.clients.jedis.HostAndPort">
		<constructor-arg name="host" value="${redis.host}" />
		<constructor-arg name="port" value="${redis.port5}"
			type="int" />
	</bean>
	<bean id="hostport6" class="redis.clients.jedis.HostAndPort">
		<constructor-arg name="host" value="${redis.host}" />
		<constructor-arg name="port" value="${redis.port6}"
			type="int" />
	</bean>

	<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg name="jedisClusterNode">
			<set>
				<ref bean="hostport1" />
				<ref bean="hostport2" />
				<ref bean="hostport3" />
				<ref bean="hostport4" />
				<ref bean="hostport5" />
				<ref bean="hostport6" />
			</set>
		</constructor-arg>
		<constructor-arg name="connectionTimeout" value="2000" />
		<constructor-arg name="soTimeout" value="2000" />
		<constructor-arg name="maxAttempts" value="3" />
		<constructor-arg name="password" value="${redis.clusterpassword}" />
		<constructor-arg name="poolConfig">
			<ref bean="jedisPoolConfig" />
		</constructor-arg>
	</bean>

	<bean id="jedisClientCluster"
		class="com.muyou.common.redis.JedisClientCluster">
	</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值