一、实验环境:
1.服务器为centos6.4版本系统
2.redis安装版本为3.2.9
3.jedis版本为jedis-2.9.0
3.jedis依赖commons-pool包版本为commons-pool2-2.2.jar
二、Jedis操作集群java测试代码:
/**
*@throwsException
*redis3.x集群下的API存储
*/
@Test
publicvoidtest2()throwsException{
//创建集群中相应的节点对象,参数对应节点中的ip和端口号
HostAndPorth1 =newHostAndPort("192.168.8.150",7000);
HostAndPorth2 =newHostAndPort("192.168.8.150",7001);
HostAndPorth3 =newHostAndPort("192.168.8.150",7002);
HostAndPorth4 =newHostAndPort("192.168.8.150",7003);
HostAndPorth5 =newHostAndPort("192.168.8.150",7004);
HostAndPorth6 =newHostAndPort("192.168.8.150",7005);
Seths=newHashSet();
//依次放入set集合中
hs.add(h1);
hs.add(h2);
hs.add(h3);
hs.add(h4);
hs.add(h5);
hs.add(h6);
//将set集合创建集群对象
JedisClusterjc=newJedisCluster(hs);
//直接进行相应的操作,和jedis一致
jc.set("hxhaaj","哈哈啊哈");
jc.set("waj","哈哈啊哈");
jc.set("wangajiao","哈哈啊哈");
jc.set("ajiao","哈哈啊哈");
jc.set("hxh","哈哈啊哈");
jc.set("wang","哈哈啊哈");
jc.close();
}
三、常见错误:
1.服务器中的端口号应在防火墙的配置文件中开启,否则无法连接,会出现如下错误。
报错JedisConnectionException: no reachable node is cluster
解决方法:
1.1)vi编辑防火墙的配置文件,加入这几个端口号开放
命令:
# vi /etc/sysconfig/iptables
编辑后,在中间加入这几行,位置一定要在commit之前。
-A INPUT -m state --state NEW -m tcp -p tcp --dport7000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport7001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport7002 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport7003 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport7004 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7005 -j ACCEPT
1.2)保存后,重启防火墙服务。
命令:
# service iptables restart
执行效果:
[root@server src]# service iptables restart
iptables:清除防火墙规则:[确定]
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:正在卸载模块:[确定]
iptables:应用防火墙规则:[确定]
1.3)再执行测试代码,成功。
此时再查看数据库:发现有记录。
2.从节点只能进行读取操作,增删改无法进行
错误信息:
192.168.8.150:7000> flushall
(error) READONLY You can't write against a read only slave.
执行查看节点信息发现:
# redis-cli -c -h 192.168.8.150 -p 7000 cluster nodes
根据查看节点信息发现7000节点为从节点,所有无法进行增删改操作。