创建集群前提
集群的概念:集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放。
集群是利用redis下的redis.trib.rb来创建集群,而redis.trib.tb是依赖于ruby环境的(由ruby开发),因此首先要安装ruby。
ruby安装
- 首先查看gem源(Gem是一个管理Ruby库和程序的标准包)是什么地址:
gem source -l
—>https://rubygems.org/
- 如链接,是国外网站,因为天朝的防火墙,国外的网站无法下到最新版,因此要切换到国内,执行以下命令:
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
发现报错,因为国内网站一直变化,登录https://gems.ruby-china.org/发现域名变化,将https://gems.ruby-china.org/ 更改为https://gems.ruby-china.com/后ok
- 此时查看gem source -l,域名变为:https://gems.ruby-china.com/ ,即表示转换ok,结果如下图:
- 通过 gem 安装 redis 的相关依赖:
sudo gem install redis
- 安装完后输入指令:ruby -v查看Ruby版本,正常显示则说明安装ok,如下图:
创建集群
- 在文件夹(我选的桌面)根据当前ip创建集群配置:
mkdir cluster(创建文件夹)
vi 7000.config(创建基文件)
- 复制以下代码到文件中,保存退出(ip地址是本机地址):
port 7000
bind 192.168.40.23
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes
-
同时复制5份(集群最少保持3个以上主节点,即至少6份),分别命名为7001.config,7002.config,7003.config,7004.config,7005.config,如下图:
-
依次修改文件中的端口为文件名,以7001为例,如下图:
-
依次开启redis(根据redis配置开启,使其以配置运行),redis-server 7000.conf,redis-server 7001.conf…,结果如下图:
-
运行如下命令创建集群:
ruby redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005
- 从图中发现3M3S,M边对应着0-16383的slot(卡槽),卡槽的不同对应着在不同的集群上写数据(无卡槽则只能读数据),而分配是利用CRC16算法来完成的,简单说明如下:
1.redis cluster在设计的时候,就考虑到了去中⼼化,每个节点平等,在任意节点可以获取其他节点数据;
2.redis cluster 默认分配了 16384 个slot,当我们 set⼀个key 时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384;
3.Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步,只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充 当 master;
4.必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了;
数据验证
在本机连接输入以下命令连接7002,加参数-c表示连接到集群:
redis-cli -h 172.16.179.131 -c -p 7002
写入数据:set name curry,发现⾃动跳到了7003服务器,并写⼊数据成功,在7003可以获取数据,如果写入数据又重定向到7000(负载均衡) ,即集群创建成功。