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

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


0. 环境说明

  • 服务器 centos 7 64bit
  • redis 4.0.11

1.Redis 源码安装

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

mkidr redis
cd redis

下载源码并编译。

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

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

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

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

yum install gcc

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

编译成功的话会显示:

Hint: It's a good idea to run 'make test' ;)

make[1]: Leaving directory `/root/redis/redis-4.0.11/src'

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

2. Redis单机部署

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

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

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

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

cd 9001
vim redis.config

主要修改下面几个配置:

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

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

cp -r ./* ./../9001/
cp -r ./* ./../9002/
cp -r ./* ./../9003/
cp -r ./* ./../9004/
cp -r ./* ./../9005/
cp -r ./* ./../9006/

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

cd 9001
./src/redis-server redis.conf 

... ...(启动其他端口的redis)

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

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

yum install ruby
yum install rubygems
gem install redis 

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

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

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

执行一下:

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

会获取到一个密钥:

    gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

让这个密钥生效一下

 gpg --keyserver hkp://keys.gnupg.net --recv-keys xxx(上一步得到的key)

 curl -sSL https://get.rvm.io | bash -s stable

source环境,让rvm可用:

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

安装 Ruby 2.3.0

rvm install 2.3.0

安装Redis接口

 gem install redis 

构建Redis集群

cd 9001

[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
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:9001
127.0.0.1:9002
127.0.0.1:9003
Adding replica 127.0.0.1:9005 to 127.0.0.1:9001
Adding replica 127.0.0.1:9006 to 127.0.0.1:9002
Adding replica 127.0.0.1:9004 to 127.0.0.1:9003

... ...(省略部分显示结果)

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

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

./src/redis-cli -c -p 9001
127.0.0.1:9001> cluster info
127.0.0.1:9001> cluster nodes

4. 外网访问

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

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

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

修改 requirepass 选项

requirepass ****** 

重启 redis

src/redis-server redis.conf

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

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

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

5. redis-trib 无法连接

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

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

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

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

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

    DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :password => "******",
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
      :reconnect_attempts => 1,
      :inherit_socket => false
    }

再试一下:

./redis-trib.rb check 127.0.0.1:9001

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

6. IDEA 的 Iedis 插件无法连接

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

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

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

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