1,安装redis5.0

  1.1 wget http://download.redis.io/releases/redis-5.0.0.tar.gz

  1.2 tar -zxvf redis-5.0.0.tar.gz cd redis-5*

   1.3 编译 make 

    1.4 启动 redis-server    

    1.5 启动客户端 redis-cli

    1.6 修改配置文件 redis-conf  将daemonize no  改成 yes  后台运行服务

2,redis集群cluster配置

2.1 本次操作是模拟集群 在一台虚拟机上开启多个redis服务,真实的生成环境中应该一台服务器加一台redis

2.2  mkdir /usr/local/cluster 创建一个集群目录

2.3 cd cluster  mkdir {7001,7002,7003,7004,7005,7005} 创建6个文件夹来存放6个

2.4 将redis.conf 复制到每个文件夹中 ,并依此修改redis.conf

# redis后台运行
daemonize yes
# redis运行的端口号 改成对应的端口
port 7001
# 指定只接收来自该ip地址的请求
bind 127.0.0.1
# 指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
dir ../6379
# 启动集群模式
cluster-enabled yes
# 集群配置文件,在集群启动时,自动创建
cluster-config-file nodes-7001.conf
# 集群超时时间,节点超时多久表示宕机了
cluster-node-timeout 5000
# 开启aof持久化模式,每次写操作请求都追加到appendonly.aof文件中
appendonly yes

2.5 修改完配置文件之后 依此启动6个redis服务 redis-server /usr/local/cluster/7001/redis-conf 启动完检查 ps -ef |grep redis

2.6 全部正常启动之后开始配置集群

    配置集群命令 在 redis-cli中

    redis-cli --cluster create 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 127.0.0.1:7006 --cluster-replicas 1

ubtun redis更新到最新版本 ubuntu redis配置_redis

2.7 验证

    连接客户端 redis-cli -c -h 192.168.9.206 -p 7001

 

3,集群原理

1,当集群启动成功的时候 就会自动的在每个节点分好片,如果某个节点挂掉,集群也能正常工作,但是如果大面积的挂掉那么就不能用了

2,集群会把数据切分到多个redis节点中

3,redis集群中每个节点都需要建立2个tcp连接 ,监听两个端口 一个端口是客户端端口 用来接收客户端指令,于客户端交互 比如7001 7002  。 另一个端口为集群总线端口 是客户端端口号加10000  比如17001 17002 用于节点之间通过二进制协议通讯

4,redis 集群的数据分片

      redis集群用的不是一致性hash 而是使用哈希槽 整个集群 有16384个slot  决定一个key 存放到哪个slot 的算法是 crc16(key)/16384  如果集群有三个主节点 那么

     节点A 分配的槽为0-5500

     节点B分配的槽为5501-11000

     节点C分配的槽为11001 -16384

    这样的分布式方便节点的增加和删除,如果新加了一个节点D 那么会将ABC中的部分哈希槽移到D中 如果删除A节点 那么将A      的哈希槽中的数据转移到BCD节点   当A数据转移完成后 就可以从集群中删除了

    因为把哈希槽从一个节点转到另一个节点是不需要停机的 所有增加或删除 或转移哈希槽是不需要停机的

5.redis集群主从模式

     每个主节点 都有n个从节点 ,7001主节点->7004为从节点 如果7001挂了那么7004 会升为主节点,从而整个集群可以正常工作,如果7001 和它的所有从节点都挂掉 那么整个集群就不能用了

 

4,总结

复制&高可用:
集群的节点内置了复制和高可用特性。
特点:1、节点自动发现
2、slave->master 选举,集群容错
3、Hot resharding:在线分片
4、基于配置(nodes-port.conf)的集群管理
5、客户端与redis节点直连、不需要中间proxy层.
6、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.