一、主从复制(读写分离)
通常是一个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即可启动。