使用redis部署集群

我们现在在一台服务器上,通过6个端口来模拟一下redis集群部署,要搭建出的模型为:三个主数据库7001,7002,7003,它们各有一个从数据库7004,7005,7006。

首先创建目录/usr/local/redis-cluster,然后在其中创建6个目录7001-7006:

image_1b9n262ci1fi7gc2b531kgf1bp64o.png-17.6kB

然后先复制一份redis配置文件redis.conf到7001目录下,执行vi命令编辑redis.conf,需要修改的地方为:

daemonize yes(后台运行)
port 700* (分别对每个机器的端口号进行设置)
bind 192.168.202.131 (必须绑定当前的主机IP)
dir /usr/local/redis-cluster/700*/ (指定数据文件dump.rdb的存放位置,必须指明,否则数据可能丢失)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes700*.conf (700*最好和port对应上)
cluster-node-timeout 5000 (过期时间,可选)
appendonly yes (启动aof持久化,可选)

将编辑好后的redis.conf各复制一份到7002-7006目录下,再分别修改为对应的端口号7002-7006,为了方便可以使用全文替换:执行vi命令后,按冒号进入最后行模式,然后执行%s/7001/700*/g。

由于redis集群需要使用到ruby命令,所以我们需要先安装ruby,ubuntu下安装ruby的方式如下:

sudo apt-get update
sudo apt-get install ruby
sudo apt-get install rubygems

然后执行如下命令安装redis和ruby的接口:

gem install redis

然后分别启动6个redis实例:(我的redis-server程序安装在/usr/local/bin/,请对应你自己的)

/usr/local/bin/redis-server /usr/local/redis-cluster/7001/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/7002/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/7003/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/7004/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/7005/redis.conf 
/usr/local/bin/redis-server /usr/local/redis-cluster/7006/redis.conf 

开启好后可以执行ps -el|grep redis查看是否启动成功。

然后执行redis的src目录下的redis-trib.rb命令,其中create代表创建集群,–replicas代表主从结点比例,1代表一主一从:

./usr/redis/redis-3.2.6/src/redis-trib.rb create --replicas 1 192.168.202.131 7001 192.168.202.131 7002 192.168.202.131 7003 192.168.202.131 7004 192.168.202.131 7005 192.168.202.131 7006

image_1b9n02smp7lt9lj16qu1hrmqf0m.png-226.9kB

image_1b9n0bsp5ucm17qrv4cfjd1gop13.png-83.1kB

通过集群方式启动服务,输入info命令可以查看主从信息:

image_1b9n0cn0tq1d4v9o6717s9n81g.png-55.3kB

输入cluster info命令可以查看集群信息:

image_1b9n1sbupi6uho6f501o291b3p3u.png-346.8kB

通过cluster nodes命令可以查看集群结点信息:(redis会给主库结点分配哈希槽)

image_1b9n1ufcv61bceq3ii187i17iq4b.png-605kB

现在打开多个终端,分别连接7001,7002,7003端口的redis服务:

image_1b9n104f31umm1ist1tn5cmob5t2a.png-122.7kB

然后在7001中执行set k1 v1,会发现k1被存放到7003的哈希槽12706中,此时在7001,7002中执行keys *看不到k1,但是可以通过get k1访问到k1,而且会被重定向到7003端口的redis服务:

image_1b9n15gnrrjb2q11eie1ao9rcc2n.png-135.5kB

现在,我们在7001中执行set k4 v4,发现k4被存放到了7002,然后我们退出7002服务,启动7002的从库即7005,执行get k4,会发现仍然需要重定向到7002去获取,这是不合理的。我们需要在从库7005中执行READONLY命令,然后再获取k4,就可以直接从从库7005中获取了:(但是好在在jedis中不需要这样设置)

image_1b9n1lvnjji7m6p16679vj1hjh34.png-50.8kB

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值