!!!服务器版本为Centos7.3 阿里云
本文档仅为单个服务器下,创建六个不同端口号的reids服务模拟集群环境。
1. 下载redis5.0
进入到usr/local目录,执行下载命令下载redis压缩包
cd usr/local
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
2.解压后安装
解压redis-5.0.0.tar.gz压缩文件,然后到解压后的目录redis-5.0.0,使用命令安装。
tar -zxvf redis-5.0.0.tar.gz
cd redis-5.0.0
make && make install
cd …/
mkdir redis_cluster
cd redis_cluster
mkdir 7000 7001 7002 7003 7004 7005
cp /usr/local/redis-5.0.0/redis.conf ./7000
cp /usr/local/redis-5.0.0/redis.conf ./7001
cp /usr/local/redis-5.0.0/redis.conf ./7002
cp /usr/local/redis-5.0.0/redis.conf ./7003
cp /usr/local/redis-5.0.0/redis.conf ./7004
cp /usr/local/redis-5.0.0/redis.conf ./7005
2. 修改redis.cong配置文件
分别进入到六个文件夹下,修改以下字段,这里建议使用winscp工具直接在工具中修改。
protected-mode设置为yes则为保护模式,redis需要设置密码才能远程访问,如果为no则不需要设置,本文主要是密码模式下的文档。
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002...
port 7000 //端口7000,7001,7002...
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002...
cluster-node-timeout 15000 //去掉注释# 请求超时时间 默认15s
appendonly yes //aof日志开启 每次操作都会记录日志
# bind 127.0.0.1 //bind前面加上注释 否则无法远程连接集群
//关闭保护模式 无需密码直接连接redis集群
protected-mode no //关闭保护模式
//保护模式 连接redis需要密码才可访问
protected-mode yes //开启保护模式 默认模式
requirepass root //设置redis密码 需要全部统一一个密码 root可自定义
masterauth root //设置主节点密码 需要全部统一一个密码
3. 启动redis服务
分别启动redis服务
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf
ps -ef | grep redis
1. 创建集群
cluster-replicas 1表示每个主节点都有一个从节点,-a后面是redis密码,如果关闭保护模式则不需要,127.0.0.1仅作填充处理,这里需要填自己的服务器IP.
redis-5.0.0/src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.4:7005 -a root --cluster-replicas 1
出现下图时输入yes
完成创建(图片为首次测试结果仅四个节点,实际为六个节点,三个M三个S)
2. 测试集群
打开端口号为7000的客户端,设置一个key-value值
redis-cli -c -p 7000
set name wohenkuaile
退出7000端口的服务,进入到7001的服务,获取key为name的值,如果现实如图则集群环境正常
quit
redis-cli -c -p 7001
get name
1. 在pom文件中添加maven依赖
redis.clients
jedis
2.9.0
2. Java代码
public class ConnectReidsCluster {
public static void main(String[] args) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大连接数
poolConfig.setMaxTotal(1);
// 最大空闲数
poolConfig.setMaxIdle(1);
// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
poolConfig.setMaxWaitMillis(1000);
Set nodes = new LinkedHashSet();
nodes.add(new HostAndPort("127.0.0.1", 7000)); //ip填写服务器的ip地址
nodes.add(new HostAndPort("127.0.0.1", 7001)); //127.0.0.1在这里只是作填充
nodes.add(new HostAndPort("127.0.0.1", 7002));
nodes.add(new HostAndPort("127.0.0.1", 7003));
nodes.add(new HostAndPort("127.0.0.1", 7004));
nodes.add(new HostAndPort("127.0.0.1", 7005));
JedisCluster cluster = new JedisCluster(nodes, 5000, 5000, 5, "root", poolConfig);
String name = cluster.get("name");
System.out.println(name);
cluster.set("info", "我很快乐");
System.out.println(cluster.get("info"));
try {
cluster.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1. 如果出现Waiting for the cluster to join一直加载
这种情况需要开放17000-17005(具体为当前redis端口号+10000)
redis集群不仅开放redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000,如redis端口为7000,则集群总线端口为17000。
2.控制台报错无法连接到集群
运行后有可能出现以下情况,发现控制台报错,查询后发现是配置文件中没有注释bind 127.0.0.1,导致集群环境无法远程访问到。(如果完全按照上述配置还出现这种情况,请检查端口号是否开放!)
首先要停止已经开启的集群,然后删除在/usr/local下生成的nodes配置文件,注释掉redis.conf中的bin的,最后按照上面的方法重新开启集群。
(1). 停止集群
命令查到几个redis服务的pid,分别杀掉对应pid的进程。
(2). 删除/usr/local下的nodes-7000.conf配置文件和存储的数据文件
rm -rf nodes-7000.conf
rm -rf nodes-7001.conf
rm -rf nodes-7002.conf
rm -rf nodes-7003.conf
rm -rf dump.rdb
rm -rf dump.rdbappendonly.aof
(3). 注释redis.conf中的bind 127.0.0.1
(4). 重启开启集群
!!!注意:这里的127.0.0.1仅仅作填充处理,这里需要设置成你的服务器IP,否则可能无法远程连接
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-5.0.0/src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003
插入一条之前的数据
redis-cli -c -p 7000
set name wohenkuaile
quit
(5). 再次使用刚刚的代码连接redis集群