共计 5490 个字符,预计需要花费 14 分钟才能阅读完成。
环境:
CentOS 6.7
Redis 3.0.3
3 台虚拟机,IP 分别是 server1:192.168.1.1 server2:192.168.1.2 server3:192.168.1.3
(因 redis 机器最少要有 3 主 3 从,这里就用 3 台虚拟机来方便区分,实在没机器的可以在 1 台机上开 6 个节点)
拿到机器后,首先把环境弄好
yum groupinstall "Development tools" -y
yum install wget -y
首先安装 redis
cd /usr/local/src/
wget http://download.redis.io/releases/redis-3.0.3.tar.gz
tar -zxvf redis-3.0.3.tar.gz
解压出来后要到目录里面编译安装
cd redis-3.0.3
make && make install
在这里,可能会出现如下错误:(如没有,请略过)
make[1]: Entering directory `/redis/src’
CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error “Newer version of jemalloc required”
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/redis/src’
make: *** [all] Error 2
原因是没有安装jemalloc 内存分配器,可以安装 jemalloc 或 直接 输入 make MALLOC=libc && make install
安装好 redis 后就是要创建节点了,3 主 3 从总共 6 个
以 server1 为例
首先创建 redis 集群的目录
cd /usr/local
mkdir redis
cd ./redis
然后把刚才已经编译好的 redis 包复制过来
cp -r /usr/local/src/redis-3.0.3 /usr/local/redis/ && mv /usr/local/redis/redis-3.0.3 7000 #这里以 7000 7001 端口为例,为方便管理把文件夹以端口号命名
cp -r /usr/local/src/redis-3.0.3 /usr/local/redis/ && mv /usr/local/redis/redis-3.0.3 7001
此步骤分别在其余的 2 台机子上重复一遍,那么 redis 的6个节点就算简历完毕。
接下来要做的就是修改各个节点的配置文件
以 7000 节点为例:
cd /usr/local/redis/7000
vi redis.conf #主要修改一下这几个参数
daemonize yes #后台运行 redis
pidfile /var/run/redis_7000.pid #pidfile 文件对应 7000
port 7000 #监听的端口号
cluster-enabled yes #开启集群,这个原本有的把注释 #去掉就好了
cluster-config-file nodes.conf #集群的配置 配置文件首次启动自动生成
cluster-node-timeout 5000 #请求超时的时间
appendonly yes #aof 日志开启,按需开启,每次写操作都会记录成 1 条日志
bind 192.168.1.1 #这里要改成 server 的 IP,不改的话后续会报错
其他节点的配置只需把 pidfile 对应的文件和端口号改下就好了,一般建议 7000 7001 7002 这样一直写上去
当所有的节点都配置好后,就启动 redis 了
cd /usr/local/redis/7000
redis-server ./redis.conf
# 这里是先进到 7000 节点的目录再开启,因为我发现如果直接输入 redis-server /usr/local/redis/7000/redis.conf 的话,自动生成的 appendonly.aof nodes.conf 文件会在当前目录下,而不是在对应节点的目录下。大家可以试验一下。
启动完成后,循例检查下。
ps aux |grep redis netstat -an |grep 7000/7001
正常情况下是可以看到 7000 7001 17000 17001 端口的
7000,7001 是用于客户端访问,17000,17001 是用于集群内部节点之间的访问的
当所有的节点都配置并启动完之后,我们要做的就是利用这些节点来创建集群
官方提供了一个专门的工具 redis-trib.rb
配合使用 redis-trib.rb 还要安装 ruby
yum -y install ruby ruby-devel rubygems rpm-build
装好后再用 gem 命令来安装 redis 接口,至于这个 gem 的话我也不大了解,
gem install redis
在 3 台 server 上都安装好后,就可以开始创建集群了
/usr/local/redis/7000/src/redis-trib.rb
运行 redis-trib.rb 后就可以看到 redis-trib.rb 的具体用法,如下:
Usage: redis-trib <command><options><arguments ...>
reshard host:port
--to <arg>
--yes
--slots <arg>
--from <arg>
check host:port
call host:port command arg arg .. arg
set-timeout host:port milliseconds
add-node new_host:new_port existing_host:existing_port
--master-id <arg>
--slave
del-node host:port node_id
fix host:port
import host:port
--from <arg>
help (show this help)
create host1:port1 ... hostN:portN
--replicas <arg>
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
那么我们这里用的是 create 新建集群
/usr/local/redis/7000/src/redis-trib.rb
create --replicas 1 192.168.1.1:7000 192.168.1.2:7000 192.168.1.3:7000 192.168.1.1:7001 192.168.1.2:7001 192.168.1.3:7001
这里讲一下,使用 iptables 或者其他防火墙的话一定要把端口开放出来,否则会创建失败。
命令一定要以 IP:端口形式来输入,千万别用域名。
参数 –replicas 1 是自动为每台 master 配置 1 个 slave 上面有 6 个节点 会按规则生成 3 个主节点(master)3 个从节点(slave)
注意:前面 3 个 IP redis 会默认他为主节点。
输入完命令后会提示
Can I set the above configuration? (type ‘yes’ to accept):
这里输入 yes 就可以了
然后就会弹出如下信息:
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 5ca195e70a7d6d3b2756f06bfd5bb62f133ad236 127.0.0.1:7000
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: a79ab5c1558f64d37efb6ad3e775bcd32bee70fc 192.168.20.186:7000
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: ebbc18dca8215930cf6430c39671b7660ca1de0f 192.168.20.187:7001
slots: (0 slots) slave
replicates 5ca195e70a7d6d3b2756f06bfd5bb62f133ad236
S: c195573125f0d0a87b0f1076dd7de392aa90a5f3 192.168.20.186:7001
slots: (0 slots) slave
replicates 0e590350177d69f337dc88188545dfe3c4c75742
M: 0e590350177d69f337dc88188545dfe3c4c75742 192.168.20.184:7000
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: b29210a818e15b1097422933163e92722c624ad8 192.168.20.184:7001
slots: (0 slots) slave
replicates a79ab5c1558f64d37efb6ad3e775bcd32bee70fc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
这样子就可以了。至于测试的话可以从其他文章里面找到
附:
#redis 常见集群报错处理
1. 配置完所有主节点后, 报 ” ERR Invalid node address specified”
由于 redis-trib.rb 对域名或主机名支持不好, 故在创建集群的时候要使用 ip:port 的方式
redis-trib.rb create ip1:port1 ip2:port2 ip3:port3
2. 创建集群时报某个 err slot 0 is already busy (redis::commanderror)
这是由于之间创建集群没有成功, 需要将 nodes.conf 和 dir 里面的文件全部删除(注意不要删除了 redis.conf)
3. 创建集群时一直处于 ”Waiting for the cluster to join………………………………” 的状态
这个问题原因不知, 但解决方法是在 redis.conf 文件中把 bind 127.0.0.1 本地环回口改为物理接口.
4. 安装 ruby redis 时长时间没响应
这是由于大家知道的网络原因, 解决办法是改 ruby 源 (请自行 baidu) 或手动安装
下面关于 Redis 的文章您也可能喜欢,不妨参考下:
Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.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
Linux 下 Redis 集群安装部署及使用详解 http://www.linuxidc.com/Linux/2017-03/141683.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
Redis 热迁移实战总结 http://www.linuxidc.com/Linux/2017-02/141083.htm
Redis3.0 配置文件详解 http://www.linuxidc.com/Linux/2017-03/141369.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/141807.htm