redis集群构建

1、集群的概念

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。当请求到来首先由负载均衡服务器处理,把请求转发到另外的一台服务器上,redis集群主要是缓解单台服务器同一时间大量请求带来的的压力,就算集群中有服务器宕机,也不影响整体对外提供服务。

2、搭建redis集群

1、准备6个redis节点,7000.conf,7001.conf,7002.conf,7003.conf,7004.conf,7005.conf;编辑7000.conf文件,将以下配置拷贝进去,其他配置可直接复制,后续进行修改。
port 7000
bind 127.0.0.1
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes
2、使用命令,修改其他5个配置文件的内容
sed  's/7000/7001/g'  7000.conf > 7001.conf
sed  's/7000/7002/g'  7000.conf > 7002.conf
sed  's/7000/7003/g'  7000.conf > 7003.conf
sed  's/7000/7004/g'  7000.conf > 7004.conf
sed  's/7000/7005/g'  7000.conf > 7005.conf
3、分别启动六个实例
redis-server  7000.conf 
redis-server  7001.conf 
redis-server  7002.conf 
redis-server  7003.conf 
redis-server  7004.conf 
redis-server  7005.conf
4、启动效果如下
root       7821      1  0 01:39 ?        00:00:00 redis-server 127.0.0.1:7000 [cluster]
root       7826      1  0 01:39 ?        00:00:00 redis-server 127.0.0.1:7001 [cluster]
root       7833      1  0 01:39 ?        00:00:00 redis-server 127.0.0.1:7002 [cluster]
root       7838      1  0 01:40 ?        00:00:00 redis-server 127.0.0.1:7003 [cluster]
root       7848      1  0 01:40 ?        00:00:00 redis-server 127.0.0.1:7004 [cluster]
root       7853      1  1 01:40 ?        00:00:00 redis-server 127.0.0.1:7005 [cluster]
5、安装配置ruby环境,用于一键搭建redis集群

5.1.下载源码

wget -c  https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

5.2.解压缩ruby

tar -xvf ruby-2.3.1.tar.gz

5.3.编译安装ruby

./configure --prefix=/opt/ruby/
make && make install

5.4.准备ruby的环境变量

cp ./bin/ruby   /usr/local/bin/
cp ./bin/gem   /usr/local/bin

5.5.下载ruby的软件包管理工具

wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem  #安装ruby操作redis的模块

5.6.查看ruby语言的包邮哪些

gem list -- check redis gem

5.7.配置环境变量,配置环境变量redis-trib.rb,用于创建redis-cluster

cp /opt/redis-4.0.10/src/redis-trib.rb    /usr/local/bin/

5.8.通过redis-trib.rb命令,一键创建redis-cluster集群功能

redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
6、查看redis集群状态信息
redis集群对内两两组成主从
redis-cli -p 7003 info replication #查看主从身份信息
redis-cli -p 7004 info replication #查看主从身份信息
redis-cli -p 7005 info replication #查看主从身份信息
redis-cli -p 7000 cluster info    #查看节点集群状态
redis-cli -p 7000 -c  #集群模式有ASK路由规则,加入-c参数后,会自动跳转到目标节点处理。

3、集群在哪个服务器上写数据:CRC16

redis cluster在设计的时候,就考虑到了去中⼼化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据

Redis集群没有并使⽤传统的⼀致性哈希来分配数据,⽽是采⽤另外⼀种叫做哈希 槽 (hash slot)的⽅式来分配的。redis cluster 默认分配了 16384 个slot,当我们 set⼀个key 时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384。

Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master 节 点获取数据。只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充 当 master
需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了

4、与python交互

安装包如下

pip3 install redis-py-cluster

示列代码

from rediscluster import *

if __name__ == '__main__':
  try:
      # 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上
      startup_nodes = [
          {'host': '192.168.8.104', 'port': '7000'},
          {'host': '192.168.8.104', 'port': '7003'},
          {'host': '192.168.8.104', 'port': '7001'},
      ]
      # 构建StrictRedisCluster对象
      src=StrictRedisCluster(startup_nodes=startup_nodes,decode_responses=True)
      result=src.set('name','花花')
      print(result)
      name = src.get('name')
      print(name)
  except Exception as e:
      print(e)
posted @ 2020-05-08 11:40  叶落西南  阅读(147)  评论(0编辑  收藏  举报