Linux系统上搭建 Redis集群

  • 首先创建集群目录
[root@localhost local]# mkdir /usr/local/redis/cluster
  • 要创建6个实例,在这个文件夹中再创建6个文件夹,进入集群目录
  • 可以看到已经创建成功了,后面多了个data目录,这个目录是放数据的,一会讲配置文件的时候在具体的细说
[root@localhost local]# cd cluster/
[root@localhost cluster]# mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
[root@localhost cluster]# ls
9001  9002  9003  9004  9005  9006
  • 复制redis的配置文件 redis.conf 复制到9001这个目录下
  • 进入这个目录,看到已经复制成功了
  • 然后先来编辑这个文件,然后再以这个为模板复制其他6个,相对来说就比较容易了,不用改那么多配置
[root@localhost cluster]# cp /usr/local/redis/redis-6.2.1/redis.conf /usr/local/redis/cluster/9001/
[root@localhost cluster]# cd 9001/
[root@localhost cluster]# vim redis.conf 

配置集群,只需要这几个参数就可以啦

port 9001(每个节点的端口号)
daemonize yes (进程是否以守护进程的方式运行)
bind 192.168.3.27(绑定当前机器 IP)
dir /usr/local/redis/cluster/9001/data/(数据文件存放位置)
pidfile /var/run/redis_9001.pid(pid 9001和port要对应)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes9001.conf(9001和port要对应)
cluster-node-timeout 15000 (超时时间)
appendonly yes(每次更新操作后进行日志记录)

其他配置参数解析

# redis进程的端口号
port 9001(每个节点的端口号)
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes
# 绑定的主机地址
bind 192.168.3.27(绑定当前机器 IP)
# 指定本地数据文件存放位置
dir /usr/local/redis/cluster/9001/data/(数据文件存放位置)
# log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了
logfile /usr/local/redis/cluster/9001/data/redis9001.log
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_9001.pid(pid 9001和port要对应)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes9001.conf(9001和port要对应)
cluster-node-timeout 15000  # 超时时间
appendonly yes
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode yes
# 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
timeout 300
# redis日志级别,可用的级别有debug.verbose.notice.warning
loglevel verbose
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
# 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件
save <seconds> <changes>
# 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储
rdbcompression yes
# 指定本地数据库文件名
dbfilename dump.db
# 指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步
# 注意:如果你是配置在不同的服务器上,那你就需要这个参数,需要使用replicaof指定主机(master)的IP地址和端口,需要注意的是老版本使用的是 slaveof,目前我使用的5.0.7版本要使用 replicaof 。
replicaof <masterip> <masterport>
# 当master设置了密码保护时,slave服务连接master的密码
masterauth <master-password>
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass footbared
# 设置同一时间最大客户连接数,默认无限制。redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxclients 128
# 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory<bytes>
# 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no。
appendonly no
# 指定跟新日志文件名默认为appendonly.aof
appendfilename appendonly.aof
# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
appendfsync everysec
  • 把我们配置好的redis.conf 复制到其他几个文件夹下
[root@localhost cluster]# cp /usr/local/redis/cluster/redis01/redis.conf /usr/local/redis/cluster/9002/
[root@localhost cluster]# cp /usr/local/redis/cluster/redis01/redis.conf /usr/local/redis/cluster/9003/
[root@localhost cluster]# cp /usr/local/redis/cluster/redis01/redis.conf /usr/local/redis/cluster/9004/
[root@localhost cluster]# cp /usr/local/redis/cluster/redis01/redis.conf /usr/local/redis/cluster/9005/
[root@localhost cluster]# cp /usr/local/redis/cluster/redis01/redis.conf /usr/local/redis/cluster/9006/
  • 复制了之后分别打开配置文件,进行逐一配置
  • 这个配置只需要修改带有端口号的地方,有一个非常快的方法可以直接进行修改,不用一个一个的去找了
  • :%s/9001/9002/g
[root@localhost cluster]# vim 9002/redis.conf 
[root@localhost cluster]# vim 9003/redis.conf 
[root@localhost cluster]# vim 9004/redis.conf 
[root@localhost cluster]# vim 9005/redis.conf 
[root@localhost cluster]# vim 9006/redis.conf 
[root@localhost cluster]# vim startall.sh
[root@localhost cluster]# ./startall.sh
  • 配置完之后搞一个批处理一下全都启动了,不用一个一个的去启动了,我已经写好了直接复制过来
  • 这里特别说一下,用的是之前安装的单机版的redis-server来启动的,如果你不想这样,感觉不是太好,那么你可以在集群目录下创建bin目录,把redis中的东西复制过来也是可以的,使用我这种方式比较方便
/usr/local/redis/redis-6.2.1/src/redis-server /usr/local/redis/cluster/9001/redis.conf
/usr/local/redis/redis-6.2.1/src/redis-server /usr/local/redis/cluster/9002/redis.conf
/usr/local/redis/redis-6.2.1/src/redis-server /usr/local/redis/cluster/9003/redis.conf
/usr/local/redis/redis-6.2.1/src/redis-server /usr/local/redis/cluster/9004/redis.conf
/usr/local/redis/redis-6.2.1/src/redis-server /usr/local/redis/cluster/9005/redis.conf
/usr/local/redis/redis-6.2.1/src/redis-server /usr/local/redis/cluster/9006/redis.conf
  • redis这些实例节点都启动了
  • 通过ps 命令来看一下
[root@localhost cluster]# ps -ef | grep redis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TmmtuyDF-1638190383469)(Linux系统上搭建 Redis Cluster集群.assets/image-20210519123657627.png)]

我们随便找一个节点测试一下

[root@localhost cluster]# /usr/local/redis/cluster/redis-cli -h 192.168.3.27 -p 9001
keys * 
set hello world
(error) CLUSTERDOWN Hash slot not served(不提供集群的散列槽)

连接成功了,报了一个错误,是因为虽然我们启动了 redis 集群服务,但是暂时不在一个集群中,他们几个互相都看不见对方发现不了对方,

  • 我们怎么让他们看见对方,这就需要一个命令来操作一下,让他们能看见对方

  • 特别要说明一件事情就是:2018年十月 Redis 发布了稳定的 5.0 版本,推出了非常多的新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli 的方式

  • 所以说现在有两种方式来启动集群

  • 一种是ruby启动方式

    /usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.119.131:9001 192.168.119.131:9002 192.168.119.131:9003 192.168.119.131:9004 192.168.119.131:9005 192.168.119.131:9006
    
  • 另外一个是 C语言的方式

     /usr/local/redis/cluster/redis-cli --cluster create 192.168.3.27:9001 192.168.3.27:9002 192.168.3.27:9003 192.168.3.27:9004 192.168.3.27:9005 192.168.3.27:9006 --cluster-replicas 1
    

    因为我用的是redis6.2.3,如果说你要用ruby,那你还需要安装ruby语言的一些东西,所以这里我就用 redis-cli 的方式启动集群

[root@localhost cluster]# /usr/local/redis/cluster/redis-cli --cluster create 192.168.3.27:9001 192.168.3.27:9002 192.168.3.27:9003 192.168.3.27:9004 192.168.3.27:9005 192.168.3.27:9006 --cluster-replicas 1

启动之后,可以使用这些命令查看集群,要通过 redis-cli 进入redis 中查看集群状态

127.0.0.1:9001> cluster info
127.0.0.1:9001> cluster nodes

到这里集群就搭建完毕了

了解更多可扫码关注公众号
在这里插入图片描述

posted on 2021-11-29 20:56  凝神遐想  阅读(442)  评论(0编辑  收藏  举报

导航