redis4搭建高可用集群

举报
小米粒-biubiubiu 发表于 2020/11/30 23:58:15 2020/11/30
5.6k+ 0 0
【摘要】                                     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文件。


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

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

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


      [root@localhost redis-7000]# ./src/redis-server ./redis.conf
      [root@localhost redis-7001]# ./src/redis-server ./redis.conf
      [root@localhost redis-7002]# ./src/redis-server ./redis.conf
      [root@localhost redis-7003]# ./src/redis-server ./redis.conf
      [root@localhost redis-7004]# ./src/redis-server ./redis.conf
      [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以上


      $ tar -xvzf ruby-2.5.1.tgz.gz
      $ cd ruby-2.5.1
      $ ./configure
      $ make
      $ sudo make install
      $ruby -v
      ruby 2.5.1……
  
 

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

错误1:


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

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

      ERROR: While executing gem ... (Gem::Exception)
      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环境


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

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

安装openssl库

yum install openssl-devel
 

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


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

集成openssl库到ruby


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

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


      Fetching: redis-4.0.1.gem (100%)
      Successfully installed redis-4.0.1
      Parsing documentation for redis-4.0.1
      Installing ri documentation for redis-4.0.1
      Done installing documentation for redisafter 1 seconds
      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)测试集群


      [root@elk01 redis-cluster]# redis-cli -c -h 192.168.42.xx -p 7000 #登录集群,-c参数是必需
      127.0.0.1:7000> CLUSTER info
      cluster_state:ok
      cluster_slots_assigned:16384
      cluster_slots_ok:16384
      cluster_slots_pfail:0
      cluster_slots_fail:0
      cluster_known_nodes:6
      cluster_size:3
      cluster_current_epoch:6
      cluster_my_epoch:1
      cluster_stats_messages_ping_sent:115
      cluster_stats_messages_pong_sent:125
      cluster_stats_messages_sent:240
      cluster_stats_messages_ping_received:120
      cluster_stats_messages_pong_received:115
      cluster_stats_messages_meet_received:5
      cluster_stats_messages_received:240
      127.0.0.1:7000> CLUSTER nodes
      82b493cdc4d76f3ff4dbe91240290e2c3939f1ef 127.0.0.1:7002@17002 master - 0 1509010649120 2 connected 5461-10922
      71a66eff2283d417373e90ed372d2de8703bf226 127.0.0.1:7004@17004 slave 23df12c2bafde34f5bdd53d3463ad20b8ab507d2 0 1509010648118 4 connected
      44976e464ce8146f7a6932faad2f4ad3c9bdd06d 127.0.0.1:7006@17006 slave 7b9d9f8378cb0b27134cae105ccd59146d386739 0 1509010650123 6 connected
      2c80b6ac34a9d6c38ff425e4cb830ba579740831 127.0.0.1:7005@17005 slave 82b493cdc4d76f3ff4dbe91240290e2c3939f1ef 0 1509010651126 5 connected
      7b9d9f8378cb0b27134cae105ccd59146d386739 127.0.0.1:7003@17003 master - 0 1509010649000 3 connected 10923-16383
      23df12c2bafde34f5bdd53d3463ad20b8ab507d2 192.168.9.216:7001@17001 myself,master - 0 1509010649000 1 connected 0-5460
      127.0.0.1:7000> set testKey success
      OK
      127.0.0.1:7000> get testKey
      "success"
      [root@elk01 redis-cluster]# redis-cli -c -h 192.168.42.xx -p 7003
      127.0.0.1:7003> get testKey
      "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. 


 


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

五、开放端口

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


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

六、spring boot 集成 redis集群


      redis:
      database: 0
      host: 192.168.42.93
      port: 7000
      password:
      cluster:
      nodes: 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
  
 

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

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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