阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 3.0 Cluster 集群环境搭建

140次阅读
没有评论

共计 5862 个字符,预计需要花费 15 分钟才能阅读完成。

最近学习用 Redis, 装了个 CentOS 7 虚拟机,在网上参考了很多博文,然后写了一点东东,跟大家共享。

安装 redis 3.0.3

1、首先下载 redis 3.0

wget http://download.redis.io/releases/redis-3.0.0.tar.gz
tar zxvf redis-3.0.0.tar.gz
cd redis-3.0.0

2、编译

make

make 命令执行完成编译后,会在 src 目录下生成 6 个可执行文件,分别是 redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel。
至此,实际就可以到 src 目录下启动 redis:
3、后台启动 redis 服务

./redis-server &

如果没有修改配置,会看到下面的状态:
Redis 3.0 Cluster 集群环境搭建
然后启动 redis 客户端:

./redis-cli 

Redis 3.0 Cluster 集群环境搭建
出现上面的界面,说明成功进入 redis, 可以测试:
Redis 3.0 Cluster 集群环境搭建


上边是我们编译完就运行 redis, 但是通常,我们在编译之后会安装 redis, 这样就可以在所有路径下用 redis 的命令了:

make install

安装后会将 make 编译生成的可执行文件拷贝到 /usr/local/bin 目录下,这样无论在哪儿都可以执行 redis-server 来启动 redis 服务了。
注释:
▲redis 的默认端口号是 6379,(据 redis 的作者 antirez 的博文说,6379 在是手机按键上 MERZ 对应的号码,而 MERZ 取自意大利歌女 Alessia Merz 的名字。而 MERZ 长期以来被 antirez 及其朋友当作愚蠢的代名词。)
▲Redis 有两种存储方式,默认是 snapshot 方式,实现方法是定时将内存的快照 (snapshot) 持久化到硬盘,这种方法缺点是持久化之 后如果出现 crash 则会丢失一段数据。因此在完美主义者的推动下作者增加了 aof 方式。aof 即 append only mode,在写入内存数据的同时将操作命令保存到日志文件。

以后台守护形式运行 Redis
需要读取配置文件方式启动
注意,默认复制过去的 redis.conf 文件的 daemonize 参数为 no,所以 redis 不会在后台运行,我们可以修改 redis.conf 文件,这个文件就是解压后的 redis 根目录下

daemonize yes
redis-server  /usr/redis-3.0.0/redis.conf

查看 redis 进程

ps aux | grep redis

redis cluster 集群搭建

建立本机测试环境
(要让集群正常工作至少需要 3 个主节点,在这里我们要创建 6 个 redis 节点,其中三个为主节点,三个为从节点,对应的 redis 节点的 ip 和端口对应关系如下)

127.0.0.1:7000
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

创建集群需要的目录

mkdir -p /usr/local/cluster
cd /usr/local/cluster
mkdir 7000  7001 7002 7003 7004 7005

修改配置文件 redis.conf

cp /usr/local/redis3.0.0/redis.conf  /usr/local/cluster
vi redis.conf

修改配置文件中的下面选项

port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

修改完 redis.conf 配置文件中的这些配置项之后把这个配置文件分别拷贝到 7000/ 7001/ 7002/ 7003/ 7004/ 7005 目录下面

cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
cp /usr/local/cluster/redis.conf /usr/local/cluster/7001
cp /usr/local/cluster/redis.conf /usr/local/cluster/7002
cp /usr/local/cluster/redis.conf /usr/local/cluster/7003
cp /usr/local/cluster/redis.conf /usr/local/cluster/7004
cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

注意 :拷贝完成之后要修改 7001/7002/7003/7004/7005 目录下面 redis.conf 文件中的 port 参数,分别改为对应的文件夹的名称。
分别启动这 6 个 redis 实例

cd /usr/local/cluster/7000
redis-server redis.conf
cd /usr/local/cluster/7001
redis-server redis.conf
cd /usr/local/cluster/7002
redis-server redis.conf
cd /usr/local/cluster/7003
redis-server redis.conf
cd /usr/local/cluster/7004
redis-server redis.conf
cd /usr/local/cluster/7005
redis-server redis.conf

启动之后使用命令查看 redis 的启动情况 ps aux|grep redis, 如果出现下面的结果,说明启动成功(注意:必须进入到每一个目录下,再执行 redis-server redis.conf)。
Redis 3.0 Cluster 集群环境搭建


执行 redis 的创建集群命令创建集群

cd /usr/local/redis3.0/src
./redis-trib.rb  create --replicas 1 127.0.0.1:7000 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

