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.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
2.7 验证
连接客户端 redis-cli -c -h 192.168.9.206 -p 7001
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 和它的所有从节点都挂掉 那么整个集群就不能用了
复制&高可用:
集群的节点内置了复制和高可用特性。
特点:1、节点自动发现
2、slave->master 选举,集群容错
3、Hot resharding:在线分片
4、基于配置(nodes-port.conf)的集群管理
5、客户端与redis节点直连、不需要中间proxy层.
6、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.