单机版:
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>