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
[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
[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。
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"));
}