知识点一 redis部署
Redis 作为一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用 来做服务器端缓存,但当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系 统无法运行。如何解决这个问题?采用redis的集群方案 常用的redis集群方案有3种: 1、redis 主从 2、redis 哨兵 3、 redis cluster 何为主从? 即为一台服务器充当主服务器,另一台或多台服务器充当从服务器(备份服务器),主 服务器中的数据自动复制到从服务器之中。 主从复制有什么好处? 1.避免Redis单点故障 2.大并发访问时,构建读写分离架构,满足读多写少的应用场景
主从的架构示意图
一.部署redis过程 wget -nc http://download.redis.io/releases/redis-4.0.10.tar.gz tar -xvf redis-4.0.10.tar.gz cd redis-4.0.10 make cd src/ make install 安装完成后redis相关的工具(如redis-cli、redis-server)都在src目录下面 mkdir /usr/local/redis01/ -p cp ../redis.conf /usr/local/redis01/ cp redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis01/ 二、如何配置主从关系,并启动2个redis实例 1、拷贝出一份redis程序文件 2、修改新的程序文件中的redis.conf文件中port改为 port 6479 3、修改新的程序文件中的redis.conf文件salveof参数,改为slaveof 127.0.0.1 6379 3、启动redis-server cp /usr/local/redis01 /usr/local/redis02/ -R /usr/local/redis01/redis-server /usr/local/redis01/redis.conf /usr/local/redis02/redis-server /usr/local/redis02/redis.conf 三、连接、测试 /usr/local/redis01/redis-cli -p 6379 info /usr/local/redis01/redis-cli -p 6378 info /usr/local/redis01/redis-cli -p 6379 set name helloworld /usr/local/redis01/redis-cli -p 6479 get name 四、、如果无法连接redis,如何排查? 查看是否有redis进程 ps aux |grep redis 查看是否有监听端口 ss -nalp|grep redis redis哨兵模式 一、原理 当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知程序调用方,实现高可用性。 每个哨兵节点会定期与主节点和从节点通信,感知主从之间的关系。当发现主节点故障时,多个Sentinel 节点会共同选举新的可用redis节点提升为主节点。 二、python连接redis sentinel集群 安装 python redis 模块 pip install redis from redis.sentinel import Sentinel sentinel = Sentinel([('127.0.01', 26379), ('127.0.01', 26479), ('127.0.01', 26579), ], socket_timeout=0.5) master = sentinel.discover_master('mymaster')
redis cluster模式 一、原理 Redis cluster是一个可以在多个 Redis 节点之间进行数据共享的模式 Redis 集群通过分区(partition)来提供一定程度的可用性,将数据自动切分到多个节点,当集群中的 一部分节点失效或者无法进行通讯时,仍然可以继续处理命令请求的能力 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可 用节点即可 (4)redis-cluster 负责维护node和键值之间的关系 二、python连接redis cluster pip install redis-py-cluster from rediscluster import StrictRedisCluster redis_nodes = [{'host':'192.168.30.132','port':7009}, {'host':'192.168.30.132','port':7010}, {'host':'192.168.30.132','port':7011},] redisconn = StrictRedisCluster(startup_nodes = redis_nodes)
