redis 主从配置_Redis的几种高可用集群配置

Redis的高可用方式及常用集群方式一般有:

  1. 主从模式
  2. 哨兵模式
  3. 集群模式

当然也有第三方代理模式,如codis等,这种不在这里讨论之列。

我刚好学习到这里,我就简单记录下这几种模式的配置 。老鸟及不感兴趣的,可以就此飘过。

Redis的安装及单实例的启动,这里就不再赘述了,确实比较简单。

一 主从模式

这个模式就是解决单台机器的内存性能问题,可以把主实例和从实例放到不同的机器上面。从机器可以作备份使用,当master主机出现故障后,可以将某一台slave提升为master。一定程度上提高缓存的高性能,如果能接受一定的延迟,也可以做一个主从分离,所有的读都从slave上来,提高性能。

配置很简单,可以在配置文件或命令行中配置,直接加上 slaveof host:ip

redis-6380.conf
​
Slaveof 127.0.0.1:6379

127.0.0.1:6380>127.0.0.1:6379

然后分别启动Redis的主从实例就行了。

主从模式,虽然比单实例的可用性要好一些,但是生产环境基本上是不太会用的。因为他没有故障转移和监测。如果master挂了,还需要手动切到slave上面去。你的应用程序连接地址也得做相应的改动。这确实有点麻烦,所以感觉这个模式有点尴尬。

二 哨兵模式

这个模式呢,和主从模式有点像,他是基于主从模式的。他提供了对master的监控和故障转移,当master节点出现故障后,可以自动通过选举选出一台slave做master,待master故障恢复后,再切回来,这就大大提高了可用性了,且哨兵之间也可以做集群部署,相互监测。防止单个哨兵死掉的情况。

在redid-sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 1

上面的配置加上就行了,6379后面那个1表示需要几个哨兵节点同意后,才启动故障转移。

哨兵模式的启动模式有两种方式:

redis-sentinel sentinel-26379.conf
redis-server sentinel-26379.conf --sentinel

因为哨兵模式也是一种特殊的Redis节点,所以可以使用redis-cli连接

redis-cli -p 26379
​
127.0.0.1:26379> info sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=odown,address=127.0.0.1:6379,slaves=1,sentinels=1

要求不高的场合下,其实哨兵模式一般的公司用就足够了。

三 集群模式

许多不同的主从实例组成大的集群,多主多从,一个主从实例死掉后,内部可以转到其它的主从实例上面。至少需要三个主节点才能让集群正常运行起来。

先配置几台机器出来,我本地用的伪集群模式,就是只有一台机器,然后用不同的端口来启动。

建立一个目录,比如叫redis-cluster。然后在这个目录下面建立6381-6386子目录。

在6381中建立配置文件redis.conf,内容如下:

daemonize yes
​
pidfile redis_6381.pid
​
logfile redis_6381.log
​
appendonly yes
​
bind 127.0.0.1
​
port 6381
​
cluster-enabled yes
​
cluster-config-file nodes-6381.conf
​
cluster-node-timeout 15000
​
cluster-slave-validity-factor 10
​
cluster-migration-barrier 1
​
cluster-require-full-coverage yes

其中cluster开头的这些,是集群的一些配置,同理,在其它目录也加上上面的配置,只不过,将6381换成相应的端口就行了。

然后再分别启动6381-6386的单实例

redis-server 6381/redis.conf
​
redis-server 6382/redis.conf

验证有无启动成功

ps -ef | grep redis
​
redis-server 127.0.0.1:6381 [cluster]

后面带[cluster]这个就表示行了。

上面只是启动了几台实例,要变成集群模式,还需要最后一步,使用redis-trib,不过我本地用的是redis5.0,已经推荐用redis-cli这种方式了,如果用redis-trib,这个还需要安装ruby环境。我这里就以redis-cli为例了

redis-cli --cluster create --cluster-replicas 1  127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386

出现如下的输出,表示集群就创建成功了。

a8b283502a68ce8939bde229180824db.png

这个命令我简单说下,通过上面那个命令就可以将刚才我们的机器变成集群模式,且配置了主从。主要就是cluster-replicas后面那个1, 这个1表示主从实例的一个比值(主/从),比如上面的就是主从为1:1,那么6381-6383为主,6383为6381的从,其它依次类推。

测试一下,我这里用Go简单的试了下集群的设置和读取,用的是go-redis包。

package main
​
import (
   "fmt"
   "github.com/go-redis/redis"
   "time"
)
​
func testClient() {
   client := redis.NewClusterClient(&redis.ClusterOptions{
      Addrs:[]string{"127.0.0.1:6381","127.0.0.1:6382","127.0.0.1:6383","127.0.0.1:6384","127.0.0.1:6385","127.0.0.1:6386",},
   })
   statuscmd :=client.Set("name","lc",60 *  time.Second)
   if statuscmd.Err() != nil {
      fmt.Println(statuscmd.Err())
   }
   stringcmd :=client.Get("name")
   fmt.Println(stringcmd.String())
}
​
func main() {
   testClient()
}

到这里,几种模式的配置就完了,其实还是挺简单的,如果要深入了解更高级的,就自已去参照相应的文档了,我也是记录我的学习过程,更高级的也没有研究过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值