redis集群
来源:互联网 发布:apache 代理转发 编辑:程序博客网 时间:2024/06/04 19:44
下载源码
解压
编译
安装
拷贝配置文件
将redis1复制5个Redis到redis-cluster目录下,此时共6个redis
复制redis-trib.rb集群管理工具
启动(后端启动)
创建集群
查看Redis运行状态
1234567
ps -el | grep redis5 S 0 1999 1 0 80 0 - 34359 ep_pol ? 00:00:00 redis-server5 S 0 2003 1 0 80 0 - 34359 ep_pol ? 00:00:00 redis-server5 S 0 2007 1 0 80 0 - 34359 ep_pol ? 00:00:00 redis-server5 S 0 2011 1 0 80 0 - 34359 ep_pol ? 00:00:00 redis-server5 S 0 2017 1 0 80 0 - 34359 ep_pol ? 00:00:00 redis-server5 S 0 2023 1 0 80 0 - 34359 ep_pol ? 00:00:00 redis-server
root 25111 0.0 0.0 112664 972 pts/6 R+ 16:35 0:00 grep --color=auto redis
[root@localhost redis-cluster]# kill -9 22676
2、卸载 删除redis-cluster
3、测试,执行redis1下redis-cli
[root@localhost redis1]# ./bin/redis-cli -h 127.0.0.1 -p 7001
[root@localhost redis1]#
127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7006
OK
127.0.0.1:7006> set name liwei
-> Redirected to slot [5798] located at 127.0.0.1:7004
OK
127.0.0.1:7004> get name
"liwei"
127.0.0.1:7004> get hello
-> Redirected to slot [866] located at 127.0.0.1:7006
"world"
127.0.0.1:7006> exit
[root@localhost redis-cluster]#
使用脚本,启动或停止各个节点,详细参见http://blog.csdn.net/fengyong7723131/article/details/53196382
1、创建目录结构,如下
node_7001 node_7002 node_7003 node_7004 node_7005 node_7006
2、将原来redis.config拷贝到各个目录下,并根据各个节点设置一下内容(vi查找命令:/text 查找text,按n健查找下一个,按N健查找前一个)
port 7001cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes
bind 192.168.20.103 #集群如果不是在本地测试(127.0.0.1),需要设置改ip
3、将redis1中redis-cli、redis-server放到当前目录。# By default protected mode is enabled. You should disable it only if# you are sure you want clients from other hosts to connect to Redis# even if no authentication is configured, nor a specific set of interfaces# are explicitly listed using the "bind" directive.protected-mode no //允许远程访问 3.2版本后才有
4、创建re.sh脚本,vim re.sh,粘贴如下内容
- #!/bin/bash
- #redis集群快速启动与关闭脚本
- #条件一:当前文件夹下包括包含node开头的各个节点文件夹,节点文件夹下包含redis.conf配置文件,不可以配置成守护线程,不然启动时无法输出info到infoFile
- #条件二:当前文件夹下包括redis-server,redis-cli
- #条件三:请保持node文件夹后的数字与内部配置文件的端口号一致,例如node_7000文件夹的端口号为7000
- #当前位置
- cluster_dir=`ls`
- #node节点的个数
- node_size=0
- #node节点数组
- nodes=()
- #信息文件
- infoFile="infoFile"
- #pid文件
- pidFile="pidFile"
- #创建infoFile和pidFile文件
- touch infoFile
- touch pidFile
- #启动以node开头的文件夹下的redis节点,条件一:node开头,条件二:必须是文件夹
- function starCluster(){
- echo "" > $infoFile
- echo "========================端口号:======================="
- for node in $cluster_dir
- do
- if [ ${node:0:4} = "node" ]
- then
- if [ -d ${node} ]
- then
- node_size=`expr ${node_size} + 1`
- echo -e "${node:5:8},\c"
- ./redis-server ${node}/redis.conf >> $infoFile&
- fi
- fi
- done
- echo ""
- echo "======================================================"
- echo "===================有${node_size}个redis节点====================="
- echo "======================================================"
- }
- #关闭所有节点
- function stopCluster(){
- cat $infoFile | grep "PID" | awk '{ infoSize=length($0);infoIndex=index($0,"PID");print substr($0,infoIndex+4,infoSize) }' > $pidFile
- echo "===================redis集群的pid:===================="
- for node in `cat $pidFile`
- do
- echo -e "${node}, \c}"
- kill -9 ${node}&
- done
- echo ""
- echo "======================================================"
- }
- case $1 in
- start) starCluster
- ;;
- stop) stopCluster
- ;;
- esac
5、最后目录情况如下:
[root@localhost redis-cluster]# ls
node_7001 node_7002 node_7003 node_7004 node_7005 node_7006 redis-cli redis-server redis-trib.rb re.sh
6、启动:./re.sh start
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
7、停止:./re.sh stop
更改ip报错:
[ERR] Node 192.168.19.33:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决办法:删除旧文件:
appendonly.aof nodes-7001.conf nodes-7006.conf dump.rdb nodes-7002.conf
flushdb nodes-7003.conf infoFile node_7005 nodes-7004.conf node_7006 nodes-7005.conf
重新启动,重新创建
./re.sh start
./redis-trib.rb create --replicas 1 192.168.19.33:7001 192.168.19.33:7002 192.168.19.33:7003 192.168.19.33:7004 192.168.19.33:7005 192.168.19.33:7006
注意开启防火墙:(systemctl stop firewalld.service 开发可以先关闭掉)
firewall-cmd --zone=public --add-port=7001/tcp
---
firewall-cmd --zone=public --add-port=7006/tcp
客户端测试代码:
package com.store.test;
import java.io.IOException;
import java.util.HashSet;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class RedisClusterTest {
public static void main(String [] args) throws IOException {
HashSet<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.19.33", 7001));
nodes.add(new HostAndPort("192.168.19.33", 7002));
nodes.add(new HostAndPort("192.168.19.33", 7003));
nodes.add(new HostAndPort("192.168.19.33", 7004));
nodes.add(new HostAndPort("192.168.19.33", 7005));
nodes.add(new HostAndPort("192.168.19.33", 7006));
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("hello", "hello_world");
System.out.println(cluster.get("hello"));
cluster.close();
}
}
参考文章:
1、https://rubygems.org/gems/redis
2、http://binux.cn/2017/03/03/Redis-Cluster-Install/
3、http://blog.csdn.net/zgf19930504/article/details/51850594
4、http://www.redis.cn/topics/cluster-tutorial.html
5、https://stackoverflow.com/questions/35342977/redis-nodes-conf-file-locked
6、http://blog.csdn.net/fengyong7723131/article/details/53196382
7、http://blog.csdn.net/wudalang_gd/article/details/52153571
- redis 集群
- redis集群
- Redis集群
- Redis 集群
- redis集群
- Redis 集群
- redis 集群
- redis 集群
- redis集群
- Redis 集群
- Redis集群
- Redis集群
- redis 集群
- Redis 集群
- redis集群
- redis 集群
- Redis集群
- redis集群
- JS设置cookie、读取cookie、删除cookie
- vue里面删除数据
- beaglebone black 怎么使能pwm
- java的IO之字节流
- elasticsearch2.3.2服务搭建、管理及实时同步mysql数据
- redis集群
- java--自定义标签(tag、tld两种)
- GDT,LDT,GDTR,LDTR 详解,包你理解透彻
- 前端自动化构建入门3-在visual studio code中使用git
- PHP中奖概率写法
- 尝试用服务器开发
- Python基础类型
- PHP 封装ajax返回数据格式
- Oracle数据库与客户端版本协调