redis集群搭建
Posted wang_zai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis集群搭建相关的知识,希望对你有一定的参考价值。
redis集群功能:
多个redis节点网络互联,数据共享;
所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用;
不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为;
支持在线增加、删除节点,客户端可以连任何一个主节点进行读写。
redis集群原理:
原理:redis集群设计包括2部分:哈希Slot和节点主从。
主从主要来实现redis读写分离,一个master,N个slave,salve也可以有自己的slave,master只负责写和同步数据给slave,slave主要用于读,扩容slave只能提高读的效率。写的瓶颈以及存储容量的瓶颈都会存在。
哈希slot其实就是分库分表,也就是负载均衡,能提高redis的并发能力,数据依次存储到各个node上面,不会有重复的数据,每个node上面的数据都不会重复,node之间也会互相监听,redis把写操作分摊到各个节点上面。
redis集群很好的降低了并发负载压力,同时也解决了单点故障,扩展并发读就添加slave,扩展并发写以及扩容就添加master。(该master存在key name,当master挂掉之后,再次更新该name的时候,slave会变成对应的master)
准备:
分别在2台机器上面启动三个redis服务
192.168.1.99,启动端口7000 7001 7002 192.168.1.210,启动端口7003 7004 7005
安装redis
wget http://download.redis.io/releases/redis-3.2.0.tar.gz -p /usr/local/src tar zxvf redis-3.2.0.tar.gz cd redis-3.2.0 make make PREFIX=/usr/local/redis install
配置redis
mkdir /usr/local/redis/etc vim redis7000.conf ##写入如下内容: port 7000 bind 192.168.1.99 daemonize yes pidfile /usr/local/redis/var/redis_7000.pid dir /data/redis/7000 cluster-enabled yes cluster-config-file nodes_7000.conf cluster-node-timeout 10100 appendonly yes
说明:其它redis配置文件也如上,只需sed -i \'0,$s/7000/700X/g\' redis700X.conf,记得bind绑定主机要修改
创建配置文件里面对应的目录:
mkdir /usr/local/redis/var 192.168.1.99机器上,mkdir -p /data/redis/{7000,7001,7002} 192.168.1.210机器上,mkdir -p /data/redis/{7003,7004,7005}
创建软链
ln -s /usr/local/redis/bin/* /usr/local/bin/
启动6个redis服务
redis-server /usr/local/redis/etc/redis7000.conf
......
安装ruby
yum install -y ruby rubygem yum安装ruby默认是2.0.0版本,但gem install redis需要ruby版本大于2.2.2,可以通过重新安装ruby,我这边是直接指定版本: gem install redis --version 3.2.2
创建集群
cp /usr/local/src/redis-3.2.0/src/redis-trib.rb /usr/bin/ redis-trib.rb create --replicas 1 192.168.1.99:7000 192.168.1.99:7001 192.168.1.99:7002 192.168.1.210:7003 192.168.1.210:7004 192.168.1.210:7005 //会创建3master-3slave的集群(默认自动分配)
登录
redis-cli -c -h 192.168.1.99 -p 7000 ## -c说明以集群的方式登录,任意一个节点都可以创建key,或者查看key
redis集群操作
cluster nodes //列出节点 redis-trib.rb check 192.168.1.99:7000 //查看redis集群状态 cluster info//查看集群信息 cluster meet ip port //添加节点 cluster forget node_id //移除某个节点 cluster replicate node_id//将当前节点设置为指定节点的从 cluster saveconfig//保存配置文件
python连接redis集群
1. 安装redis-py-cluster模块
pip3 install redis-py-cluster ##我运行在python3上面
2. 使用redis-py-cluster模块操作redis集群
[root@master day11]# cat redis_cluster.py __author__ = \'wangzai\' from rediscluster import StrictRedisCluster import sys def redis_cluster(): redis_nodes = [{\'host\':\'192.168.1.99\',\'port\':7000}, {\'host\':\'192.168.1.99\',\'port\':7001}, {\'host\':\'192.168.1.99\',\'port\':7002}, {\'host\':\'192.168.1.210\',\'port\':7003}, {\'host\':\'192.168.1.210\',\'port\':7004}, {\'host\':\'192.168.1.210\',\'port\':7005} ] try: redisconn = StrictRedisCluster(startup_nodes = redis_nodes) except Exception as e: print("connect error") sys.exit(1) redisconn.set(\'name1\',\'kk\') print("name is", redisconn.get(\'name1\')) if __name__ == "__main__": redis_cluster()
说明:执行上面脚本之后,会在某一个master上面生成该key,如果该master挂掉,重新更新该key,对应slave会变成master,更新该key,如果该key的master和slave都挂掉,则数据会访问不到。不同的key会分发到不同的master上面,redis集群不仅实现了高并发、也实现了高可用。
以上是关于redis集群搭建的主要内容,如果未能解决你的问题,请参考以下文章