集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)

1、安装redis节点指定端口
解压redis压缩包,编译安装

[root@localhost redis-3.2.0]# tar xzf redis-3.2.0.tar.gz
[root@localhost redis-3.2.0]# cd redis-3.2.0
[root@localhost redis-3.2.0]# make
[root@localhost redis01]# make install PREFIX=/usr/andy/redis-cluster

  在redis-cluster下 修改bin文件夹为redis01,复制redis.conf配置文件
创建目录redis-cluster并在此目录下再创建7003 7004 7005 7006 7007 7008共6个目录,在7000中创建配置文件redis.conf,内容如下:

daemonize yes #后台启动
port 7001 #修改端口号,从7001到7006
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file nodes.conf #自动生成
cluster-node-timeout 15000 #节点通信时间
protected-mode no
#bind 127.0.0.1 #注释
#是否需要每个节点都可用,集群才算可用,关闭
cluster-require-full-coverage no

  同时把redis.conf复制到其它目录中

2、启动集群

可以写一个命令脚本start-all.sh

cd redis07
./redis-server redis.conf
cd ..
cd redis08
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

  设置权限启动

[root@localhost redis-cluster]# chmod 777 start-all.sh
[root@localhost redis-cluster]# ./start-all.sh

  查看redis进程启动状态

[root@localhost redis-cluster]# ps -ef|grep redis
root 16347 1 0 10月16 ? 00:00:36 ./redis-server *:7007 [cluster]
root 16352 1 0 10月16 ? 00:00:36 ./redis-server *:7008 [cluster]
root 16357 1 0 10月16 ? 00:00:36 ./redis-server *:7003 [cluster]
root 16362 1 0 10月16 ? 00:00:30 ./redis-server *:7004 [cluster]
root 16367 1 0 10月16 ? 00:00:30 ./redis-server *:7005 [cluster]
root 16372 1 0 10月16 ? 00:00:30 ./redis-server *:7006 [cluster]
root 18121 17496 0 08:51 pts/0 00:00:00 grep --color=auto redis

  可以看到redis的6个节点已经启动成功
注意:这里并没有创建集群

查看槽信息,都没有,是因为我们还没有分配槽,稍后分配

[root@localhost redis03]# ./redis-cli -p 7003 cluster slots

  查看集群信息

[root@localhost redis03]# ./redis-cli -p 7003 cluster info

  

[root@localhostredis03]# ./redis-cli -p 7003 cluster nodes

  

集群之间相互握手,只要一个在集群里面的机器meet了其他机器,这个集群里的其他机器也能感知到刚刚meet的集群

使用如下命令:

./redis-cli -p 7003 cluster meet 127.0.0.1 7004

  

用了7000meet了7001和7002,虽然7002没有meet7001,但是他也感知了7001。继续用7000meet剩下所有的机器

所有的机器都感知彼此的存在了,并且集群里面集群的数据增加到了6:

[root@localhost redis03]# ./redis-cli -p 7003 cluster nodes
b749dd28e498347e97af02e6670383e78da2029f 127.0.0.1:7007@17007 slave c88360fb8d0727f12f97809d0fc6f8170509c0e0 0 1571274103230 4 connected
9f3a0d6bb111cd55eda750ebe66b178f322f76a6 127.0.0.1:7006@17006 master - 0 1571274105233 6 connected 0-5461
fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 127.0.0.1:7005@17005 master - 0 1571274106233 0 connected 10923-16383
5127773661482f675b9477779f8c99b980ba2a42 127.0.0.1:7003@17003 myself,slave 9f3a0d6bb111cd55eda750ebe66b178f322f76a6 0 1571274101000 1 connected
c88360fb8d0727f12f97809d0fc6f8170509c0e0 127.0.0.1:7004@17004 master - 0 1571274104231 2 connected 5462-10922
5b146f75357e1adc1b7853aa816182861bf82528 127.0.0.1:7008@17008 slave fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 0 1571274103000 5 connected

  

设置副本

为了保证高可用,把7006设置为7003的从节点,把7007设置为7004的从节点,把7008设置为7005的从节点。

./redis-cli -p 7006 cluster replicate 5127773661482f675b9477779f8c99b980ba2a42

[root@localhost redis03]# ./redis-cli -p 7003 cluster nodes
b749dd28e498347e97af02e6670383e78da2029f 127.0.0.1:7007@17007 slave c88360fb8d0727f12f97809d0fc6f8170509c0e0 0 1571274103230 4 connected
9f3a0d6bb111cd55eda750ebe66b178f322f76a6 127.0.0.1:7006@17006 master - 0 1571274105233 6 connected 0-5461
fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 127.0.0.1:7005@17005 master - 0 1571274106233 0 connected 10923-16383
5127773661482f675b9477779f8c99b980ba2a42 127.0.0.1:7003@17003 myself,slave 9f3a0d6bb111cd55eda750ebe66b178f322f76a6 0 1571274101000 1 connected
c88360fb8d0727f12f97809d0fc6f8170509c0e0 127.0.0.1:7004@17004 master - 0 1571274104231 2 connected 5462-10922
5b146f75357e1adc1b7853aa816182861bf82528 127.0.0.1:7008@17008 slave fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 0 1571274103000 5 connected

  分配slots

redis cluster一共有16383个槽,现在分配到三个

7003的槽0~5461,7004的槽5462~10922,7005的槽10923~16383

编写脚本

vim addslots.sh

