手动搭建
配置
- 在3台服务器的redis目录下新建cluster.conf配置文件,内容如下
port 6379
cluster-enabled yes
daemonize yes
logfile "/usr/local/redis-4.0.14/log/cluster.log"
cluster-node-timeout 15000
cluster-config-file "nodes-6379.conf"
- 启动服务
redis-server cluster.conf
- 节点握手
在任一一台服务器上执行以下命令,这里以128服务器为例
cluster meet 192.168.6.129 6379
cluster meet 192.168.6.130 6379
- 分配槽
在任一一台服务器上执行以下命令,这里以128服务器为例
redis-cli -h 192.168.6.128 -p 6379 cluster addslots {0..5461}
redis-cli -h 192.168.6.129 -p 6379 cluster addslots {5462..10922}
redis-cli -h 192.168.6.130 -p 6379 cluster addslots {10923..16383}
分配完成后可以在任一一台机器上执行命令cluster nodes
查看信息如下:
127.0.0.1:6379> cluster nodes
7bac8551f8dbea1333a4f11c1bf95b662400e341 192.168.6.130:6379@16379 master - 0 1573804584127 2 connected 10923-16383
6879f2a77478e17cbc736db2e14bd991f51035b7 192.168.6.129:6379@16379 master - 0 1573804582114 1 connected 5462-10922
f8aa632b89060703599a33fadde7f242b13d81de 192.168.6.128:6379@16379 myself,master - 0 1573804579000 0 connected 0-5461
java客户端
示例代码如下:
public class ClusterTest {
public static void main(String[] args) {
JedisCluster jedisCluster = null;
try {
HostAndPort hostAndPort1 = new HostAndPort("192.168.6.128",6379);
HostAndPort hostAndPort2 = new HostAndPort("192.168.6.129",6379);
HostAndPort hostAndPort3 = new HostAndPort("192.168.6.130",6379);
Set<HostAndPort> set = new HashSet<>(4);
set.add(hostAndPort1);
set.add(hostAndPort2);
set.add(hostAndPort3);
jedisCluster = new JedisCluster(set);
for(int i = 1;i < 10;i++){
jedisCluster.set(String.valueOf(i),String.valueOf(i));
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(jedisCluster != null){
jedisCluster.close();
}
}
}
}
redis集群注意事项
- key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的 key执行批量操作。对于映射为不同slot值的key由于执行mget、mget等操作可能存在于多个节点上因此不被支持。
- key事务操作支持有限。同理只支持多key在同一节点上的事务操作,当多个key分布在不同的节点上时无法使用事务功能。
- key作为数据分区的最小粒度,因此不能将一个大的键值对象如hash、list等映射到不同的节点。
- 不支持多数据库空间。单机下的Redis可以支持16个数据库,集群模式下只能使用一个数据库空间,即db0。
- 复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构。
内容来源:《Redis开发与运维》
网友评论