redis集群搭建

1.单机安装(会的直接跳到下面集群安装)

下载,解压,安装

>> cd /usr/local/app
>> wget http://download.redis.io/releases/redis-4.0.10.tar.gz
>> tar -zxvf redis-4.0.10.tar.gz
>> mv redis-4.0.10.tar.gz redis
>> cd redis
>> make MALLOC=libc
>> make install

安装完成,这时候会在/usr/local/bin/目录下看到redis-server、redis-cli等可执行脚本,进入看一下,如果没有,就要去解压目录复制进去了。
在这里插入图片描述
修改配置

>> vim /usr/local/app/redis/redis.conf
修改以下两个地方

#默认是只有一个127.0.0.1,这个时候只能自己连接,其他局域网内是连接不上的。所以,需要配置多个 IP ,这样就可以局域网内进行连接了。我设置的0.0.0.0,虽然这不太安全,方便我在其它地方连接。
bind 0.0.0.0
##后台启动
daemonize yes

启动redis

>> redis-server /usr/local/app/redis/redis.conf

##查看是否启动成功
>>netstat -anp | grep 6379
>>ps -ef | grep redis

测试
在这里插入图片描述
关闭redis

redis-cli shutdown

2.redis集群原理

Redis集群设计包括2部分:哈希Slot和节点主从。
1.节点主从
在这里插入图片描述

  • 只有1个Master,可以有N个slave,而且Slave也可以有自己的slaver。
  • 读写分离,Master只负责写和同步数据给slave,Slave承担了被读的任务,所以Slave的扩容只能提高读效率不能提高写效率。
  • 当一个新的Slave加入到这个集群时,会主动找Master来拜码头,Master发现新的小弟后将全量数据发送给新的Slave,数据量越大性能消耗也就越大,所以尽量避免在运行时做Slave的扩容。
  • Slave先将Master那边获取到的信息压入磁盘,再load进内存,client端是从内存中读取信息的,所以Redis是内存数据库。

优点:读写分离,通过增加Slave可以提高并发读的能力。
缺点:Master写能力是瓶颈。

2.哈希Slot
在这里插入图片描述
Redis 集群包含 16384 个哈希槽(hash slot),上图
Node1负责: 0 ~ 5460 哈希槽
Node2负责: 5461 ~ 10922 哈希槽
Node3负责: 10922 ~ 16384 哈希槽
假如Object4经过 CRC16哈希 对key进行计算值为1233,则Object4会存储到Node1节点上。

Node之间也互相监听,一旦有Node退出或者加入,会按照Slot为单位做数据的迁移。例如Node1如果掉线了,0-5640这些Slot将会平均分摊到Node2和Node3上,由于Node2和Node3本身维护的Slot还会在自己身上不会被重新分配,所以迁移过程中不会影响到5641-16384Slot段的使用。

3.redis集群搭建

Redis集群中要求奇数节点,所以至少要有三个节点,并且每个节点至少有一备份节点,所以至少需要6个redis服务实例。

1.机器资源

 三台服务器,相互可ping通
 10.3.21.15
 10.3.21.16
 10.3.21.17
(每台服务器redis三个端口号 7000~7002)

2.安装依赖包

>> yum install gcc-c++
>> yum install ruby
>> yum install rubygems

3.建立集群文件夹和配置

## 在三台机器上操作
>> mkdir -p /usr/local/app/redis-cluster/{7000,7001,7002}
## 分别进入每个端口目录创建配置文件
>> cd /usr/local/app/redis-cluster/7000 && touch redis.conf

redis.conf 配置内容如下:

# redis 占用端口,对应自己目录
port 7000
bind 0.0.0.0
daemonize yes   
##如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。
cluster-enabled yes  

#它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、#他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
cluster-config-file nodes_7000.conf                                                        


#这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还#是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没
#有连上大部分的主节点,则此节点将停止接收任何请求。一般设置为15秒即可。
cluster-node-timeout 15000   
#开启aof持久化模式,每次写操作请求都追加到appendonly.aof文件中
appendonly yes  
#每次有写操作的时候都同步
appendfsync always  
#redis服务日志 
logfile /usr/local/app/redis-cluster/7000/redis.log
#pidfile文件对应7000,7001,7002
pidfile /var/run/redis_7000.pid

以上三台机器都需要配置好

4.集群的启动和关闭
编写一个启动脚本

#/bin/bash

for ((i=0;i<3;i++));
do redis-server /usr/local/app/redis-cluster/700$i/redis.conf
done

查看启动成功
在这里插入图片描述
这时只是启动了9个单独的redis服务,它们还不是一个集群,下面就说明创建集群

5.创建集群
在一台机器上用redis-trib.rb 这个工具,就在redis解压目录的 src 目录中


## --replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。
>> ./redis-trib.rb create --replicas 1 10.3.21.15:7000 10.3.21.15:7001 10.3.21.15:7002 10.3.21.16:7000 10.3.21.16:7001 10.3.21.16:7002 10.3.21.17:7000 10.3.21.17:7001 10.3.21.17:7002

执行上面可能会报下面的错
在这里插入图片描述
原因就是安装redis-trib.rb运行依赖的ruby的包redis-4.1.3.gem

>> gem install redis

在这里插入图片描述
ruby版本又有问题,没关系再继续执行下面步骤

# 更新curl
>> yum install curl
>> curl -L get.rvm.io | bash -s stable
>> source /usr/local/rvm/scripts/rvm

## 查看rvm库中已知的ruby版本
>> rvm list known

## 安装
>> rvm install 2.4.0

# 上面安装好了就可以执行
>> gem install redis

## 启动集群
>> cd /usr/local/app/redis/src
>> ./redis-trib.rb create --replicas 1 10.3.21.15:7000 10.3.21.15:7001 10.3.21.15:7002 10.3.21.16:7000 10.3.21.16:7001 10.3.21.16:7002 10.3.21.17:7000 10.3.21.17:7001 10.3.21.17:7002

## 验证是否能连接上
>> redis-cli -c --raw -h 10.3.21.16 -p 7000

6.集群命令
1)列出集群节点 cluster nodes
在这里插入图片描述
2)查看集群信息 cluster info
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值