阿里云搭建redis集群
1最近心血来潮, 打算在阿里云通过单机搭建一个redis集群,踩了不少的坑, 分享一下这些坑都怎么跳过的:
先说一下注意事项:
redis集群搭建需要至少6个节点,一般为双数, 默认分配为一主一从,redis集群采用去中心化思想, 也就是主节点的能力都是一样的,而且请求任意节点都可以获取所有数据,redis会把数据传输到每个主节点, 然后每个主节点和从节点进行数据同步, 主节点挂了之后从节点才会起到作用, 所以一般从节点一般仅用来备份。节点需要采用不同的端口号,对外开放端口时, 需要额外开通端口+10000的端口用来集群内部通信, 如: 开通17001端口用来外部访问时, 需要额外开通27001端口用来集群内部通信
2. redis集群搭建完成之前配置文件不能设置密码,否则会无法连接,集群搭建之后通过config set + config rewrite分别对各个节点进行密码设置
好的,现在开始搭建集群, 我采用的是redis-3.2.4
1. 下载解压
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
2. 编译
cd redis-3.2.4.tar.gz
make && make install
3. 将redis-trib.rb放入全局环境
cd src
cp redis-trib.rb /usr/bin
4. 创建redis节点文件
mkdir redis_cluster
cd redis_cluster
mkdir cluster_17001
mkdir cluster_17002
mkdir cluster_17003
mkdir cluster_17004
mkdir cluster_17005
mkdir cluster_17006
cd ..
cp redis.conf redis_cluster/cluster_17001
cp redis.conf redis_cluster/cluster_17002
cp redis.conf redis_cluster/cluster_17003
cp redis.conf redis_cluster/cluster_17004
cp redis.conf redis_cluster/cluster_17005
cp redis.conf redis_cluster/cluster_17006
5. 分别修改6个配置文件中的以下配置
5.1 port 17001 # 分别改为每个节点端口号
5.2 将bind 127.0.0.1 注释掉 # 前边加个#号
5.3 daemonize yes # 设置redis后台启动
5.4 pidfile /var/run/redis_17001.pid # 用来存储单个节点的进程号
5.5 cluster-enabled yes # 开启redis集群,把注释去掉
5.6 cluster-config-file nodes-17001.conf # 集群的配置文件, 首次启动会自动生成, 把注释去掉
5.7 cluster-node-timeout 15000 # 集群节点超时时间, 把注释去掉
5.8 appendonly yes # aof日志开启, 用来记录每次写入redis的记录, 可选择开启或者不开启
5.9 protected-mode no # 外部网络是否可以直接访问,redis3.2版本后新增的配置,改为no
6. 分别启动这6个节点服务
在redis-3.2.4目录下启动
redis-server redis_cluster/cluster_17001/redis.conf
redis-server redis_cluster/cluster_17002/redis.conf
redis-server redis_cluster/cluster_17003/redis.conf
redis-server redis_cluster/cluster_17004/redis.conf
redis-server redis_cluster/cluster_17005/redis.conf
redis-server redis_cluster/cluster_17006/redis.conf
7. 安装高版本ruby及对应redis
yum -y install ruby ruby-devel rubygems rpm-build
yum install curl
curl -L get.rvm.io | bash -s stable
此时应该会报错, 提示没有公钥,根据提示信息安装相关命令, 比如我安装时提示:
GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.9.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.9/1.29.9.tar.gz.asc'! Try to install GPG v2 and then fetch the public key:
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys ****************** ********************(星号代表公钥的keys)
执行提示信息中的命令: gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys ****************** ********************
然后重新执行: curl -L get.rvm.io | bash -s stable #安装rvm, 安装ruby所用工具
rvm install 2.3.3 # 通过rvm安装指定版本ruby
rvm use 2.3.3 #使用刚安装的指定版本ruby
rvm remove 2.0.0 #删除低版本ruby
ruby --version # 查看ruby版本
gem install redis # 安装ruby中的redis
最后开启集群:
redis-trib.rb create --replicas 1 公网ip:17001 公网ip:17002 公网ip:17003 公网ip:17004 公网ip:17005 公网ip:17006
至此完成:
[OK] all node agree about slots configuration
>>> Check for open slots...
>>> Check slots coverage...
[OK] ALL 16384 slots covered.