在搭建Redis集群时,到底选择几个节点合适呢?到底是应该选择奇数节点还是偶数节点呢?我们来通过一组示例来进行分析:
节点 | 3节点环境 | 4节点环境 | 5节点环境 | 6节点环境 | 以此类推 ... ... |
节点主从分配 | 1master 2slave | 2master 2slave | 2master 3slave | 3master 3slave | |
存储空间 | 最大等于1个节点的容量(如果是2个master的话,name数据丢失一部分) | 2个节点的容量 | 2个节点的容量 | 3个节点的容量 | |
允许几个节点故障 | 允许1个节点故障 | 允许1个节点故障(集群中半数以上节点认为故障,才会选举) | 允许2个节点故障 | 允许2个节点故障 |
通过对比我们发现,Redis集群选则几个节点,选择奇数偶数节点,还是得看也无需求。不过,企业既然选择了Redis集群,也不差这一个节点的钱,一般做法是偶数节点的Redis集群。
单机版Redis安装,请移步:Redis介绍 && 安装,此处仅作简单介绍(安装至192.168.204.201)
①使用命令:tar zxvf redis-5.0.3.tar.gz -C /usr/local/lib 解压缩至/usr/local/lib目录下
②进入redis-5.0.3目录;
③使用命令:yum install gcc,来安装gcc;
④执行命令:make,来完成编译。
提示:
①如果出现如下提示,则说明未安装gcc,gcc-4.4.7-4.el6.x86_64.rpm,使用命令:yum install gcc,来安装gcc。
/bin/sh: cc: command not found
make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory `/usr/local/lib/redis-5.0.3/src‘
make: *** [all] Error 2
②如果出现如下提示,则将执行 make 改为执行 make MALLOC=libc,可能是因为编译库的问题。再执行 make install 执行成功后,到此编译安装结束。
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 `/usr/local/lib/redis-5.0.3/src‘
make: *** [all] Error 2
已经在192.168.204.201节点安装单节点Redis,如需集群搭建,我们需要对Redis中配置文件 redis.conf 进行配置;
①通过 vi 或者 vim ,进入 redis.conf 文件进行编辑,编辑如下几项即可:
//1.端口(默认6379,如果机器不够可能会在一个机器部署多个节点,此处端口则需要修改,反之不需要修改,使用默认即可)
port 6379
//2.本机ip(默认127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群;
//如果这行写成当前节点机器固定ip,这样本机或者其他客户端通过命令行连接,则需要指定ip和port了(命令:./redis-cli -h 192.168.204.202 -p 6379)
//切记:集群搭建完成后,也可以将bind这行注释掉,这样任何客户端都可以连接该节点了();)
bind 127.0.0.1
//3.配置后台启动
daemonize yes #后台启动
//4.是否启动集群模式(集群需要修改为yes)
cluster-enabled yes #启动集群模式
//5.指定集群节点超时时间(打开注释即可)
cluster-node-timeout 15000
//6.指定集群节点的配置文件(打开注释即可)
// 这个文件不需要手工编辑,它由Redis节点创建和更新.每个Redis群集节点都需要不同的群集配置文件.确保在同一系统中运行的实例没有重叠群集配置文件名
cluster-config-file nodes-6379.conf
//7.(建议)指定redis集群持久化方式(默认rdb,建议使用aof方式,此处是否修改不影响)
//(1)如需了解rdb和aof区别,请移步:https://blog.csdn.net/lzb348110175/article/details/88225011
//(2)了解aof重写,请移步:https://blog.csdn.net/lzb348110175/article/details/99294016
appendonly yes #指定使用aof持久化
//8.是否处于保护模式
//此处涉及到bind部分,如果bind为指定本机的ip,则此处可以不修改;如bind处你注释掉了,则此处需要修改为非保护模式
protected-mode no #非保护模式
②进入redis目录,cd /usr/local/lib/redis-5.0.3,通过如下命令:src/redis-server ../redis.conf,即可启动redis服务
③通过scp命令,配置免密登陆,将192.168.204.201节点的redis-5.0.3文件夹,直接发送到其他5台节点。如需了解scp命令,请移步:Linux命令---scp;如需了解免密登陆配置,请移步:ZooKeeper集群批量启动(本文有免密登陆配置)
命令:scp -r /usr/local/lib/redis-5.0.3 [email protected]:/usr/local/lib
scp -r /usr/local/lib/redis-5.0.3 [email protected]:/usr/local/lib .........
④在其他5台机器,通过②中命令,便可以将所有节点Redis服务启动,如果启动正常,请继续往下看
⑤开放指定端口,如果你每个节点都是使用6379端口,那么你需要开放该端口。如何开放指定端口,请移步:Linux开放指定端口。
此处切记,这里还有一个Redis集群总线的概念,在你开放6379端口的同时,需要开放Redis集群总线端口,集群总线端口为你使用端口+10000。如果你使用6379,那么Redis集群总线端口就是:16379(Redis集群总线,可自行百度)
然后执行命令:service iptables restart,重新启动防火墙,使配置生效
⑥集群配置
集群配置分为手动搭建和工具搭建两种方式:接下来分别讲解
(1)手工搭建:
①通过命令:src/redis-server ./redis.conf,将6台服务器redis服务都启动
②用客户端连接到192.168.204.201服务器的redis实例,通过cluster meet命令分别连接其他节点,使集群节点之间相关联
192.168.204.201:6379> cluster meet 192.168.204.202 6379
OK
192.168.204.201:6379> cluster meet 192.168.204.203 6379
OK
192.168.204.201:6379> cluster meet 192.168.204.204 6379
OK
192.168.204.201:6379> cluster meet 192.168.204.205 6379
OK
192.168.204.201:6379> cluster meet 192.168.204.206 6379
OK
③连接好可以使用cluster nodes命令查看集群状态,虽然连接各个节点连接成功但是还不能使用,因为还没有将16384个槽分配到集群节点中。接下来完成虚拟槽的分配,将16384个槽分配到三个主节点201、202、203服务器。 添加完槽位后可以使用cluster info命令查看集群状态。
//退出当前客户端实例,通过如下命令完成slot槽的分配
redis-cli -h 192.168.204.201 -p 6379 cluster addslots {0..5461}
redis-cli -h 192.168.204.202 -p 6379 cluster addslots {5462..10922}
redis-cli -h 192.168.204.203 -p 6379 cluster addslots {10923..16383}
④将三个master主节点和三个slave从节点关联(根据master主节点ID来关联)。master主节点的ID,你可以通过cluster nodes命令来查看,也可以通过cluster slots命令来查看。
//分别进入204、205、206从节点,完成与master主节点的关联
192.168.204.204:6379> cluster replicate 77fd6c14cbc3f6afc6c2dd474b71e898a130a1ed
OK
192.168.204.205:6379> cluster replicate 777380a888e13148089d2bbb3b1e133622b74932
OK
192.168.204.206:6379> cluster replicate fa81aa314321a55a22d8144c2cd86db0c926f898
OK
⑤ 至此Redis集群手工搭建完成。
(2)工具搭建:
随机选择一台节点,执行如下命令来配置集群:(前三个ip主机为master,后三个ip主机为slave)
redis-cli --cluster create --cluster-replicas 1 192.168.204.201:6379 192.168.204.202:6379 192.168.204.203:6379 192.168.204.204:6379 192.168.204.205:6379 192.168.204.206:6379
①启动过程,输入yes,集群正常启动;
可能出现异常:no route to host,这可能是系统防火墙没关;
②如果一直处在Waiting for the cluster to join..............,有可能是redis.conf中bind处的问题;
③可能因为节点数量过少启动失败,--cluster-replicas 1 的意思就是:为集群中的每个主节点创建1个从节点,本文集群选择3个主节点(分别为201,202,203),所以至少需要存在3个从节点,否则集群创建就会失败;
④如图,便可以看到集群已经创建成功。根据我们命令:前三台节点时master主节点,后三台节点是slave从节点。
⑤至此Redis集群使用redis-cli工具搭建完成。
⑦我们进入redis-cli客户端,通过info replication命令,便能够查看各个节点的角色。
如果配置了bind为本机ip,你需要使用:redis-cli -h 本机IP -p 端口,进入redis-cli客户端
⑧至此,Redis集群搭建完成,我们可以通过命令:redis-cli -h IP -p 端口,在集群内的随意一台机器上连接集群中的其他redis服务。(如果需要通过redis-cli操作集群,一定要加上-c参数,开启集群模式,即:redis-cli -c -h IP -p 端口,否则会报如下错误:(error) MOVED 11469 192.168.204.20x:6379)
Redis-5.0.3集群安装(手工搭建 && redis-cli工具搭建),介绍到此为止
如果本文对你有所帮助,那就给我点个赞呗 ^_^
End