一、主从复制(读写分离)

通常是一个master,多个slave。

master进行写操作,slave进行读操作。

缺点:当master宕机时,redis将无法进行写操作,仅能读。

master(端口9000)核心配置:

daemonize yes
port 9000
logfile 9000.log
dir ./
requirepass 123
masterauth 123
bind 192.168.0.115

# AOF 数据持久化
appendonly yes
appendfilename aof-9000.aof
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

slave(端口9001)核心配置:

port 9001
daemonize yes
logfile 9001.log
dir ./
requirepass 123
#配置主节点
slaveof 192.168.0.115 9000
masterauth 123
bind 192.168.0.115

# AOF 数据持久化
appendonly yes
appendfilename aof-9001.aof
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

思考一个问题:当单机redis服务数据量过大怎么办?

redis3.0过后为此提供了解决方案。

二、cluster模式(分区)(至少需要3个主节点)

1、使用该模式需要用到src目录下的redis-trib.rb

使用之前需要安装ruby语言

本人测试时用的redis版本为4.0.10,至少需要2.2以上版本的ruby,而yum install ruby仅为2.0版本,使得运行redis-trib.rb会提示版本过低。

在这里使用另一种简单的安装方式(参考)

yum install centos-release-scl-rh    //会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源
yum install rh-ruby24  -y    //直接yum安装即可  
scl  enable  rh-ruby24 bash    //必要一步
ruby -v    //查看安装版本

当ruby -v能运行时,则表示安装成功。

2、接下来就是创建6个(最少)不同端口号的redis服务,可参考网上修改端口号的方法

关键

cluster-enabled  yes

这个要打开。然后启动6个服务就ok了。

3、运行命令

./redis-trib.rb  create  --replicas  1  192.168.0.189:7000 192.168.0.189:7001  192.168.0.189:7002 192.168.0.189:7003  192.168.0.189:7004  192.168.0.189:7005

replicas 1的意思是自动分配master,并为每个master创建1个slave。

运行,可能会让你输入yes。

如果报错,以下提供3种解决方案:

①删除dump.rdb和nodes.conf

②进入各个端口的客户端(如 ./redis-cli -h 192.168.0.189 -p 7000),运行reflushdb

③进入各个端口客户端,运行cluster reset

4、创建成功后就可以使用了。

常用命令:

ps -ef | grep redis #查看redis进程
redis客户端命令:
    cluster info
    cluster nodes

三、哨兵模式(sentinel)

主要修改的配置文件为(sentinel.conf)参考()

port 8000
daemonize yes
logfile "8000.log"
dir "./"
#监控的主节点,后面的1表示指明当有多少个sentinel认为一个master失效时,master才算真正失效
sentinel monitor mymaster 192.168.0.189 7000 1
sentinel down-after-milliseconds mymaster 30000
#这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就
越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000
#如果主节点有密码就写,没密码就注掉
sentinel auth-pass mymaster 123
#哨兵ip
bind 192.168.0.198

通过./redis-centinel ../sentinel.conf即可启动。