@
目录一、集群是什么?
集群:集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果。
集群的作用:
- 分散单台服务器的访问压力,实现负载均衡;
- 分散单台服务器的存储压力,实现可扩展性;
- 降低单台服务器宕机带来的业务灾难。
二、集群的存储结构设计
对于输入的一个key,不是直接将其存储到某台服务器中,而是通过算法设计计算出应该存放的位置,之后再存储。
如果此时集群中加入了新的服务器,那么各个服务器需要需要给出各自的部分空间组成新的存储空间(给出的空间称为槽)。各个机器持有一定的槽,当加机器时分出自己的部分槽给新的机器,减机器时再将这些槽返回给其余机器。
不管多少台服务器,槽(slot
)的总数不变都是16387,但是随着空间的增大每个槽的内存变大了。从而实现了扩容。
各个数据库相互通信,每个数据库都持有所有槽的编号数据。
当一个key经过两次算法计算得到具体的位置数值,如果此时访问A会去A中查找,如果命中了直接返回。如果一次未命中,则告知具体的位置直接去查找。
- 槽用来区分数据的存储空间;
- key 用来加密后确定数据的存储位置;
- 一次命中或者两次命中就能够找到我们的数据。
- 主机有槽但是从机没有槽,从机需要从主机那里复制过来。
三、集群的搭建
- 修改配置文件
# 开启集群
cluster-enabled yes
# 集群中单台机器的配置文件(每台机器不同需要区分开)
cluster-config-file nodes-6379.conf
# 机器下线时间(下线多久后得到反馈)
cluster-node-timeout 10000
- 安装 ruby
由于 redis 集群需要使用 ruby命令,因此我们需要安装 ruby,步骤如下:
yum install ruby #安装ruby
yum install rubygems #ruby的包管理器gems,运行gem文件
- 启动六个redis实例(redis-server xxx.conf)
- 搭建集群(新版本已经不推荐使用ruby脚本的方式来搭建集群了):
切换到 redis安装目录下的src目录下,执行里面的 redis-trib.rb ruby脚本文件
./redis-trib.rb create --replicas 1 主机1ip:port 主机2ip:port .... 从机1ip:port 从机2ip:port .....
新版本建议使用:
redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
5. 数据存取
连接客户端时使用:redis-cli -c -p xxx
这样能够做到自动路由到数据存储点
四、主从下线和主从切换
1. 主从下线
- 如果从机宕机: 从机宕机后不影响主机和其余机器,当从机恢复后重新从主机那里同步数据,恢复slave身份。
- 如果主机宕机: 主机宕机后会从从机中选举出一个服务器作为新主机。这时即使原本的主机恢复,它的身份就变为了从机。
总结
- Cluster配置
- Cluster节点操作命令
参考文章:
Redis集群的简单搭建
DNS递归查询与迭代查询