redis4搭建高可用集群

举报
小米粒-biubiubiu 发表于 2020/11/30 23:58:15 2020/11/30
【摘要】                                     redis4搭建高可用集群详解 一 、前提准备  yum install gcc yum install gcc-c++ yum install tcl yum install  zlib-devel yum install  openssl-devel 安装  redis-4.0.11,在...

                                    redis4搭建高可用集群详解

一 、前提准备 

yum install gcc

yum install gcc-c++

yum install tcl

yum install  zlib-devel

yum install  openssl-devel

安装  redis-4.0.11,在make 的时候可能报错 , 只需执行make MALLOC=libc 即可。

安装  最新版本 ruby 

二、复制6个redis 实例 并修改 redis-conf文件。


  
  1. [root@localhost opt]# cd dzx-redis-cluster/
  2. [root@localhost dzx-redis-cluster]# ll
  3. total 28
  4. drwxrwxr-x. 6 root root 4096 Aug 9 19:58 redis-7000
  5. drwxrwxr-x. 6 root root 4096 Aug 9 20:13 redis-7001
  6. drwxrwxr-x. 6 root root 4096 Aug 9 20:14 redis-7002
  7. drwxrwxr-x. 6 root root 4096 Aug 9 19:58 redis-7003
  8. drwxrwxr-x. 6 root root 4096 Aug 9 20:13 redis-7004
  9. drwxrwxr-x. 6 root root 4096 Aug 9 20:14 redis-7005
  10. -rwxr--r--. 1 root root 588 Aug 9 19:19 start.sh

  
  1. bind 192.168.42.xx
  2. port 7000 #每个redis-conf 分别修改为对应的端口号 如7000,7001,70027003,70047005
  3. cluster-enabled yes
  4. #每个redis-conf 分别修改为对应的nodes-7000.conf、nodes-7001.conf、nodes-7002.conf、nodes-#7003.conf、nodes-7004.conf、nodes-7005.conf
  5. cluster-config-file nodes-7000.conf
  6. cluster-node-timeout 5000
  7. appendonly yes

三、分别启动各个redis实例并创建集群


  
  1. [root@localhost redis-7000]# ./src/redis-server ./redis.conf
  2. [root@localhost redis-7001]# ./src/redis-server ./redis.conf
  3. [root@localhost redis-7002]# ./src/redis-server ./redis.conf
  4. [root@localhost redis-7003]# ./src/redis-server ./redis.conf
  5. [root@localhost redis-7004]# ./src/redis-server ./redis.conf
  6. [root@localhost redis-7005]# ./src/redis-server ./redis.conf

(1)创建集群的时候需要用到ruby命令,因此需要安装ruby。

在ruby官网http://www.ruby-lang.org/en/downloads/下载最新版本  ruby-2.5.1.tar.gz,因为redis4创建集群时ruby 版本必须大于2.2以上


  
  1. $ tar -xvzf ruby-2.5.1.tgz.gz
  2. $ cd ruby-2.5.1
  3. $ ./configure
  4. $ make
  5. $ sudo make install
  6. $ruby -v
  7. ruby 2.5.1……

安装完成之后  执行  gem  install redis ,可能会报如下错误,此时不要慌,按照以下方式便可以解决问题。

错误1:


  
  1. ERROR: Loading command: install (LoadError)
  2. cannot load such file -- zlib
  3. ERROR: While executing gem ... (NoMethodError)
  4. undefined method `invoke_with_build_args' for nil:NilClass

  
  1. 这是缺少zlib依赖,需要安装zlib库
  2. 错误2:

  
  1. ERROR: While executing gem ... (Gem::Exception)
  2. Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

提示缺少openssl库,这两个库可以通过yum安装,但是安装了需要集成到ruby中。

先解决错误一,解决办法分为两步:

(2)安装zlib库

yum install zlib-devel
 

  集成zlib库到ruby环境


  
  1. cd /opt/ruby-2.5.1
  2. cd ext/zlib
  3. ruby extconf.rb
  4. //在操作下一步之前需要修改Makefile文件中的zlib.o: $(top_srcdir)/include/ruby.h,将$(top_srcdir)修改为../..如下
  5. //zlib.o: ../../include/ruby.h
  6. //这一步如果不修改,make时会爆出另外一个错误
  7. //make:*** No rule to make target `/include/ruby.h', needed by `zlib.o'.  Stop
  8. make && make install

(3)另一个缺少openssl库的错误,可以用同样的问题解决。

安装openssl库

yum install openssl-devel
 

不要只用yum install openssl来安装,否则会缺少pcre等相关库,执行ruby extconf.rb会提示找不到ssl.h文件。


  
  1. checking for t_open() in -lnsl... no
  2. checking for socket() in -lsocket... no
  3. checking for openssl/ssl.h... no

集成openssl库到ruby


  
  1. cd /data/ruby-2.4.2
  2. cd ext/openssl
  3. ruby extconf.rb
  4. //同样修改Makefile中的$(top_srcdir)为../..
  5. [root@node01 openssl]# make && make install

