您的位置:首页 > 数据库 > Redis

使用redis部署集群

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

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



然后先复制一份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






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



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



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



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



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



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息