ubtuntu redis 集群部署/搭建(官方原始方案)

 Pala   2018-09-05 14:10   87 人阅读  0 条评论

1. 安装ruby环境

Redis作者应该是个Ruby爱好者,Ruby客户端就是他开发的。这次集群的管理功能没有嵌入到Redis代码中,于是作者又顺手写了个叫做redis-trib的管理脚本。redis-trib依赖Ruby和RubyGems,以及redis扩展。可以先用which命令查看是否已安装ruby和rubygems,用gem list –local查看本地是否已安装redis扩展。

最简便的方法就是用apt或yum包管理器安装RubyGems后执行gem install redis。如果网络或环境受限的话,可以手动安装RubyGems和redis扩展(国外链接可能无法下载,可以从CSDN下载):

apt-get install ruby
gem install redis

2. 安装redis

参考文章:ubuntu 使用命令安装最新的redis版本

3. 创建集群文件及文件夹

mkdir redis-cluster
cd redis-cluster
mkdir 9000 9001 9002 9003 9004 9005

redis-cluster/
├── 9000
│   └── redis.conf.9000
├── 9001
│   └── redis.conf.9001
├── 9002
│   └── redis.conf.9002
├── 9003
│   └── redis.conf.9003
├── 9004
│   └── redis.conf.9004
└── 9005
    └── redis.conf.9005

结果如下图所示:

13.png


4. 拷贝redis.conf

ubuntu  redis配置文件路径

cd /etc/redis

 进入redis配置文件目录,将redis.conf复制redis-cluster文件夹中

cp redis.conf /home/user/redis-cluster

4.1主要修改信息如下:

  • 绑定地址:bind 127.0.0.1 # 绑定的ip 不能绑定到127.0.0.1、0.0.0.0或localhost,否则指导客户端重定向时会报”Connection refused”的错误。

  • 绑定端口号:port 9000  # 端口号和文件夹名一样

  • 备份文件名存储位置:dir /home/user/redis-cluster/9000 

  • 集群超时时间:cluster-node-timeout 15000。    集群超时时间结点超时多久则认为它宕机了。

  • 开启集群:cluster-enabled yes 

  • 集群配置文件:cluster-config-file nodes-9000.conf  这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。

  • 后台运行:appendonly yes 

  • 槽是否全覆盖:cluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no

  • 输出日志:logfile “./redis.log”

不同信息在redis.conf位置:

4.2 ip绑定 绑定本机ip

21.png

4.2修改端口号

22.png

4.3 开启

26.png

4.4 数据存储位置

dbfilename 备份文件名

23.png

4.5 开启集群

24.png

4.6 集群配置文件

25.png

然后分别将redis0cluster中redis.conf配置文件复制到新建的6个文件夹中(9000,9001,9002,9003,9004,9005)

复制redis.conf配置文件

cp redis.conf /home/user/redis-cluster/9000
cp redis.conf /home/user/redis-cluster/9001
cp redis.conf /home/user/redis-cluster/9002
cp redis.conf /home/user/redis-cluster/9003
cp redis.conf /home/user/redis-cluster/9004
cp redis.conf /home/user/redis-cluster/9005

5. 分别启动redis-server

redis-server /home/user/redis-cluster/9000/redis.conf 
redis-server /home/user/redis-cluster/9001/redis.conf 
redis-server /home/user/redis-cluster/9002/redis.conf 
redis-server /home/user/redis-cluster/9003/redis.conf 
redis-server /home/user/redis-cluster/9004/redis.conf 
redis-server /home/user/redis-cluster/9005/redis.conf

6. 查看redis-server是否正常启动

ps -ef|grep redis-server

结果如下

27.png

7. 创建redis集群

redis-trib.rb(能否创建集群主要靠它)存放的路径

cd /usr/share/doc/redis-tools/examples/

复制redis-trib.rb到指定目录

cp redis-trib.rb /home/user/redis-cluster/

redis集群启动

启动集群命令

./redis-trib.rb create --replicas 1 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005

结果如下:

>>> ./redis-trib.rb create --replicas 1 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005
>>> Creating cluster  # 自动输入的命令
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:9000
127.0.0.1:9001
127.0.0.1:9002
Adding replica 127.0.0.1:9004 to 127.0.0.1:9000
Adding replica 127.0.0.1:9005 to 127.0.0.1:9001
Adding replica 127.0.0.1:9003 to 127.0.0.1:9002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 56b766b9e4b8447c2f0645e16b82283f6c7c11d7 127.0.0.1:9000
   slots:0-5460 (5461 slots) master
