redis集群搭建和java应用接口
redis集群搭建和java应用接口
-
关于redis
redis是目前最流行的缓存中间件,其高性能的应用收到各互联网公司的广大青睐
本次教程使用redis5.0.0 -
准备工作
下载redis5.0.0
cd /usr/local/redis
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
下载完成后解压tar -xzvf http://download.redis.io/releases/redis-5.0.3.tar.gz
解压后编译
cd /usr/local/redis/redis-5.0.0/
make && make install
完成后启动
cd /redis/redis-5.0.0/src
./redis-server
这就启动了单机版的redis,关闭命令行后redis关闭,使用 ./redis-server &
后台启动
接下来要做一些简单的配置
在redis-5.0.0/下编辑redis.conf文件
vi/usr/local/redis/redis-5.0.0/redis.conf
修改一下内容
daemonize yes //redis后台运行
port 7000 //端口7000
cluster-enabled yes //开启集群 把注释#去掉/暂不开启
#bind 127.0.0.1 //注释掉
单机版搭建完成,编写java应用接口测试
-
单机版redis测试
搭建maven工程
redis.clients
jedis
2.7.0
编写测试类
/**- jedis测试 单机版
*/
@Test
public void testJedisSingle(){
Jedis jedis = new Jedis(“192.168.198.130”, 6379);
jedis.set(“test”, “this i a test”);
String str = jedis.get(“test”);
System.out.println("—:"+str);
//关闭jedis的链接
jedis.close();
}
- jedis测试 单机版
-
集群版本
创建目录用于存放集群节点
mkdir /usr/local/redis-cluster
mkdir /usr/local/redis-cluster/redis01
。。。创建六个节点文件
复制redis的src和redis.conf文件到每个节点下面
cp /usr/local/redis/redis-5.0.0/src redis01/
cp /usr/local/redis/redis-5.0.0/redis.conf redis01/
…
分别修改端口号,开启集群(修改每个节点下的redis.conf文件)
port 7000 //端口7001
cluster-enabled yes //开启集群 把注释#去掉/暂不开启
redis01 7001
redis02 7002
redis03 7003
redis04 7004
redis05 7005
redis06 7006
编写集群启动脚本
cd /usr/local/redis-cluster
touch start.sh
vi start.sh
内容写入:
cd redis01/src
./redis-server …/redis.conf
cd …/…/
cd redis02/src
./redis-server …/redis.conf
cd …/…/
cd redis03/src
./redis-server …/redis.conf
cd …/…/
cd redis04/src
./redis-server …/redis.conf
cd …/…/
cd redis05/src
./redis-server …/redis.conf
cd …/…/
cd redis06/src
./redis-server …/redis.conf
cd …
添加执行权限
chmod +x start.sh
执行启动命令
./start.sh
全部节点已经启动成功
比redis5.0.0低的版本需要ruby脚本工具,5.0.0以后不在需要
执行以下命令创建集群
redis-cli --cluster create 47.107.92.79:7001 47.107.92.79:7002 47.107.92.79:7003 47.107.92.79:7004 47.107.92.79:7005 47.107.92.79:7006 --cluster-replicas 1
redis5.0.0以前的版本可使用以下命令,前提是安装好ruby依赖
/usr/local/redis-5.0.0/src/redis-trib.rb create --replicas 1 47.107.92.79:7001 47.107.92.79:7002 47.107.92.79:7003 47.107.92.79:7004 47.107.92.79:7005 47.107.92.79:7006
集群已经搭建成功
测试集群:
cd /usr/local/redis-cluster/redis01/src
./redis-cli -p -c 7001
注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的
集群测试
public static void main(String[] args) throws InterruptedException {
final BaseRedis baseRedis = new BaseRedis();
baseRedis.initPool();
for (int i = 0; i < 20; i++) {
JedisCluster jedisCluster = baseRedis.getJedisCluster();
jedisCluster.set(String.valueOf(i), String.valueOf(i));
System.out.println("set " + i + ". value:" + jedisCluster.get(String.valueOf(i)));
TimeUnit.MILLISECONDS.sleep(500);
}
}
注意:遇到以下问题的解决方案
- 重启集群
这个一般是由于重启redis集群引起的问题
解决方法:
删除每个节点文件下的dump.rdb nodes.conf文件,记住要关闭集群后删除再重启集群
dump.rdb是由Redis服务器自动生成的 默认情况下 每隔一段时间redis服务器程序会自动对数据库做一次遍历,把内存快照写在一个叫做“dump.rdb”的文件里,这个持久化机制叫做SNAPSHOT。有了SNAPSHOT后,如果服务器宕机,重新启动redis服务器程序时redis会自动加载dump.rdb,将数据库状态恢复到上一次做SNAPSHOT时的状态。
为了方便编写删除临时文件的脚本
cd /usr/redis-cluster
touch deltempfiles.sh
vi deltempfiles.sh
cd redis01/src
rm -rf dump.rdb
rm -rf node.conf
cd ../../
cd redis02/src
rm -rf dump.rdb
rm -rf node.conf
cd ../../
cd redis03/src
rm -rf dump.rdb
rm -rf node.conf
cd ../../
cd redis04/src
rm -rf dump.rdb
rm -rf node.conf
cd ../../
cd redis05/src
rm -rf dump.rdb
rm -rf node.conf
cd ../../
cd redis06/src
rm -rf dump.rdb
rm -rf node.conf
- 端口未开放
启动集群输入yes处于等待状态
原因:
redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
集群总线端口为redis客户端连接的端口 + 10000
如redis端口为6379
则集群总线端口为16379
故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口
注意:iptables 放开,如果有安全组,也要放开这两个端口