Spring Boot 学习笔记(十) Redis集群搭建

899 阅读6分钟

Spring Boot 学习笔记(十) Redis集群搭建


0. 环境说明

  • 服务器 centos 7 64bit
  • redis 4.0.11

1.Redis 源码安装

创建一个redis源码目录,并转到该目录

1mkidr redis
2cd redis
3

下载源码并编译。

1wget http://download.redis.io/releases/redis-4.0.11.tar.gz
2tar xzf redis-4.0.11.tar.gz
3cd redis-4.0.11
4make

PS:如果出现下面的结果:

1make[2]: Entering directory `/root/redis/redis-4.0.11/deps/hiredis'
2gcc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c
3make[2]: gcc: Command not found
4make[2]: *** [net.o] Error 127
5make[2]: Leaving directory `/root/redis/redis-4.0.11/deps/hiredis'
6make[1]: *** [hiredis] Error 2
7make[1]: Leaving directory `/root/redis/redis-4.0.11/deps'
8make: [persist-settings] Error 2 (ignored)
9

说明没有安装 gcc 编译器。需要安装一下。

1yum install gcc

安装gcc后需要重新解压一份新的Redis。再执行 make

编译成功的话会显示:

1Hint: It's a good idea to run 'make test' ;)
2
3make[1]: Leaving directory `/root/redis/redis-4.0.11/src'
4

至此,我们已经获取到了Redis的安装包。src目录下就是一个完整可用的Redis了。

2. Redis单机部署

现在开始搭建一个单机的redis集群。主备模式(三主三从)。

以端口号为名称创建6个文件夹:

1mkdir redis-cluster
2cd redis-cluster
3mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

把我们之前编译好的redis拷贝一份到 9001 中,并修改 redis.config 文件中的配置信息

1cd 9001
2vim redis.config

主要修改下面几个配置:

1port 9001(每个节点的端口号)
2daemonize yes(开启守护线程)
3bind 192.168.119.131(绑定当前机器 IP,需要注释掉,否则外网无法访问)
4dir ./data(数据文件存放位置)
5pidfile /var/run/redis_9001.pid(pid 9001和port要对应)
6cluster-enabled yes(默认是注释掉的,需要开启启动集群模式)
7cluster-config-file nodes9001.conf(默认是注释掉的,9001和port要对应)
8cluster-node-timeout 15000(默认是注释掉的,超时时间)
9appendonly yes (redis数据持久化)

然后把 9001 下的 redis 依次拷贝到其他5个端口的文件夹下。

1cp -r ./* ./../9001/
2cp -r ./* ./../9002/
3cp -r ./* ./../9003/
4cp -r ./* ./../9004/
5cp -r ./* ./../9005/
6cp -r ./* ./../9006/

依次修改每个端口下的redis.config,把端口改成与文件夹一致。到这一步,我们相当于在本地主机上部署了6个Redis,依次启动每个端口的redis

1cd 9001
2./src/redis-server redis.conf 
3
4... ...(启动其他端口的redis)
5

3. 安装Redis集群所需的工具

由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口。

1yum install ruby
2yum install rubygems
3gem install redis 

在执行 gem install redis的时候出现了下面的错误

1ERROR:  Error installing redis:
2    redis requires Ruby version >= 2.2.2.
3

意思是我们的 Ruby版本太低了,要升级一下Ruby。

执行一下:

1 curl -L get.rvm.io | bash -s stable

会获取到一个密钥:

1    gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
2

让这个密钥生效一下

1 gpg --keyserver hkp://keys.gnupg.net --recv-keys xxx(上一步得到的key)
2
3 curl -sSL https://get.rvm.io | bash -s stable
4

source环境,让rvm可用:

1source /etc/profile.d/rvm.sh
2source /usr/local/rvm/scripts/rvm

安装 Ruby 2.3.0

1rvm install 2.3.0

安装Redis接口

1 gem install redis 

构建Redis集群

1cd 9001
2
3[root@localhost 9006]# ./src/redis-trib.rb create --replicas 1 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 127.0.0.1:9006
4>>> Creating cluster
5>>> Performing hash slots allocation on 6 nodes...
6Using 3 masters:
7127.0.0.1:9001
8127.0.0.1:9002
9127.0.0.1:9003
10Adding replica 127.0.0.1:9005 to 127.0.0.1:9001
11Adding replica 127.0.0.1:9006 to 127.0.0.1:9002
12Adding replica 127.0.0.1:9004 to 127.0.0.1:9003
13
14... ...(省略部分显示结果)
15
16[OK] All nodes agree about slots configuration.
17>>> Check for open slots...
18>>> Check slots coverage...
19[OK] All 16384 slots covered.
20

这个时候我们的集群已经搭建好了。找一台redis连接上看一下

1./src/redis-cli -c -p 9001
2127.0.0.1:9001> cluster info
3127.0.0.1:9001> cluster nodes

4. 外网访问

现在集群是搭建好了,在服务器上测试一下是可以的,如果你要在别的机器上连接发现会发现一直连接失败。这是因为我们的redis集群没有设置密码,而且是保护模式。现在我们对这个集群设置一个密码。

集群的密码需要单独对每个机器设置,这里以 9001 为例

1cd 9001
2src/redis-cli -c -p 9001 shutdown
3vim redis.conf

修改 requirepass 选项

1requirepass ****** 

重启 redis

1src/redis-server redis.conf

依次修改完其他的端口,外网就能通过密码访问了。

PS:如果还是不能访问,请检查一下端口是否开放。

1linux 下的开放端口命令。下面的命令会开放 8080端口
2/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

5. redis-trib 无法连接

这个时候如果你在服务器上会发现 redis-trib.sh这个脚本好像没办法连接连接上redis了

1cd 9001
2./src/redis-trib.rb check 127.0.0.1:9001
3[ERR] Sorry, can't connect to node 127.0.0.1:9001
4

这个是因为我们的Redis集群配置信息没有更新密码配置,需要手动修改。

1cd /usr/local/rvm/gems/ruby-2.3.0/gems/redis-4.0.2/lib/redis
2vim client.rb

PS: 如果找不到 client.rb 可以用find / -name 'client.rb'命令查找一下
修改 passord 配置:

1    DEFAULTS = {
2      :url => lambda { ENV["REDIS_URL"] },
3      :scheme => "redis",
4      :host => "127.0.0.1",
5      :port => 6379,
6      :path => nil,
7      :timeout => 5.0,
8      :password => "******",
9      :db => 0,
10      :driver => nil,
11      :id => nil,
12      :tcp_keepalive => 0,
13      :reconnect_attempts => 1,
14      :inherit_socket => false
15    }
16

再试一下:

1./redis-trib.rb check 127.0.0.1:9001

应该能看到 redis集群的一些信息了

6. IDEA 的 Iedis 插件无法连接

最后,遇到了一个问题,我用IDEA 的 Iedis 连接别的redis集群能正常连接,但是连接刚刚搭建的集群就是连接不上。不知道为什么,一直没有解决。

不过 用 Redis Desktop Manager 是可以连接上的。

PS:为了安装一个redis 我已经重装了10多次系统了。。。

转载请注明出处
本文链接:zdran.com/20180904.ht…