本文记录redis安装到集群搭建详细过程
环境
- Centos7
- 3主3从方式
- redis-3.2.12.tar.gz
搭建
安装redis
需要gcc环境来编译c,故先安装gcc
安装gcc
yum install gcc-c++
下载redis源码包上传到linux系统
解压、编译、安装
个人习惯源码包放到/usr/local/src下,在此直接解压
- 解压后进到解压目录编译
make
- 指定安装目录进行安装
make install PREFIX=/usr/local/redis
执行命令时如下:
[root@mini2 redis]# make install PREFIX=/usr/local/redis
cd src && make install
make[1]: Entering directory `/usr/local/src/redis/src'
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: Leaving directory `/usr/local/src/redis/src'
它建议先make test,那就先test一下,执行make test
,一切就绪后在次执行之前的安装命令
启动
把原解压目录下的redis.conf文件也可以复制到安装目录
/usr/local/redis
下
先修改配置文件支持后台启动
daemonize yes
[root@mini2 bin]# pwd
/usr/local/redis/bin
[root@mini2 bin]# ./redis-server redis.conf
[root@mini2 bin]# ./redis-cli -p 6379
127.0.0.1:6379>
集群的搭建
一般redis集群3主3从足够。故在此搭建一个伪分布式的集群,使用6个redis实例来模拟。 且redis的集群需要一个ruby程序来创建,故先安装ruby环境
安装ruby环境
yum install ruby
yum install rubygems
在/usr/local/redis
创建redis-cluster文件夹及配置6个实例
在该文件夹中创建6个redis实例,即6个conf配置文件,端口号从7001~7006
至少需要配置的信息如下:
bind 192.168.31.202
port 7001
daemonize yes
cluster-enabled yes
cluster-config-file nodes-7001.conf # 此处每个节点不能一样
创建集群的ruby脚本redis-trib.rb
把创建集群的ruby脚本redis-trib.rb(在redis源码解压目录下)复制到redis-cluster文件夹下
安装redis管理工具
- 下载ruby环境下Redis的驱动,考虑到兼容性,这里下载的是3.2.2版本:https://rubygems.org/gems/redis/versions/3.2.2
注意:下载在页面右下角相关连接一项中
- 把
redis-3.2.2.gem
上传至服务器进行安装,这里放到redis-cluster中 - 安装
[root@mini2 bin]# gem install redis-3.2.2.gem
Successfully installed redis-3.2.2
Parsing documentation for redis-3.2.2
Installing ri documentation for redis-3.2.2
1 gem installed
启动所有实例
- 这里创建一个脚本来同时启动六个,本脚本放在redis-cluster文件夹中
startall.sh
#!/bin/bash
echo 'start to setup redis7001'
../bin/redis-server redis7001.conf
echo 'start to setup redis7002'
../bin/redis-server redis7002.conf
echo 'start to setup redis7003'
../bin/redis-server redis7003.conf
echo 'start to setup redis7004'
../bin/redis-server redis7004.conf
echo 'start to setup redis7005'
../bin/redis-server redis7005.conf
echo 'start to setup redis7006'
../bin/redis-server redis7006.conf
- 给予执行权限
chmod +777 startall.sh
- 启动
./startall.sh
利用工具创建集群
最后本次测试所有的文件结构如下:
[root@mini2 redis]# tree --charset ASCII
.
|-- bin
| |-- redis-3.2.2.gem
| |-- redis-benchmark
| |-- redis-check-aof
| |-- redis-check-dump
| |-- redis-check-rdb
| |-- redis-cli
| |-- redis.conf
| |-- redis-sentinel -> redis-server
| |-- redis-server
| `-- redis-trib.rb
`-- redis-cluster
|-- redis7001.conf
|-- redis7002.conf
|-- redis7003.conf
|-- redis7004.conf
|-- redis7005.conf
|-- redis7006.conf
|-- redis.conf
|-- redis-trib.rb
`-- startall.sh
创建集群,如下执行命令
[root@mini2 redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.31.202:7001 192.168.31.202:7002 192.168.31.202:7003 192.168.31.202:7004 192.168.31.202:7005 192.168.31.202:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.31.202:7001
192.168.31.202:7002
192.168.31.202:7003
Adding replica 192.168.31.202:7004 to 192.168.31.202:7001
Adding replica 192.168.31.202:7005 to 192.168.31.202:7002
Adding replica 192.168.31.202:7006 to 192.168.31.202:7003
M: ec45c72104fcb6e848ed914339b3b96cadf6ebcf 192.168.31.202:7001
slots:0-5460 (5461 slots) master
M: 681175bb7d8600ffe4429b524887738091e14331 192.168.31.202:7002
slots:5461-10922 (5462 slots) master
M: 301e825acb7bffeb1fe75f03090dcbe70fa7b519 192.168.31.202:7003
slots:10923-16383 (5461 slots) master
S: 80329ad787686dd36cd7d8b884bcdccb1e84f5d0 192.168.31.202:7004
replicates ec45c72104fcb6e848ed914339b3b96cadf6ebcf
S: 3dacc4d2384c587ef075f2a7e72b964e2d0c1513 192.168.31.202:7005
replicates 681175bb7d8600ffe4429b524887738091e14331
S: b174fd7355a3288d96db154179f8ff5fe4db671c 192.168.31.202:7006
replicates 301e825acb7bffeb1fe75f03090dcbe70fa7b519
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.31.202:7001)
M: ec45c72104fcb6e848ed914339b3b96cadf6ebcf 192.168.31.202:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 681175bb7d8600ffe4429b524887738091e14331 192.168.31.202:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: 301e825acb7bffeb1fe75f03090dcbe70fa7b519 192.168.31.202:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 80329ad787686dd36cd7d8b884bcdccb1e84f5d0 192.168.31.202:7004
slots: (0 slots) slave
replicates ec45c72104fcb6e848ed914339b3b96cadf6ebcf
S: b174fd7355a3288d96db154179f8ff5fe4db671c 192.168.31.202:7006
slots: (0 slots) slave
replicates 301e825acb7bffeb1fe75f03090dcbe70fa7b519
S: 3dacc4d2384c587ef075f2a7e72b964e2d0c1513 192.168.31.202:7005
slots: (0 slots) slave
replicates 681175bb7d8600ffe4429b524887738091e14331
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
测试集群
如下执行:注意加上-c
表示连接集群,否则连不上
[root@mini2 redis-cluster]# ../bin/redis-cli -h 192.168.31.202 -p 7002 -c
192.168.31.202:7002> set a 123
-> Redirected to slot [15495] located at 192.168.31.202:7003
OK
192.168.31.202:7003> get a
"123"
192.168.31.202:7003> keys *
1) "a"
以上就是完整的linux上创建redis集群的过程,仅做记录,便于日后参考