说明: 资源有限,用6个端口模拟6台主机(6661-6666),系统版本centos7,建议make install 指定目录,单个安装下面博客网址,
查询redis服务启动进程 ps -ef|grep redis
安装中遇到的问题:1.bind绑定:会拦截ip,2. 注释掉bind后会出现保护问题,设置:protected-mode no,3 集群创建时,一直等待join问题,解决很长时间,写了一个启动脚本,重启后突然好了(建议当出现join看服务是否全部启动,如果服务没问题,建议重启虚机)
补充说明3问题: 我已经关闭了防火墙,出现3问题首先检查端口是否能允许外网访问,和集群总线端口是否允许访问(redis启动端口+10000)
- 首先编译安装单个redis(采用指定安装位置方式),如果不会,请参考我的另一篇文章
https://blog.csdn.net/weixin_44588176/article/details/91568513 - 修改配置文件(redis.conf)
daemonize yes //设置守护进程
pidfile /var/run/redis-6661.pid
port 6661
#bind 127.0.0.1 (我注释掉了,拦截访问的ip)
dir /data/redis/6661
cluster-enabled yes //启动集群
##默认保存在dir下
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes //可以不改
protected-mode no yes 改为no 不然当bind被注掉后会出现下面的错误
- 其余5个服务重复1,2步骤,启动服务
- 将6个Redis加入一个集群(网上教程这一步安装会有点问题,步骤5将解决)
./redis-trib.rb create --replicas 1 192.168.25.128:6661 192.168.25.128:6662 192.168.25.128:6663 192.168.25.128:6664 192.168.25.128:6665 192.168.25.128:6666
报./redis-trib.rb: 没有那个文件或目录,说明缺少ruby环境,安装成功后,用
find -name redis-trib.rb 找到该文件,在该文件目录下启动命令
yum install ruby
yum install rubygems
- 运行4命令创建集群会出现如下问题
redis-cli --cluster create 192.168.25.128:6661 192.168.25.128:6662 192.168.25.128:6663 192.168.25.128:6664 192.168.25.128:6665 192.168.25.128:6666 --cluster-replicas 1
-
提示一直在join中,不知道怎么的,我重启虚拟机就好了
-
建议写一个启动脚本启动
启动redis脚本,建一个start.sh(注意不能再win7里面建好传到linux上去,会报错)
,添加执行权限chmod +x start.sh
cd /zhou/redis-cluster/redis6661/redis/bin
./redis-server redis.conf
cd /zhou/redis-cluster/redis6662/redis/bin
./redis-server redis.conf
cd /zhou/redis-cluster/redis6663/redis/bin
./redis-server redis.conf
cd /zhou/redis-cluster/redis6664/redis/bin
./redis-server redis.conf
cd /zhou/redis-cluster/redis6665/redis/bin
./redis-server redis.conf
cd /zhou/redis-cluster/redis6666/redis/bin
./redis-server redis.conf
- 成功
- 测试代码
package test.db.redis;
import java.util.HashSet;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class RedisClusterDemo {
public static void main(String[] args) {
//集群
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.25.128",6661));
nodes.add(new HostAndPort("192.168.25.128",6662));
nodes.add(new HostAndPort("192.168.25.128",6663));
nodes.add(new HostAndPort("192.168.25.128",6664));
nodes.add(new HostAndPort("192.168.25.128",6665));
nodes.add(new HostAndPort("192.168.25.128",6666));
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("cluster","我们六个人");
String value = cluster.get("cluster");
System.out.println(value);
}
}