redis集群搭建
- redis版本:redis-4.0.11
- os:centos 7
- ruby版本:2.3.5
- ruby-redis:4.0.2
# 可能需要的一些准备;非必须;必须的为 c、c++、zlib
yum install gcc-c++ patch readline readline-devel zlib zlib-devel
yum install libyaml-devel libffi-devel openssl-devel make
yum install bzip2 autoconf automake libtool bison iconv-devel sqlite-devel
centos 7 安装 redis
# 下载 & 编译
cd /opt
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
# 编译后的可执行文件输出到 ./src下
# 创建软连接
ln -s /opt/redis-4.0.11/src/redis-server /usr/bin/redis-server
ln -s /opt/redis-4.0.11/src/redis-cli /usr/bin/redis-cli
ln -s /opt/redis-4.0.11/src/redis-trib.rb /usr/bin/redis-trib.rb
# 测试
redis-server -v
redis-cli -v
集群
redis集群使用redis提供的redis-trib.rb
ruby 脚本进行操作,因此需要先准备ruby环境。
1. 准备ruby环境
yum上的ruby版本2.0,不能直接使用yum上的版本。
这里使用2.3.5,官网tar.gz包,make方式安装;其他版本同理。
# 安装ruby
cd /opt
wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz
tar zxf ruby-2.3.5.tar.gz
cd ruby-2.3.5
./configure --prefix=/opt/ruby
make && make install
# 软连接
ln -s /opt/ruby/bin/ruby /usr/bin/ruby
ln -s /opt/ruby/bin/gem /usr/bin/gem
# 测试
ruby -v
gem -v
# 安装ruby gem redis依赖
wget http://rubygems.org/downloads/redis-4.0.2.gem
gem install -l redis-4.0.2.gem
# gem 卸载: gem uninstall redis
# gem list: gem list --local
# 测试
redis-trib.rb
zlib 问题
- 报错如下:
[root@mongo-dev opt]# gem install -l redis-4.0.2.gem
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依赖
yum install zlib-devel
# 集成zlib库到ruby环境
cd /opt/ruby-2.3.5/ext/zlib/
ruby extconf.rb
make && make install
直接使用gem安装ruby redis依赖
gem install redis
2. 目录 & 配置文件
- 创建目录
集群至少有3台机器,每台机器需要1个备份节点,至少需要6个服务节点。这里用一台机器模仿6个节点,直接创建6个目录。
# 所有节点
/data/redis
├── 7000
├── 7001
├── 7002
├── 7003
├── 7004
└── 7005
# 单个节点目录结构;logs需要提前创建
/data/redis/7000
├── logs
└── redis.conf
- 需要修改的配置文件
# 注释掉所有bind,对外网开放
# bind 127.0.0.1
port 7000
daemonize yes
pidfile /var/run/redis_7000.pid
logfile "/data/redis/7000/logs/log.log"
dir /data/redis/7000
# 开启密码,密码:attaboy
requirepass attaboy
masterauth attaboy
# 限制客户端连接
maxclients 10000
appendonly yes
# 集群
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
将配置文件复制到其他文件夹,并修改端、文件夹、pid信息
port 7000
pidfile /var/run/redis_7000.pid
logfile "/data/redis/7000/logs/log.log"
dir /data/redis/7000
直接使用sed修改
cd 7001
sed -i 's/7000/7001/g' redis.conf
# 比较
diff redis.conf ../7000/redis.conf
或者:以7000为源,直接复制
for i in {7001..7005};do cp -r 7000/ $i;sed -i 's/7000/'$i'/g' ./$i/redis.conf;done
-
启动
# 启动单台 redis-server /data/redis/7000/redis.conf # 关闭单台 redis-cli -p 7000 -a attaboy shutdown # 启动全部 cd /data/redis for i in {7000..7005};do redis-server ./$i/redis.conf;done # 关闭全部 pids=`ps aux|grep "redis-server"|grep -v grep|awk '{print $2}'`;kill $pids # 查看 ps aux|grep redis
-
集群
# 修改 vim /opt/redis-4.0.11/src/redis-trib.rb # 增加密码 99 @r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60, :password => "attaboy") # 创建集群,此处ip一定要用外网可访问的ip,千万不可用localhost、127.0.0.1;此处仅演示,不可直接复制。 redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
-
使用
redis-cli -c -p 7000
auth attaboy
set kkkk 111
get kkkk
3. 集群操作
# 对集群进行重新分片;只需要指定集群中其中一个节点的地址
redis-trib.rb reshard 127.0.0.1:7000
# 添加新节点到集群; add-node 后面第一个为新增节点,后面为已存在的节点
redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
一键安装脚本
将上面的分布安装集合成一个一键安装脚本。
#!/bin/sh
# centos 6.5 install redis & ruby
# install dir /opt/
# ========================== lib ==========================
yum install zlib-devel
# ========================== redis ==========================
cd /opt
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
ln -s /opt/redis-4.0.11/src/redis-server /usr/bin/redis-server
ln -s /opt/redis-4.0.11/src/redis-cli /usr/bin/redis-cli
ln -s /opt/redis-4.0.11/src/redis-trib.rb /usr/bin/redis-trib.rb
# for test
# redis-server -v
# redis-cli -v
# ========================== ruby ==========================
cd /opt
wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz
tar zxf ruby-2.3.5.tar.gz
cd ruby-2.3.5
# for check
# ./configure --prefix=/opt/ruby
make && make install
ln -s /opt/ruby/bin/ruby /usr/bin/ruby
ln -s /opt/ruby/bin/gem /usr/bin/gem
# for test
# ruby -v
# gem -v
# ========================== ruby-redis ==========================
cd /opt
wget http://rubygems.org/downloads/redis-4.0.2.gem
gem install -l redis-4.0.2.gem
# for test
# redis-trib.rb