start=$1
end=$2
port=$3
for slot in `seq ${start} ${end}`
do
echo "slot:${slot}"
/usr/andy/redis-cluster/redis03/redis-cli -p ${port} cluster addslots ${slot}
done

  记住 ` 这个不是单引号

添加执行权限,并执行

[root@localhost redis-cluster]# chmod 777 addslots.sh 

  

./addslots.sh 0 5461 7003

./addslots.sh 5462 10922 7004

./addslots.sh 10923 16383 7005

  

验证集群

槽已经根据集群和主从分配了

[root@localhost redis03]# ./redis-cli -p 7003 cluster slots
1) 1) (integer) 0
2) (integer) 5461
3) 1) "127.0.0.1"
2) (integer) 7006
3) "9f3a0d6bb111cd55eda750ebe66b178f322f76a6"
4) 1) "127.0.0.1"
2) (integer) 7003
3) "5127773661482f675b9477779f8c99b980ba2a42"
2) 1) (integer) 10923
2) (integer) 16383
3) 1) "127.0.0.1"
2) (integer) 7005
3) "fb91d987d128eb1bd0b75a61b185ec2cc7840aa0"
4) 1) "127.0.0.1"
2) (integer) 7008
3) "5b146f75357e1adc1b7853aa816182861bf82528"
3) 1) (integer) 5462
2) (integer) 10922
3) 1) "127.0.0.1"
2) (integer) 7004
3) "c88360fb8d0727f12f97809d0fc6f8170509c0e0"
4) 1) "127.0.0.1"
2) (integer) 7007
3) "b749dd28e498347e97af02e6670383e78da2029f"

  并且集群处于可用状态

[root@localhost redis03]# ./redis-cli -p 7003 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:6
cluster_stats_messages_ping_sent:54002
cluster_stats_messages_pong_sent:59650
cluster_stats_messages_sent:113652
cluster_stats_messages_ping_received:59650
cluster_stats_messages_pong_received:53999
cluster_stats_messages_received:113649

  自此,手动搭建集群成功。关闭之后下次启动还可以是集群状态,因为信息已经持久化到dump文件里面,也就是data目录下存放的

手动搭建redis cluster的更多相关文章

  1. 手动搭建 redis 集群

    转自http://meia.fun/article/1544161420745 手动搭建 redis 集群 redis 基本命令: 启动 redis 服务:redis-server xxx.conf ...

  2. 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!

    转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208  版权声明:本文为博主 ...

  3. Docker 搭建 Redis Cluster 集群环境

    使用 Docker 搭建 Redis Cluster,最重要的环节就是容器通信的问题,这一块我们在之前的文章中已经给大家解决了<Docker 网络模式详解及容器间网络通信>,本篇文章主要练 ...

  4. Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  5. 手动搭建redis集群(3台)

    安装redis 1.搜索源中的redis包 apt-cache pkgnames | grep redis 2.安装redis-server apt-get install redis-server ...

  6. 搭建redis cluster集群服务

    redis 5.0以下为ruby编写,运行命令时需要安装ruby,而5.0以上则为c编写,可直接安装后运行.因此本文使用redis5.0.5 1.编写配置文件 在 /home 下新建 redis-cl ...

  7. 搭建redis cluster

    1  下载 redis安装包 tar zxvf redis-3.0.2.tar.gz cd redis-3.0.2/ make make install 2安装ruby sudo apt-get in ...

  8. Ubuntu 16.04在搭建Redis Cluster搭建时,使用gem install redis时出现:ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /var/lib/gems/2.3.0 directory.

    注意:千万不要使用sudo来执行gem install redis. 解决方法: sudo apt-get update sudo apt-get install git-core curl zlib ...

  9. Redis Cluster集群搭建与配置

    Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...

随机推荐

  1. python实现建造者模式

    python实现建造者模式 前言 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这些部件的 ...

  2. python常见问题解决方案

    平时工作中经常需要用到这些python小技巧,顺便做个记录 import requests import time def get_pr(domain): pr = 6 time.sleep(1) h ...

  3. Delphi 源代码生成器

  4. [工具] BurpSuite--Intruder功能

    BurpSuite--Intruder功能 0x00 配置说明 intruder是进行爆破的,基本流程是标注请求的爆破参数,然后配置字段,选择爆破方式进行爆破,下面来记录下工具的使用 选中intrud ...

  5. DevExpress Windows 10 v19.1新版亮点:UWP控件新功能全面解析

    行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...

  6. 第二章 psql客户端工具

    第二章 psql客户端工具 pgAdmin是一款功能丰富.开源免费的PostgreSQL图形化工具.psql是PostgreSQL自带的命令行工具,功能全面,是PostgreSQL数据库工程师必须熟练 ...

  7. 【NOIP2016提高A组集训第1场10.29】完美标号

    题目 给定M个二元组(A_i, B_i),求X_1, ..., X_N满足:对于任意(A_i, B_i),有|X_{A_i} - X_{B_i}| = 1成立. 分析 显然,对于二元组(x,y),X_ ...

  8. linux-PXE-12

    以DHCP+DNS模式管理服务器IP地址和主机名.服务器上架前,以其MAC地址为依据,在DHCP中配置主机保留并分配主机名.DHCP结合TFTP提供的PXE服务,提供PXE引导Linux内核和启动镜像 ...

  9. BZOJ 2121: 字符串游戏 区间DP + 思维

    Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对 于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...

  10. Selenium 警告框处理

    警告框分三种类型: alert:显示带有一条指定消息和一个 OK 按钮的警告框. confirm:显示一个带有指定消息和 OK 及取消按钮的对话框. prompt:显示可提示用户进行输入的对话框. 我 ...