linux安装redis、搭建三主三从cluster集群

安装最新版本redis,首先查看redis最新版本,上官网:https://redis.io/

截止2019.09.20为止,最新版本为 redis-5.0.5.tar.gz 。

打开linux终端,进入某个目录,执行下载安装包指令:wget http://download.redis.io/releases/redis-5.0.5.tar.gz

解压缩安装包:tar -zxf redis-5.0.5.tar.gz

进入redis目录:cd redis-5.0.5

执行编译:make

编译完成后,我们可以将其安装在指定目录下:make install PREFIX=/home/danguohang/redis_5.0.5/ 

最后redis_5.0.5目录下出现了bin,安装完成,因为bin里面有很多可以使用的程序,如下:

其中,redis-benchmark 用于redis 的压力测试,redis-check-rdb 用于恢复rdb文件(如果rdb文件受损的话),redis-sentinel用于启动哨兵实例,redis-check-aof 用于恢复aof文件(如果aof文件受损的话),redis-cli 用于开启一个客户端实例,redis-server用于启动master 或者 slave节点。

搭建redis集群(3主3从)

我的环境是Ubuntu,redis-5.0.5,只有一台机器,本地IP地址是192.168.9.128

3主:192.168.9.128:6379 、192.168.9.128:6382、192.168.9.128:6380 与3从顺序一一对应

3从:192.168.9.128:6383、192.168.9.128:6381、192.168.9.128:6384

1哨兵:192.168.9.128:26379

网上有些资料显示,要先安装ruby环境。

首先安装 apt install yum。  可能出现如下错误,原因是已经有一个apt进程占着那个锁了,因此可以把那个进程杀死,就可以安装yum了。

使用ps -aux | grep apt 查看进程,然后kill -9 1346杀死这个进程

杀死进程后,再次执行apt install yum. 即可。

其实根本用不着yum,在Ubuntu下,apt 方式就可以安装ruby了。

接着, 我发现如果在redis.conf文件里配置好主、从关系,启动不了,报错,说的是在集群中不允许在从节点配置文件中声明replicaof 去绑定主节点。

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 2
>>> 'replicaof 192.168.9.128 6379'
replicaof directive not allowed in cluster mode
所以需要用另外一种方法:先写好6个redis.conf配置文件(三主三从,共6个),不能重名(自己定义名字),此时的配置文件除了端口port、日志文件,rdb目录等等不一样,其它基本一致,不用先去区分主从。给个例子redis_6379.conf,如下:

port 6379
cluster-enabled yes
cluster-config-file /home/danguohang/redis_5.0.5/config/cluster-master-6379.conf
cluster-node-timeout 15000
daemonize yes
pidfile /home/danguohang/redis_5.0.5/config/redis_6379.pid
dbfilename redis_6379.rdb
dir /home/danguohang/redis_5.0.5/config/
logfile /home/danguohang/redis_5.0.5/log/redisNode_6379.log
bind 192.168.9.128
appendonly yes
appendfilename redis_6379.aof 

redis_6380.conf、redis_6381.conf、redis_6382.conf、redis_6383.conf、redis_6384.conf 文件就自行配置吧。 奇怪的是:我在原始redis.conf文件里进行改动,redis实例就无法启动,不知道是哪些现有配置不对吗?非要清空所有配置,仅仅包含自己想要配置的那些就行,不配置的,默认不配置就OK。

redis.conf 配置文件的每一个属性是什么意思,请参考文章:https://blog.csdn.net/dgh112233/article/details/101069766

配置好了6个conf文件后,(不必配置哨兵,本文是建立 cluster集群,与哨兵无关,此处只是作为笔记,记一下哨兵的配置)再配置1个哨兵配置文件sentinel.conf,如下:

bind 192.168.9.128
protected-mode no
port 26379
daemonize yes
pidfile "/home/danguohang/redis_5.0.5/config/redis-sentinel.pid"
logfile "/home/danguohang/redis_5.0.5/log/sentinel_26379.log"

# sentinel announce-ip <ip>
# sentinel announce-port <port>
# sentinel announce-ip 1.2.3.4

dir "/home/danguohang/redis_5.0.5"

# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel myid 3630607f378bc6619d1c1e0b4222b572cf58b50f

