redis4搭建高可用集群
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,7002,7003,7004,7005
-
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
- 点赞
- 收藏
- 关注作者
评论(0)