本主题,介绍了Redis的集群配置与编程入门,其实Redis的集群还包含主从集群模式,哨兵集群模式(Redis 5在集群配置上有比较大的变化),在本主题没有做详细介绍。
本主题包含内容如下:
1. Redis集群配置;
2. Redis集群访问;
3. Redis集群编程;
一、集群配置
注意:
Redis集群要求至少6个节点。
下面是三个节点启动提示的错误。
1. 创建配置目录
创建集群的6个节点的工作目录,用来存放配置文件与数据库文件。
2. 拷贝配置文件到每个节点目录
拷贝Redis安装文件下的redis.conf到每个节点目录:
3. 修改配置文件
3.1. 修改bind配置
注意不能使用回旋IP:
3.2. 修改端口
因为在本机配置6个节点,采用相同的IP,不同的端口,端口从默认的6379,依次6个端口:6380,6381,8382,6383,6384。
3.3. 配置后台运行
这个不是集群必须的,主要是因为不需要独占终端。
3.4. 设置非保护模式
也是集群的非必须选项。
3.5. 配置进程锁文件
每个节点的进程锁文件设置不同。
3.6. 配置集群模式
该设置会用集群模式启动节点。
3.7. 集群节点配置文件
3.8. 配置集群节点的延时
3.9. 配置每个节点的数据库存放目录
4. 所有节点的配置
(1)绑定端口,port 6379
(2)绑定IP,bind 192.168.1.140
(3)指定数据存放路径,dir /Users/yangqiang/redis5/cluster/node1
(4)启动集群模式,cluster-enabled yes
(5)指定集群节点配置文件,cluster-config-file nodes-6379.conf
(6)后台启动,daemonize yes
(7)指定集群节点超时时间,cluster-node-timeout 5000
(8)指定持久化方式,appendonly yes
(9)指定保护模式,protected-mode no
注意:
上面黑体标注的部分是不同节点需要修改的部分。
不过其中节点存放目录使用端口作为后缀,使用redis的工具脚本容易更好的管理。可以研究redis安装目录下utils/create-cluster的create-cluster脚本文件。
5. 启动集群的每个节点
启动集群节点的指令:
./bin/redis-server ./cluster/node1/redis.conf
./bin/redis-server ./cluster/node2/redis.conf
./bin/redis-server ./cluster/node3/redis.conf
./bin/redis-server ./cluster/node4/redis.conf
./bin/redis-server ./cluster/node5/redis.conf
./bin/redis-server ./cluster/node6/redis.conf
启动效果如下:
启动的节点的进程状态:
启动阶段服务的网络状态
6. 启动集群
启动集群的指令
./bin/redis-cli --cluster create 192.168.31.140:6379 192.168.31.140:6380 192.168.31.140:6381 192.168.31.140:6382 192.168.31.140:6383 192.168.31.140:6384 --cluster-replicas 1
集群启动效果:
7. 启动集群后的节点文件
启动节点后,每个节点目录下产生的文件如下:
二、从redis-cli访问集群
1. 集群连接
注意使用-c选项。
./bin/redis-cli -c -h 192.168.31.140 -p 6379
2. 集群管理命令帮助
help @cluster
3. 集群信息查看
指令:
192.168.31.140:6379> cluster info
4. 集群节点信息
192.168.31.140:6379> cluster nodes
5. 集群节点数据操作
三、Redis的Python集群编程
1. 安装python的redis集群模块
安装指令
pip install redis-py-cluster
2. rediscluster模块帮助
其中根据使用经验,用户访问模块应该是client,其帮助如下:
其构造器为:
__init__(self, host=None, port=None, startup_nodes=None, max_connections=None, max_connections_per_node=False, init_slot_cache=True, readonly_mode=False, reinitialize_steps=None, skip_full_coverage_check=False, nodemanager_follow_cluster=False, connection_class=None, **kwargs)
3. Redis集群编程模式
# coding = utf-8
import rediscluster.client
startup_nodes = [
{"host":"192.168.31.140", "port":6379},
{"host":"192.168.31.140", "port":6380},
{"host":"192.168.31.140", "port":6381},
{"host":"192.168.31.140", "port":6382},
{"host":"192.168.31.140", "port":6383},
{"host":"192.168.31.140", "port":6384}
]
cluster_conn = rediscluster.client.RedisCluster(startup_nodes=startup_nodes)
str_data = cluster_conn.get('py_user')
print(str_data)
b'this is a cluster'
其他的操作与但节点一样,对编程者是透明的。