# sentinel auth-pass <master-name> <password>
# sentinel auth-pass master_6379 MySUPER--secret-0123passw0rd

# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel deny-scripts-reconfig yes

# sentinel parallel-syncs <master-name> <numreplicas>
sentinel monitor master_6380 192.168.9.128 6380 1
sentinel config-epoch master_6380 0
sentinel leader-epoch master_6380 0

# sentinel failover-timeout <master-name> <milliseconds>
sentinel known-replica master_6380 192.168.9.128 6383

# SCRIPTS EXECUTION

# NOTIFICATION SCRIPT
# sentinel notification-script <master-name> <script-path>
# sentinel notification-script mymaster /var/redis/notify.sh

# CLIENTS RECONFIGURATION SCRIPT
#
# sentinel client-reconfig-script <master-name> <script-path>
# sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

sentinel monitor master_6379 192.168.9.128 6379 1

# REDIS COMMANDS RENAMING
# SENTINEL rename-command mymaster CONFIG GUESSME
# SENTINEL rename-command mymaster CONFIG CONFIG
# Generated by CONFIG REWRITE
# sentinel known-replica master_6379 192.168.9.128 6380
sentinel config-epoch master_6379 0
sentinel leader-epoch master_6379 1
sentinel known-replica master_6379 192.168.9.128 6381
sentinel monitor master_6381 192.168.9.128 6381 1
sentinel config-epoch master_6381 0
sentinel leader-epoch master_6381 4
sentinel current-epoch 4

一个哨兵可以监控多个主节点。

一切都配置好了之后,接下来就是启动了,切换到redis安装目录下的bin目录里,因为需要用到redis-server 和 redis-sentinel。

redis-server。

启动这些redis节点:redis-server  redis_6379.conf              这样执行即可,其它redis节点的启动类似。

启动哨兵节点:redis-sentinel  sentinel.conf 

当然如果你嫌麻烦的话,可以自己写一个shell脚本,把所有的启动命令都写进脚本,以后只需运行脚本即可。

现在这些redis节点运行起来了,可以还没有配置成集群呢,因为主从关系没有确定(我测试的时候,报的错误是slot没有分配,就是槽还没有初始化好)。

怎么配置呢?网上有很多资料写着用redis-trib.rb 工具,我试过了,报错:redis-trib.rb已经不被支持了,可以使用redis-cli 去完成它的工作。

因此执行命令A:./redis-cli --cluster create 192.168.9.128:6379 192.168.9.128:6382 192.168.9.128:6380 192.168.9.128:6383 192.168.9.128:6381 192.168.9.128:6384 --cluster-replicas 1

命令是什么意思呢:利用redis-cli去将启动起来的redis节点搭建成一个redis集群,参数里有两个主要内容:中间的那些IP地址, 和 最后一个数字。 中间的IP是所有redis节点的(包括主、从节点),后面那个数字是主从节点的比例,如果是1,那就是1:1,主从节点各一半,前面一半是主节点,后面一半是从节点,如果是2,那就是1:2,前面1/3是主节点,后面2/3是从节点。而其还有对应关系的,比如,如果是1:1,那么192.168.9.128:6379(主)对应 192.168.9.128:6383(从),如果是1:2,那么192.168.9.128:6379(主)对应 192.168.9.128:6380(从)和192.168.9.128:6383(从)。

命令A执行过程中,会问你“yes/no”,你就完整输入yes,别只输入一个y(后面会出错的)。

到此,集群搭建完毕。

我们简单测试一下是否功能完好:

1. redis-cli -h 192.168.9.128:6379    在客户端连接上192.168.9.128:6379(主节点),存一个键值<dan,hello>,但是报了一个错,说是要将这个值存入192.168.9.128:6380(主节点)的第13016号槽去,为什么呢?

原因:存入redis集群的数据,会根据一个算法确定这个数据应该存入哪个槽(redis集群共16384个槽,这些槽平分到集群的每个主节点)当中,由于我们这是比较原始的操作,所以只能手工切换,如果你使用的是java API的话,就不用在存数据之前还要检查存在哪个槽里,API自动替你做了。

2. 192.168.9.128:6380 主节点对应的从节点是 192.168.9.128:6384 ,我们测一下,当kill 杀死192.168.9.128:6380,然后在192.168.9.128:6384里能够get dan值。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值