1.下载redis的安装包.
2.在/usr/local/目录下创建redis-cluster 文件夹,并将redis解压到此目录中
sudo tar -zxvf redis-4.0.6.tar.gz -C /usr/local/redis-cluster
3.进入redis解压目录
cd /usr/local/redis-cluster/redis-4.0.6
4.进行安装
sudo make && make install
此处建议先进行test测试,如果有依赖问题好及时解决
sudo make test
5.安装完成后,将redis-4.0.6文件夹复制6份,分别命名为redis01,redis02,… redis06
此时文件夹目录如下:
redis-cluster
- redis-4.0.6
- redis01
- redis02
- redis03
- redis04
- redis05
- redis06
6.修改redis配置文件redis.conf(如:到redis01目录下,修改redis01的redis.conf)
!!因为配置文件过于庞大,各个配置项相隔太远,不好管理,所以我将配置项复制了一份放在文件开始的位置,后边出现的相同配置项将其注释掉即可。
#统一配置,将对应的配置项注解掉,提前到此处
```
#All the config is move to here
#redis后台运行
daemonize yes
#端口7001,7002,7003
port 7001
#集群的配置配置文件首次启动自动生成 7000,7001,7002
cluster-config-file nodes_7001.conf
#aof日志文件名
appendfilename "appendonly.7001.aof"
#pidfile文件对应7000,7001,7002,7003
pidfile /var/run/redis_7001.pid
#开启集群 把注释#去掉
cluster-enabled yes
#请求超时 设置5秒够了
cluster-node-timeout 5000
#aof日志开启有需要就开启,它会每次写操作都记录一条日志
appendonly yes
#绑定ip,如果想要远程登录,就将其注释掉
#bind 127.0.0.1
#登陆密码 完成集群前不要设置,否则无法进行主从节点的链接
#requirepass passwd
#masterauth passwd
#是否开启保护模式,如果想要远程操作(非本机操作)就将其设为no,否则为yes
protected-mode no
7.6个文件夹全部修改完成后,执行命令启动redis-server
cd /usr/local/redis-cluster/redis01 &&
redis-server redis.conf
cd /usr/local/redis-cluster/redis02 &&
redis-server redis.conf
cd /usr/local/redis-cluster/redis03 &&
redis-server redis.conf
cd /usr/local/redis-cluster/redis04 &&
redis-server redis.conf
cd /usr/local/redis-cluster/redis05 &&
redis-server redis.conf
cd /usr/local/redis-cluster/redis06 &&
redis-server redis.conf
(最后一条要有回车)
若提示没有权限,就给对应的文件添加权限,此处建议一劳永逸的方法
sudo chown -R (your user name) /usr/local/redis-cluster
此命令将redis-cluster下所有文件的所有者更改为当前用户
再次执行启动命令
8.检查是否启动成功
执行ps -ef|grep redis查看是否启动
501 61887 1 0 4:27下午 ?? 0:00.02 redis-server 127.0.0.1:7001 [cluster]
501 61894 1 0 4:27下午 ?? 0:00.02 redis-server 127.0.0.1:7002 [cluster]
501 61901 1 0 4:27下午 ?? 0:00.02 redis-server 127.0.0.1:7003 [cluster]
501 61908 1 0 4:27下午 ?? 0:00.02 redis-server 127.0.0.1:7004 [cluster]
501 61915 1 0 4:27下午 ?? 0:00.02 redis-server 127.0.0.1:7005 [cluster]
501 61923 1 0 4:27下午 ?? 0:00.02 redis-server 127.0.0.1:7006 [cluster]
501 61926 56774 0 4:27下午 ttys000 0:00.00 grep redis
如果出现以上结果,表示启动成功
9.进行主从节点的链接
进入redis的安装目录4.0.6
cd /usr/local/redis-4.0.6/src &&
./redis-trib.rb create --replicas 1 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 127.0.0.1:7006
若没有问题,在确认界面输入yes;
注意:--replicas 1 代表每个master有一个slave,还有就是前面三个是主服务,后面三个从服务地址,集群配置成功。
PS:此处用到ruby环境,如果未安装ruby的,请自行百度如何安装配置ruby环境,ruby版本要求2.2.2及以上
若出现以下提示,表示操作成功
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: 692301fa80af9870bb258c34b553590fbced72ad 127.0.0.1:7001
slots:0-5460 (5461 slots) master
M: 164295b1736fb5fc244abf0a2e57774d938a7262 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
M: 0ee3bde15b2caf32df19ef85d874c228be8d9342 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
S: 657967366913fff237e091320761ea7ef9544893 127.0.0.1:7004
replicates 692301fa80af9870bb258c34b553590fbced72ad
S: 13c976fada6a8537826b2585a5dabad6fd2a4ece 127.0.0.1:7005
replicates 164295b1736fb5fc244abf0a2e57774d938a7262
S: 30098db4933f13b02ef2a30a5070617f0ae58fd4 127.0.0.1:7006
replicates 0ee3bde15b2caf32df19ef85d874c228be8d9342
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 127.0.0.1:7001)
M: 692301fa80af9870bb258c34b553590fbced72ad 127.0.0.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 13c976fada6a8537826b2585a5dabad6fd2a4ece 127.0.0.1:7005
slots: (0 slots) slave
replicates 164295b1736fb5fc244abf0a2e57774d938a7262
M: 0ee3bde15b2caf32df19ef85d874c228be8d9342 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 164295b1736fb5fc244abf0a2e57774d938a7262 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 657967366913fff237e091320761ea7ef9544893 127.0.0.1:7004
slots: (0 slots) slave
replicates 692301fa80af9870bb258c34b553590fbced72ad
S: 30098db4933f13b02ef2a30a5070617f0ae58fd4 127.0.0.1:7006
slots: (0 slots) slave
replicates 0ee3bde15b2caf32df19ef85d874c228be8d9342
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
PS:网上有教程说,进行完这一步,接下来要进行slots的分配,这个应该在3.x.x的版本需要,本次搭建并未进行slots的分配,系统自动完成了slots的分配工作
10.远程访问控制
现在我们已经搭建完redis的集群,该集群有三个主节点,三个从节点
本机登录redis进行测试
redis-cli -h localhost -p 7001
回车后会进入7001节点
192.168.3.3:7001>
此时表示我们的集群服务已经可用,下面进行远程登录的一些配置
针对目前很多的信息安全事件,如果我们的redis要在远程进行控制,加一些访问控制无疑是最好的
1.首先,停掉所有redis服务,先使用ps -ef | grep redis 列出所有的redis进程,并获取到pid
2.使用kill -9 pid pid ... pid 的方式,杀掉这6个redis-server进程
3.修改我们从redis01到redis06中的redis.conf文件
#登陆密码 完成集群前不要设置,否则无法进行主从节点的链接
#requirepass passwd
#masterauth passwd
将requirepass和masterauth注释打开
使其如下:
requirepass your-passwd
masterauth your-passwd
4.重新启动redis-server完成配置
远程登录测试
笔者使用的是ubuntu16.04LTS
输入redis-cli -h 192.168.3.3 -p 7001 -a yourpasswd
提示找不到redis-cli,这是因为笔者系统中并未安装redis及相关组件,这里笔者只需要使用远程登录组件,就不需要安装redis
直接运行 sudo apt-get install redis-tools
等待安装完成即可
完成后,输入命令 redis-cli -a 192.168.3.3 -p 7001 -a yourpasswd
登录成功后,进入redis控制台:
$ redis-cli -h 192.168.3.3 -p 7001 -a yourpasswd
192.168.3.3:7001>
输入测试 set a 1
OK
有时会出现
(error) MOVED 15495 127.0.0.1:7003
这并不是说我们配置有误,而是redis算法中,将我们的键值对计算之后,存放到了7003节点的对应slots中