redis集群搭建

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeG1oLXN4aC0xMzE0,size_20,color_FFFFFF,t_70,g_se,x_16Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

 

 

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。

Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

 

安装环境

OS: centos 7.2.1511

 

redis : 最新版 v4.0.1

 

单台redis安装

下载

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 /usr/local/redis/

如果是离线安装,则需要从官网下载指定版本,然后上传到生产环境。这里安装的是最新版redis,指定安装路径 /usr/local/redis/

 

编译安装

cd /usr/local/redis

make

make install

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

 

 

配置redis.conf

redis.conf在默认在安装目录下

$ vim /usr/local/redis/redis.conf

这里要修改两个地方,一个bind和daemonize就行。

要注意的点:

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

daemonize是设置是否后台启动 Redis,默认no,正常都需要以服务形式启动 Redis,所以这里设置为yes。

可以设置密码 requirepass mypassord

redis v3.0+版本增加了保护机制,默认protected-mode yes, 这样目标机器调用可能会报错,需要设置为no

关于更多配置文件参数的解释,可以参考:https://github.com/linli8/cnblogs/blob/master/redis%E5%89%AF%E6%9C%AC.conf

 

启动redis

cd /usr/local/bin/

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

测试redis服务

端口已开启:

 

netstat -anp | grep 6379

命令行连接:

 

复制代码

➜ redis redis-cli

127.0.0.1:6379> keys *

1) "city"

2) "usage"

3) "idc"

4) "region"

127.0.0.1:6379> set name jzhou

OK

127.0.0.1:6379> get name

"jzhou"

127.0.0.1:6379>

复制代码

关闭服务

可以通过杀进程的方式暴力关闭服务,也可以通过命令:

 

redis-cli shutdown

通过 netstat 可以看出来端口已经是TIME_WAIT状态了

以上是centos7单机部署redis的过程,下面集群搭建和上述类似,不过在目录结构和配置文件不同,当然,遇到的坑也多,主要配置集群依赖一些外部包,但说实话光搭建个集群是没有啥技术含量但。。

 

redis集群搭建

简介

redis-cluster架构设计

 

 

 

架构细节:

 

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

 

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

 

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

 

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key

 

(5)Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

 

环境准备

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

 

这里演示的是我搭的生产环境redis集群,3台服务器,每台起3个服务,共9个节点,生产环境搭建的很顺利,但测试环境一台服务器开6个端口遇到了很多问题,各种依赖包问题,后续会说明。

 

三台服务器

172.28.37.29

172.28.37.30

172.18.38.219

(每台服务器redis三个端口号 7000~7002)

 按照上面搭建单台redis服务的方式在三台服务器分别安装redis,从配置文件开始会有所不同。下面会说明搭建过程。

 

依赖包安装

注意,下述均安装最新版本,否则会和redis版本不匹配

 

复制代码

gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)

gcc-c++

lib

zlib

ruby 2.4.4(>2.0.0)

rubugems 2.6.14.1

复制代码

撸起袖子集群搭建

1. 准备目录结构

三台机器一样,建立如下目录结构:

 

$ mkdir -p /usr/local/redis/redis-cluster/{7000,7001,7002}

分别进入每个端口目录创建配置文件:

 

cd /usr/local/redis/redis-cluster/7000 && touch redis.conf

2.redis.conf内容及解释:

 

复制代码

port 7000 # 端口7000,7001,7002,与目录对应

bind 172.28.37.29 #默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群

daemonize yes #redis后台运行

cluster-enabled yes #开启集群

cluster-config-file nodes_7000.conf #集群的配置,配置文件首次启动自动生成 7000,7001,7002  

cluster-node-timeout 8000 #请求超时,默认15秒,可自行设置

appendonly yes #开启aof持久化模式,每次写操作请求都追加到appendonly.aof文件中

appendfsync always #每次有写操作的时候都同步

logfile "/data/redis/logs/redis.log" #redis服务日志

pidfile /var/run/redis_7000.pid #pidfile文件对应7000,7001,7002

复制代码

注意,上述有些配置项要对应服务和目录,三个目录按照上述配置好后,启动服务

 

3.启动/关闭集群服务

可以在每个服务器上写一个启动脚本start-redis.sh:

 

for((i=0;i<3;i++)); 

do /usr/local/bin/redis-server /usr/local/redis/redis-cluster/700$i/redis.conf; 

done

关闭服务类似:

 

for((i=0;i<=2;i++));

 do /usr/local/bin/redis-cli -c -h $IP -p 700$i shutdown; 

done

$IP分别为三台服务器IP。

 

这时只是启动了9个单独的redis服务,它们还不是一个集群,下面就说明创建集群

 

4.创建集群

注意:在任意一台上运行 不要在每台机器上都运行,一台就够了

 

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中

 

在其中一台执行:

 

$ cd /root/redis-4.0.10/src

$ ./redis-trib.rb create --replicas 1 172.28.37.29:7000 172.28.37.29:7001 172.28.37.29:7002 172.28.37.30:7000 172.28.37.30:7001 172.28.37.30:7002 172.18.38.219:7000 172.18.38.219:7001 172.18.38.219:7002

敲完这个命令后会提示是否按照默认的推荐方式配置集群主从,一般选yes就行了

 

 

 

截图中看出,推荐了4个masters,5个从节点

复制代码

>>> Creating cluster

>>> Performing hash slots allocation on 9 nodes...

Using 4 masters:

172.28.37.29:7000

172.28.37.30:7000

172.18.38.219:7000

172.28.37.29:7001

Adding replica 172.18.38.219:7001 to 172.28.37.29:7000

Adding replica 172.28.37.29:7002 to 172.28.37.30:7000

Adding replica 172.28.37.30:7002 to 172.18.38.219:7000

Adding replica 172.18.38.219:7002 to 172.28.37.29:7001

Adding replica 172.28.37.30:7001 to 172.28.37.29:7000

复制代码

下面这个显示了集群和slot分配结果

 

 

 

5.集群验证

参数 -C 可连接到集群,因为 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略,-p 参数为端口号

复制代码

[root@172-28-37-29 src]# redis-cli -c -p 7000 -h 172.28.37.29

172.28.37.29:7000> set name zhoujie

-> Redirected to slot [5798] located at 172.28.37.30:7000

OK

172.28.37.30:7000> get name

"zhoujie"

172.28.37.30:7000>

复制代码

可以看到在29的7000上设置了name,重定向到了30的7000节点。

 

到此为止集群搭建成功!

 

友情提示:

 

当出现集群无法启动时,删除集群配置文件,再次重新启动每一个redis服务,然后重新构件集群环境。

 

--------------------------------------------华丽的分割线----------------------------------------------------

 

redis-trib.rb命令常见用法

1)列出集群节点-cluster nodes

 

复制代码

[root@172-28-37-30 src]# redis-cli -h 172.28.37.30 -c -p 7000

172.28.37.30:7

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值