M: 89af1208bca79d22f9c051bb86d40de1ebaf92b4 127.0.0.1:9001
   slots:5461-10922 (5462 slots) master
M: c95629b3e17abaf3b0cef022359b49f4498a4d8a 127.0.0.1:9002
   slots:10923-16383 (5461 slots) master
S: 736a7abdbec3fd16bd610900cfed8ecd7f9b008b 127.0.0.1:9003
   replicates 56b766b9e4b8447c2f0645e16b82283f6c7c11d7
S: 5f94b10bfe0ba249767da82161bdfdb14b5092aa 127.0.0.1:9004
   replicates 89af1208bca79d22f9c051bb86d40de1ebaf92b4
S: 58481f44f290203a644503946b3d6f2b9bd53916 127.0.0.1:9005
   replicates c95629b3e17abaf3b0cef022359b49f4498a4d8a
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 127.0.0.1:9000)
M: 56b766b9e4b8447c2f0645e16b82283f6c7c11d7 127.0.0.1:9000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 736a7abdbec3fd16bd610900cfed8ecd7f9b008b 127.0.0.1:9003
   slots: (0 slots) slave
   replicates 56b766b9e4b8447c2f0645e16b82283f6c7c11d7
S: 5f94b10bfe0ba249767da82161bdfdb14b5092aa 127.0.0.1:9004
   slots: (0 slots) slave
   replicates 89af1208bca79d22f9c051bb86d40de1ebaf92b4
S: 58481f44f290203a644503946b3d6f2b9bd53916 127.0.0.1:9005
   slots: (0 slots) slave
   replicates c95629b3e17abaf3b0cef022359b49f4498a4d8a
M: 89af1208bca79d22f9c051bb86d40de1ebaf92b4 127.0.0.1:9001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: c95629b3e17abaf3b0cef022359b49f4498a4d8a 127.0.0.1:9002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

8. 连接集群

redis-cli -c -h 127.0.0.1 -p 9000

注意:如果遇到MOVED 5798错误

请阅读:http://chenxm.cc/post/695.html

8.1 关闭集群

ps -ef | grep redis | awk '{print $2}' | xargs kill

9. 简单测试

>>> redis-cli -c -h 192.168.3.99 -p 9000

127.0.0.1:9002> set foo bar
OK
127.0.0.1:9002> set hello world
-> Redirected to slot [866] located at 192.168.3.212:9000
OK
127.0.0.1:9000> get foo
-> Redirected to slot [12182] located at 192.168.3.212:9002
"bar"
127.0.0.1:9002> get hello
-> Redirected to slot [866] located at 192.168.3.212:9000
"world"

10 内部原理分析

前面我们已经学习过,用Redis提供的redis-trib或create-cluster脚本能几步甚至一步就建立起一个Redis集群。这一部分我们为了深入学习,所以要暂时抛开这些方便的工具,完全手动建立一遍上面的3主3从集群。

10.1 集群发现:MEET

最开始时,每个Redis实例自己是一个集群,我们通过cluster meet让各个结点互相“握手”。这也是Redis Cluster目前的一个欠缺之处:缺少结点的自动发现功能。

10.2 角色设置:REPLICATE

结点全部“握手”成功后,就可以用cluster replicate命令为结点指定角色了,默认每个结点都是Master。

10.3 槽指派:ADDSLOTS

设置好主从关系之后,就可以用cluster addslots命令指派16384个槽的位置了。有点恶心的是,ADDSLOTS命令需要在参数中一个个指明槽的ID,而不能指定范围。这里用Bash 3.0的特性简化了,不然就得用Bash的循环来完成了:

总结:

这是一篇完整的Redis集群部署,只要按照文章中的步骤做,那么保证你能成功搭建一个redis集群。

接下来可能就是动态扩容、增加节点和减少节点,重新分配槽大小等,当然,还有最重要的就是怎么和我们程序结合起来,以及如何更好的把 Redis 缓存集群发挥出应有的效果,这些才是最重要的。


参考:https://blog.csdn.net/dc_726/article/details/48552531

本文地址:http://chenxm.cc/post/694.html
版权声明:本文为原创文章,版权归 Pala 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?