成功之后,再次运行gem install redis,出现以下界面:


  
  1. Fetching: redis-4.0.1.gem (100%)
  2. Successfully installed redis-4.0.1
  3. Parsing documentation for redis-4.0.1
  4. Installing ri documentation for redis-4.0.1
  5. Done installing documentation for redisafter 1 seconds
  6. 1 gem installed

gem install redis安装成功。

四、创建集群及测试集群

(1)执行ruby脚本创建集群

./redis-trib.rb create --replicas 1 192.168.42.xx:7000 192.168.42.xx:7001 \ 192.168.42.xx:7002 192.168.42.xx:7003 192.168.42.xx:7004 192.168.42.xx:7005

Can I set the above configuration? (type 'yes' to accept):输入yes

看到这句话[OK] All 16384 slots covered.意味着集群中的16384个槽至少有一个主节点在处理,说明集群创建成功。

(2)测试集群


  
  1. [root@elk01 redis-cluster]# redis-cli -c -h 192.168.42.xx -p 7000 #登录集群,-c参数是必需
  2. 127.0.0.1:7000> CLUSTER info
  3. cluster_state:ok
  4. cluster_slots_assigned:16384
  5. cluster_slots_ok:16384
  6. cluster_slots_pfail:0
  7. cluster_slots_fail:0
  8. cluster_known_nodes:6
  9. cluster_size:3
  10. cluster_current_epoch:6
  11. cluster_my_epoch:1
  12. cluster_stats_messages_ping_sent:115
  13. cluster_stats_messages_pong_sent:125
  14. cluster_stats_messages_sent:240
  15. cluster_stats_messages_ping_received:120
  16. cluster_stats_messages_pong_received:115
  17. cluster_stats_messages_meet_received:5
  18. cluster_stats_messages_received:240
  19. 127.0.0.1:7000> CLUSTER nodes
  20. 82b493cdc4d76f3ff4dbe91240290e2c3939f1ef 127.0.0.1:7002@17002 master - 0 1509010649120 2 connected 5461-10922
  21. 71a66eff2283d417373e90ed372d2de8703bf226 127.0.0.1:7004@17004 slave 23df12c2bafde34f5bdd53d3463ad20b8ab507d2 0 1509010648118 4 connected
  22. 44976e464ce8146f7a6932faad2f4ad3c9bdd06d 127.0.0.1:7006@17006 slave 7b9d9f8378cb0b27134cae105ccd59146d386739 0 1509010650123 6 connected
  23. 2c80b6ac34a9d6c38ff425e4cb830ba579740831 127.0.0.1:7005@17005 slave 82b493cdc4d76f3ff4dbe91240290e2c3939f1ef 0 1509010651126 5 connected
  24. 7b9d9f8378cb0b27134cae105ccd59146d386739 127.0.0.1:7003@17003 master - 0 1509010649000 3 connected 10923-16383
  25. 23df12c2bafde34f5bdd53d3463ad20b8ab507d2 192.168.9.216:7001@17001 myself,master - 0 1509010649000 1 connected 0-5460
  26. 127.0.0.1:7000> set testKey success
  27. OK
  28. 127.0.0.1:7000> get testKey
  29. "success"
  30. [root@elk01 redis-cluster]# redis-cli -c -h 192.168.42.xx -p 7003
  31. 127.0.0.1:7003> get testKey
  32. "success"

 

(3)下次在重新创建集群可能会报以下错误

[ERR] Node 192.168.42.xx:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0. 


 


  
  1. 将每个节点下aofrdbnodes.conf本地备份文件删除; 
  2. 172.168.42.xx:7001> flushdb 或者 flushall #清空当前数据库(可省略) 
  3. 重新启动每个redis 节点之后再执行脚本,成功执行;

五、开放端口

此时,利用 jedis 或者 redis desktop manager  还是连接不上 redis 集群服务的,需要开放各个redis节点的端口号。


  
  1. firewall-cmd --query-port=7000/tcp #如果返回结果为no,那么证明7000端口确实没有开启。
  2. firewall-cmd --add-port=7000/tcp #将7000端口开启,返回success。
  3. #然后再执行上一条命令,返回yes,证明端口已经成功开启。
  4. firewall-cmd --add-port=7001/tcp #将7001端口开启,返回success。
  5. firewall-cmd --add-port=7002/tcp #将7002端口开启,返回success。
  6. firewall-cmd --add-port=7003/tcp #将7003端口开启,返回success。
  7. firewall-cmd --add-port=7004/tcp #将7004端口开启,返回success。
  8. firewall-cmd --add-port=7005/tcp #将7005端口开启,返回success。

六、spring boot 集成 redis集群


  
  1. redis:
  2. database: 0
  3. host: 192.168.42.93
  4. port: 7000
  5. password:
  6. cluster:
  7. nodes: 192.168.42.xx:7000,192.168.42.xx:7001,192.168.42.xx:7002,
  8. 192.168.42.xx:7003,192.168.42.xx:7004,192.168.42.xx:7005

  
  1. @Autowired
  2. private StringRedisTemplate redisTemplate;
  3. @Test
  4. public void testRedis() {
  5. redisTemplate.opsForValue().set("5","okokokok");
  6. System.out.println( redisTemplate.opsForValue().get("5"));
  7. }

 

文章来源: blog.csdn.net,作者:血煞风雨城2018,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_31905135/article/details/81563464

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。