在上一篇笔记中,我们已经搭建好了单机版的redis环境,也是这篇笔记的基础,大家有需要的可以取看一下,只是最简单的下载配置而已:Redis环境搭建。这篇笔记我们要来搭建一个redis的集群,在redis5.0之后将ruby整合到redis-cli内,使集群的搭建进一步简化。下面开始搭建。
环境
CentOS7,redis6.0.5
一、搭建
这一篇笔记是基于我上一篇笔记来写的,所以单机版的redis已经搭建好了。我这里是有两台服务器,当然是两台虚拟机,分别是:
192.168.157.6
192.168.157.7
打算在6上部署三个节点,在7上也部署三个节点,实现三主三从的模式,ip端口如下。
192.168.157.6:7000
192.168.157.6:7001
192.168.157.6:7002
192.168.157.7:7003
192.168.157.7:7004
192.168.157.7:7005
1、创建redis_cluster 目录
登录到192.168.157.6
cd /usr/local/redis
mkdir redis_cluster
2、创建节点目录
cd redis_cluster/
mkdir 7000 7001 7002
3、建立配置文件
在7000,7001,7002建立redis的配置文件redis.conf,内容如下
#端口7000,7002,7003
port 7000
#改为其他节点机器可访问的ip 可以使用ifconfig查看一下
bind 192.168.157.6
#redis后台运行
daemonize yes
#aof日志开启 有需要就开启,它会每次写操作都记录一条日志
appendonly yes
#pidfile文件对应7000,7001,7002
pidfile /var/run/redis_7000.pid
#开启集群
cluster-enabled yes
#集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-config-file nodes_7000.conf
#请求超时 默认15秒,可自行修改
cluster-node-timeout 15000
每个节点修改对应的端口号。
4、登录到另一台机器,做同样的操作
只不过目录为7003,7004,7005,配置文件也对应修改。
5、启动各个节点
在 192.168.157.6上执行
cd /usr/local/redis/src
redis-server ../redis_cluster/7000/redis.conf
redis-server ../redis_cluster/7001/redis.conf
redis-server ../redis_cluster/7002/redis.conf
在 192.168.157.7上执行
cd /usr/local/redis/src
redis-server ../redis_cluster/7003/redis.conf
redis-server ../redis_cluster/7004/redis.conf
redis-server ../redis_cluster/7005/redis.conf
6、检查是否启动成功
[root@linux6 src]# ps -ef|grep redis
root 9374 1 0 05:52 ? 00:00:00 redis-server 192.168.157.6:7000 [cluster]
root 9379 1 0 05:52 ? 00:00:00 redis-server 192.168.157.6:7001 [cluster]
root 9384 1 0 05:52 ? 00:00:00 redis-server 192.168.157.6:7002 [cluster]
root 9390 8483 0 05:57 pts/0 00:00:00 grep --color=auto redis
[root@linux7 src]# ps -ef|grep redis
root 8889 1 0 05:53 ? 00:00:00 redis-server 192.168.157.7:7003 [cluster]
root 8894 1 0 05:53 ? 00:00:00 redis-server 192.168.157.7:7004 [cluster]
root 8899 1 0 05:53 ? 00:00:00 redis-server 192.168.157.7:7005 [cluster]
root 8904 8085 0 05:57 pts/0 00:00:00 grep --color=auto redis
[root@linux6 src]# netstat -tnlp | grep redis
tcp 0 0 192.168.157.6:17000 0.0.0.0:* LISTEN 9374/redis-server 1
tcp 0 0 192.168.157.6:17001 0.0.0.0:* LISTEN 9379/redis-server 1
tcp 0 0 192.168.157.6:17002 0.0.0.0:* LISTEN 9384/redis-server 1
tcp 0 0 192.168.157.6:7000 0.0.0.0:* LISTEN 9374/redis-server 1
tcp 0 0 192.168.157.6:7001 0.0.0.0:* LISTEN 9379/redis-server 1
tcp 0 0 192.168.157.6:7002 0.0.0.0:* LISTEN 9384/redis-server 1
[root@linux7 src]# netstat -tnlp | grep redis
tcp 0 0 192.168.157.7:17003 0.0.0.0:* LISTEN 8889/redis-server 1
tcp 0 0 192.168.157.7:17004 0.0.0.0:* LISTEN 8894/redis-server 1
tcp 0 0 192.168.157.7:17005 0.0.0.0:* LISTEN 8899/redis-server 1
tcp 0 0 192.168.157.7:7003 0.0.0.0:* LISTEN 8889/redis-server 1
tcp 0 0 192.168.157.7:7004 0.0.0.0:* LISTEN 8894/redis-server 1
tcp 0 0 192.168.157.7:7005 0.0.0.0:* LISTEN 8899/redis-server 1
7、启动集群
这里不需要用ruby来启动了,在redis5.0之后将ruby整合到redis-cli内。直接执行如下命令即可,若是还用以前的命令启动会提示:
redis-trib.rb create --replicas 1 192.168.157.6:7000 192.168.157.6:7001 192.168.157.6:7002 192.168.157.7:7003 192.168.157.7:7004 192.168.157.7:7005
/usr/bin/env: ruby: 没有那个文件或目录
此时可以先安装ruby
yum install ruby
但是还是会提示:
WARNING: redis-trib.rb is not longer available!
You should use redis-cli instead.
All commands and features belonging to redis-trib.rb have been moved
to redis-cli.
In order to use them you should call redis-cli with the --cluster
option followed by the subcommand name, arguments and options.
Use the following syntax:
redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]
Example:
redis-cli --cluster create 192.168.157.6:7000 192.168.157.6:7001 192.168.157.6:7002 192.168.157.7:7003 192.168.157.7:7004 192.168.157.7:7005 --cluster-replicas 1
To get help about all subcommands, type:
redis-cli --cluster help
所以这里直接改为如下命令启动即可,完全不需要安装ruby环境:
redis-cli --cluster create 192.168.157.6:7000 192.168.157.6:7001 192.168.157.6:7002 192.168.157.7:7003 192.168.157.7:7004 192.168.157.7:7005 --cluster-replicas 1
不需要手动指定什么主从,redis自己会分配,后面的1表示 从节点个数/主节点个数=1 。
8、集群测试
[root@linux7 src]# redis-cli -h 192.168.157.6 -p 7000
192.168.157.6:7000> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.157.7,port=7005,state=online,offset=280,lag=1
master_replid:66adef8fe3a5cbfc46426b3f657ae55f7557682e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:280
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:280
192.168.157.6:7000>
可以看到192.168.157.6:7000是master,有一个从节点是192.168.157.7,port=7005。
设置值
set redis cluster
然后我们连接另一个节点。
[root@linux6 src]# redis-cli -h 192.168.157.7 -p 7003
192.168.157.7:7003> get redis
提示:(error) MOVED 1151 192.168.157.6:7000
那是因为我们启动客户端的时候没有用集群方式启动,加上参数-c:
[root@linux6 src]# redis-cli -c -h 192.168.157.7 -p 7003
192.168.157.7:7003> get redis
-> Redirected to slot [1151] located at 192.168.157.6:7000
"cluster"
192.168.157.6:7000>
完美!
当然如果要删除集群然后重新建立集群的话,就先需要把个src目录下的nodes_port.conf信息删除然后从新执行新建集群的命令即可。
redis-cli --cluster create 192.168.157.6:7000 192.168.157.6:7001 192.168.157.6:7002 192.168.157.7:7003 192.168.157.7:7004 192.168.157.7:7005 --cluster-replicas 1
二、总结
不用ruby真的太爽了,用ruby贼麻烦,要安装各种各样的环境,早百年之前就不爽这个设定!