执行上面的命令的时候会报错,因为是执行的 ruby 的脚本,需要 ruby 的环境。错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装 ruby 的环境,这里推荐使用 yum install ruby 安装

yum install ruby

然后再执行刚才的创建集群命令,还会报错,提示缺少 rubygems 组件,使用 yum 安装
错误内容:
./redis-trib.rb:24:in `require’: no such file to load – rubygems (LoadError)
from ./redis-trib.rb:24

yum install rubygems

再次执行第 6 步的命令,还会报错,提示不能加载 redis,是因为缺少 redis 和 ruby 的接口,使用 gem 安装
错误内容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
gem_original_require': no such file to load -- redis (LoadError) from
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
require’
from ./redis-trib.rb:25

gem install redis

出现错误:

ERROR: Could not find a valid gem‘redis’(>= 0), here is why:
Unable to download data from https://rubygems.org/ – Errno::ECONNRESET: Connection reset by peer – SSL_connect
(https://rubygems.org/latest_specs.4.8.gz)

解决方案
可以求助万能的淘宝镜像站 https://ruby.taobao.org/

gem sources -a https://ruby.taobao.org/

# 然后在执行:
gem install redis

再次执行刚才的创建集群的命令,正常执行。
Redis 3.0 Cluster 集群环境搭建
至此 redis 集群即搭建成功!


使用 redis-cli 命令进入集群环境

redis-cli -c -h 127.0.0.1 -p 7000
# 用 cluster nodes 可以查看节点信息,

redis-trib 默认用前 3 个实例作为 Master,后 3 个作为 Slave。
集群重启:
目前 redis-trib 的功能还比较弱,需要重启集群的话先手动 kill 掉各个进程,删除掉所有 redis instance 的 aof、node-config、rdb 文件(这样,之前的数据会丢失),然后重新启动就可以了,如果不删除原实例的文件,重启的时候会报错。

 ps -ef | grep redis | awk '{print $2}' | xargs kill

故障转移
在高可用性方面,Redis 可算是能够”Auto”一把了!Redis Cluster 重用了 Sentinel 的代码逻辑,不需要单独启动一个 Sentinel 集群,Redis Cluster 本身就能自动进行 Master 选举和 Failover 切换。

执行:set name“zhangsan”, 发现 name 被存到了 7000 节点上了。
下面我们故意 kill 掉 7000 结点,之后可以看到结点状态变成了 fail,而 Slave 7003 被选举为新的 Master。
尝试查询之前保存在 7000 上的 Key“name”,可以看到 7003 顶替上来继续提供服务,整个集群没有受到影响。
性能检测:
redis 自己提供了一个性能测试工具 redis-benchmark. redis-benchmark 可以模拟 N 个机器,同时发送 M 个请求。
用法:

redis-benchmark [-h] [-p] [-c] [-n <requests]> [-k]
-h <hostname>      Server hostname (default 127.0.0.1)
-p <port>          Server port (default 6379)
-s <socket>        Server socket (overrides host and port)
-c <clients>       Number of parallel connections (default 50) 并发客户端数
-n <requests>      Total number of requests (default 10000)  请求数量
-d <size>          Data size of SET/GET value in bytes (default 2) set 数据大小
-k <boolean>       1=keep alive 0=reconnect (default 1) 是否采用 keep alive 模式
-r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD
  Using this option the benchmark will get/set keys
  in the form mykey_rand:000000012456 instead of constant
  keys, the <keyspacelen> argument determines the max
  number of values for the random number. For instance
  if set to 10 only rand:000000000000 - rand:000000000009
  range will be allowed.
-P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline). 是否采用 Pipeline 模式请求,默认不采用
-q                 Quiet. Just show query/sec values 仅仅显示查询时间
--csv              Output in CSV format  导出为 CSV 格式
-l                 Loop. Run the tests forever 循环测试
-t <tests>         Only run the comma separated list of tests. The test
                    names are the same as the ones produced as output.
-I                 Idle mode. Just open N idle connections and wait.

经过测试,我的笔记本可以处理每秒 3 万多个请求,性能还不错。
Redis 3.0 Cluster 集群环境搭建

 

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

CentOS 7 下 Redis 的安装与配置 http://www.linuxidc.com/Linux/2017-02/140363.htm

Ubuntu 14.04 安装 Redis 与简单配置 http://www.linuxidc.com/Linux/2017-01/139075.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Redis 单机 & 集群离线安装部署 http://www.linuxidc.com/Linux/2017-03/141403.htm

CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Ubuntu 15.10 下 Redis 集群部署文档 http://www.linuxidc.com/Linux/2016-06/132340.htm

Redis 实战 中文 PDF http://www.linuxidc.com/Linux/2016-04/129932.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146380.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5862字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中