概述
redis集群的搭建至少需要六个redis实例,为了更接近实际的生产环境,准备了三台虚拟机,ip分别为192.168.1.12 ,192.168.1.15 , 192.168.1.18,redis的默认端口为6379,在这不使用默认端口,使用7000和7001端口。
集群介绍
redis集群是一个提供在多个Redis间共享数据的程序集,但不支持多个keys命令的处理。 在集群中每个节点都是平等的关系,都是对等的。每个节点都保存了各自的数据和整个集群的状态,每个节点都和其他所有节点连接,而且这些链接保持活跃,这样就保证了链接集群中的任意一个节点,就可以获取其他节点的数据。
环境:
- vitrualbox
- centos 7
- redis 3.2.8
安装redis
- 上传: redis 3.2.8 源码包 到 /opt下
- 使用: tar -zxvf redis 3.2.8.tar.gz
- 进入解压目录: make
安装过程中可能会有一些错误,可以参考这篇文章 : //www.greatytc.com/p/cc403be7f80d
创建Redis节点
在1.12主机上 /usr/local 文件夹下创建 redis_cluster 目录:
mkdir /usr/local/redis_cluster 目录
在redis_cluster目录下创建 名为 7000 7001 的两个文件夹 ,并将/opt/redis-3.2.8目录下的redis.conf 文家拷贝到文件夹下:
mkdir 7000 7001
cp /opt/redis-3.2.8/redis.conf /usr/local/redis_cluster/7000/
cp /opt/redis-3.2.8/redis.conf /usr/local/redis_cluster/7001/
修改redis.conf配置文件的内容,如下:
port 7000 //redis启动端口号 , 7001文件夹的配置文件端口号修改为7001
bind 主机的ip地址 //默认为127.0.0.1 ,修改该主机的实际地址
daemonize yes //默认为no ,改为yes, 以守护进程模式运行,即为后台运行,不显示界面
pidfile /var/run/redis_7000.pid //pid文件对应的端口号 7000 7001
cluster-enabled yes //开启集群,把#去掉,默认不开启集群模式
cluster-config-file nodes_7000.conf //集群的配置文件,由redis自己来维护
cluster-node-timeout 15000 //请求超时,默认15秒
appendonly yes //aof日志,开启后每次写操作都会记录一条命令,可自行决定是否开启
完成上面的步骤,一台主机上的两个节点就配置完了,在另外两台主机上也执行同样的操作。
启动各节点实例
/opt/redis-3.2.8/src/redis-server /usr/local/redis_cluster/7000/redis.conf
/opt/redis-3.2.8/src/redis-server /usr/local/redis_cluster/7001/redis.conf
自行查看各个节点的启动情况,确保各个节点都能正常的运行。之后关闭防火墙
配置集群的运行环境
yum install -y ruby ruby-devel rubygems rpm-bulid
gem install redis
创建集群
/opt/redis-3.2.8/src/redis-trib.rb create --replicas 1 192.168.1.12:7000 192.168.1.12:7001 192.168.1.15:7000 192.168.1.15:7001 192.168.1.18:7000 192.168.1.18:7001
输入yes
加参数 -C 可连接到集群,因为 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略,-p 参数为端口号
$ /usr/local/redis-3.2.6/src/redis-cli -h 192.168.1.18 -c -p 7000
192.168.1.12:7000> set key zhagnsn
-> Redirected to slot [12539] located at 192.168.1.18:7000
OK
JAVA 操作redis集群
public class JedisClusterTest {
public static void main(String[] args) {
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>() ;
jedisClusterNodes.add(new HostAndPort("192.168.1.12" , 7000));
jedisClusterNodes.add(new HostAndPort("192.168.1.12" , 7001));
jedisClusterNodes.add(new HostAndPort("192.168.1.15" , 7000));
jedisClusterNodes.add(new HostAndPort("192.168.1.15" , 7001));
jedisClusterNodes.add(new HostAndPort("192.168.1.18" , 7000));
jedisClusterNodes.add(new HostAndPort("192.168.1.18" , 7001));
JedisCluster cluster = new JedisCluster(jedisClusterNodes) ;
String name = cluster.get("key");
System.out.println(name );
}
}
少年听雨歌楼上,红烛昏罗帐。
壮年听雨客舟中,江阔云低,断雁叫西风。
感谢支持!
---起个名忒难