redis集群搭建
1.daemonize yes
2.port 700* (分别对每个机器端口号进行设置)
3.bind xxx.xxx.xxx.xxx(必须要绑定当前机器的ip)
4.dir /usr/local/redis-cluster/700*/ (指定数据文件存放的位置,必须要指定不同的目录位置,不然会丢失数据)
5.cluster-enabled yes(启动集群模式,开始玩耍)
6.cluster-config-file nodes-700*.conf(这里700x最好和port对应上)
7.cluster-node-timeout 5000
8.appendonly yes
由于redis集群需要使用ruby命令,所以我们需要安装ruby
1.yum install ruby
2.yum install rubygems
3.gem install redis(安装redis和ruby的接口)
分别启动6个redis实例 然后检查是否启动成功
首先到redis安装目录下执行redis-trib.rb命令
./redis-trib.rb create --replicas 1 192.168.1.109:7001 192.168.1.109:7002 192.168.1.109:7003 192.168.1.109:7004 192.168.1.109:7005 192.168.1.109:7006
集群搭建成功后进行验证
1.连接任意客户端即可 ./redis-cli -c -h 192.168.1.109 -p 7001
2.进行验证: cluster nodes 查看集群节点 cluster info
3.进行数据操作验证
4.关闭集群则需要逐个关闭
验证测试
192.168.1.109:7001> cluster nodes
428cc940d9a8054f9aabfe9c588670928356ce4e 192.168.1.109:7005@17005 slave a032663160a843950e504201bf97a0ada5868f15 0 1503757415000 5 connected
8e295f495ba5a060bf0a8ec9665e35896dc63cff 192.168.1.109:7004@17004 slave 63be2af135eb740f36f7a2f796e782163691bdee 0 1503757416184 4 connected
4219f5e98511e2a282ac91d9f05bf5efe3accf3c 192.168.1.109:7003@17003 master - 0 1503757418579 3 connected 10923-16383
a032663160a843950e504201bf97a0ada5868f15 192.168.1.109:7002@17002 master - 0 1503757417585 2 connected 5461-10922
e477088b9807a962a50c6e3881027d96bf9a1a79 192.168.1.109:7006@17006 slave 4219f5e98511e2a282ac91d9f05bf5efe3accf3c 0 1503757416000 6 connected
63be2af135eb740f36f7a2f796e782163691bdee 192.168.1.109:7001@17001 myself,master - 0 1503757415000 1 connected 0-5460
安照数据分槽 下面的例子虽然登录7001客户端存数据 但是结果存的槽正好在7002下面
192.168.1.109:7001> set name shuist
-> Redirected to slot [5798] located at 192.168.1.109:7002
OK
192.168.1.109:7002>
但是仍然可以获取数据
192.168.1.109:7001> keys *
(empty list or set)
192.168.1.109:7001> get name
-> Redirected to slot [5798] located at 192.168.1.109:7002
"shuist"
192.168.1.109:7002> set age 29
-> Redirected to slot [741] located at 192.168.1.109:7001
OK
192.168.1.109:7001> set sex man
OK
192.168.1.109:7001> set address beijing
OK
192.168.1.109:7001> set a 1
-> Redirected to slot [15495] located at 192.168.1.109:7003
OK
192.168.1.109:7003> set b 2
-> Redirected to slot [3300] located at 192.168.1.109:7001
OK
当出现集群无法启动时 删除临时数据文件 再次启动每一个redis服务 然后重新构造集群环境
Java操作集群
public class TestClusterRedis {
public static void main(String[] args) {
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("192.168.1.109",7001));
jedisClusterNode.add(new HostAndPort("192.168.1.109",7002));
jedisClusterNode.add(new HostAndPort("192.168.1.109",7003));
jedisClusterNode.add(new HostAndPort("192.168.1.109",7004));
jedisClusterNode.add(new HostAndPort("192.168.1.109",7005));
jedisClusterNode.add(new HostAndPort("192.168.1.109",7006));
JedisPoolConfig cfg = new JedisPoolConfig();
cfg.setMaxTotal(100);
cfg.setMaxIdle(20);
cfg.setMaxWaitMillis(-1);
cfg.setTestOnBorrow(true);
JedisCluster jc = new JedisCluster(jedisClusterNode,6000,100,cfg);
System.out.println(jc.set("age","20"));
System.out.println(jc.set("sex","nv"));
System.out.println(jc.get("name"));
System.out.println(jc.get("name"));
System.out.println(jc.get("name"));
System.out.println(jc.get("name"));
System.out.println(jc.get("name"));
System.out.println(jc.get("name"));
System.out.println(jc.get("name"));
try {
jc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}