REDIS集群部署步骤以及问题解决
2017-05-03 09:34
531 查看
1 放开redis.config中cluster-enabled yes的注释
2 复制redis.conf文件
修改端口:6380 6381 6382
3 分别启动redis服务
4 使用redis客户端命令:cluster meet ip port命令创建集群
5 使用redis客户端命令:cluster addslots slot1 <slot2> ... <slot3> 将16384个槽分配给集群中的各个节点
(注:cluster addslots 0 1 2 3 4 5 6 7 是支持的 但是该命令不支持中间的... 即:cluster addslots 0 1 2 ... 5000 是会报错的,所以如果使用cluster addslots 命令则需要把分配改节点的所有槽数都写出来)
6 使用cluster addslots命令分配16384个槽的话 需要把从0到16383个数据写一遍是很麻烦的事情,所以就用需要用到redis自己提供的集群工具redis-trib.rd
7 redis-trib.rd可以自动创建集群并分配好槽信息
8 使用redis-trib.rd需要用到ruby
9 安装ruby:
9.1 安装rvm 1) curl -L https://get.rvm.io | bash -s stable
2) source /etc/profile.d/rvm.sh
3) rvm -v查看rvm版本
9.2 安装ruby和rubygem 1) sed -i 's!cache.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db
注:改命令主要是修改ruby的镜像地址,将taobao作为主镜像地址,将cache.ruby-lang.org作为副镜像地址,主要是因为国内网络不稳定
2) rvm list known 查看可以安装的ruby版本
3) rvm install 2.2 安装ruby2.2.1版本
4)rvm 2.2 --default 设置一下ruby的版本
5)ruby -v 查看ruby的版本
6) gem -v 查看gem的版本
10 进入redis的解压目录下的src目录 执行命令./redis-trib.rd create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382
如果报错如下:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25
执行如下命令:gem install redis
11 在执行gem install redis是会报连接错误,则需要执行如下命令做修改
gem sources --remove https://rubygems.org/ 将默认的源地址删除
gem sources -a https://ruby.taobao.org/ 设置新的源地址
gem source -l 查看源地址
之后再次执行:gem install redis
12 再次执行./redis-trib.rb create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382创建集群并分配槽
13 ./redis-trib.rb check 127.0.0.1:6380检查集群的状态
14 ./redis-trib.rb reshard 127.0.0.1:6380(集群中任意节点的ip:port) 批量重分片(即:完成槽分片和key-value的迁移)
15 对单个槽分片
如槽4894在6380对应的节点上,现在需要将该槽移动到6382节点上需要执行如下命令
14.1 CLUSTER SETSLOT <slot> MIGRATING <target_id> 将本节点的槽 slot 迁移到 target_id(6382节点对应的节点名称) 指定的节点中
14.2 CLUSTER SETSLOT <slot> IMPORTING <source_id> 从 source_id(6380节点对应的节点名称) 指定的节点中导入槽 slot 到本节点
14.3 CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键
14.4 migrate target_id_ip target_id_port <key> 0(表示数据库号) timeout
14.5 循环3,4步直至所有的key都已经合并到target_id
14.6 在source_id节点上执行:cluster setslot <slot> node <target_id>
在target_id节点上执行:cluster setslot <slot> node <target_id> 此处书上说的是任意节点上执行cluster setslot命名即可,但是在操作过程中发现仅在source_id节点上执行cluster setslot后,在source_id查看cluster nodes信息是对的
但是在其它节点查看cluster nodes信息槽信息是不对的,经过长时间的等待之后,信息仍不对,之后在target_id上重新执行cluster setslot命令之后 整个集群上各个节点的cluster nodes信息保持了一致
16 在部署redis集群中遇见的问题:
16.1 在安装软件的时候出现:insserv:starting redis depends on ondeman and therefor on system facility '$all' which can not be true!
原因在于:之前部署redis-6379的时候设置了开机启动即配置了/etc/init.d/redis和/etc/rc.d/redis
在redis文件中#!/bin/sh之后增加:
### BEGIN INIT INFO
# Provides: REDIS
# Required-Start: $network $remote_fs $syslog $time
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: REDIS
### END INIT INFO
信息即可
具体文件内容如下:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: REDIS
# Required-Start: $network $remote_fs $syslog $time
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: REDIS
### END INIT INFO
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF &
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
2 复制redis.conf文件
修改端口:6380 6381 6382
3 分别启动redis服务
4 使用redis客户端命令:cluster meet ip port命令创建集群
5 使用redis客户端命令:cluster addslots slot1 <slot2> ... <slot3> 将16384个槽分配给集群中的各个节点
(注:cluster addslots 0 1 2 3 4 5 6 7 是支持的 但是该命令不支持中间的... 即:cluster addslots 0 1 2 ... 5000 是会报错的,所以如果使用cluster addslots 命令则需要把分配改节点的所有槽数都写出来)
6 使用cluster addslots命令分配16384个槽的话 需要把从0到16383个数据写一遍是很麻烦的事情,所以就用需要用到redis自己提供的集群工具redis-trib.rd
7 redis-trib.rd可以自动创建集群并分配好槽信息
8 使用redis-trib.rd需要用到ruby
9 安装ruby:
9.1 安装rvm 1) curl -L https://get.rvm.io | bash -s stable
2) source /etc/profile.d/rvm.sh
3) rvm -v查看rvm版本
9.2 安装ruby和rubygem 1) sed -i 's!cache.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db
注:改命令主要是修改ruby的镜像地址,将taobao作为主镜像地址,将cache.ruby-lang.org作为副镜像地址,主要是因为国内网络不稳定
2) rvm list known 查看可以安装的ruby版本
3) rvm install 2.2 安装ruby2.2.1版本
4)rvm 2.2 --default 设置一下ruby的版本
5)ruby -v 查看ruby的版本
6) gem -v 查看gem的版本
10 进入redis的解压目录下的src目录 执行命令./redis-trib.rd create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382
如果报错如下:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25
执行如下命令:gem install redis
11 在执行gem install redis是会报连接错误,则需要执行如下命令做修改
gem sources --remove https://rubygems.org/ 将默认的源地址删除
gem sources -a https://ruby.taobao.org/ 设置新的源地址
gem source -l 查看源地址
之后再次执行:gem install redis
12 再次执行./redis-trib.rb create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382创建集群并分配槽
13 ./redis-trib.rb check 127.0.0.1:6380检查集群的状态
14 ./redis-trib.rb reshard 127.0.0.1:6380(集群中任意节点的ip:port) 批量重分片(即:完成槽分片和key-value的迁移)
15 对单个槽分片
如槽4894在6380对应的节点上,现在需要将该槽移动到6382节点上需要执行如下命令
14.1 CLUSTER SETSLOT <slot> MIGRATING <target_id> 将本节点的槽 slot 迁移到 target_id(6382节点对应的节点名称) 指定的节点中
14.2 CLUSTER SETSLOT <slot> IMPORTING <source_id> 从 source_id(6380节点对应的节点名称) 指定的节点中导入槽 slot 到本节点
14.3 CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键
14.4 migrate target_id_ip target_id_port <key> 0(表示数据库号) timeout
14.5 循环3,4步直至所有的key都已经合并到target_id
14.6 在source_id节点上执行:cluster setslot <slot> node <target_id>
在target_id节点上执行:cluster setslot <slot> node <target_id> 此处书上说的是任意节点上执行cluster setslot命名即可,但是在操作过程中发现仅在source_id节点上执行cluster setslot后,在source_id查看cluster nodes信息是对的
但是在其它节点查看cluster nodes信息槽信息是不对的,经过长时间的等待之后,信息仍不对,之后在target_id上重新执行cluster setslot命令之后 整个集群上各个节点的cluster nodes信息保持了一致
16 在部署redis集群中遇见的问题:
16.1 在安装软件的时候出现:insserv:starting redis depends on ondeman and therefor on system facility '$all' which can not be true!
原因在于:之前部署redis-6379的时候设置了开机启动即配置了/etc/init.d/redis和/etc/rc.d/redis
在redis文件中#!/bin/sh之后增加:
### BEGIN INIT INFO
# Provides: REDIS
# Required-Start: $network $remote_fs $syslog $time
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: REDIS
### END INIT INFO
信息即可
具体文件内容如下:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: REDIS
# Required-Start: $network $remote_fs $syslog $time
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: REDIS
### END INIT INFO
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF &
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
相关文章推荐
- 使用redis集群+tomcat缓存共享下session丢失问题产生原因以及解决
- 【集群部署】redis解决session共享问题
- Ubuntu 14.04 Redis4.02 集群部署并记录遇到的问题以及对应解决方案
- 总结用cygwin+eclipse+NDK编译hellojni的详细步骤,以及所遇到问题的解决方法
- java零碎要点---大型软件部署方案,磁盘阵列,raid提升硬盘性能,解决由于集群带来的文件共享问题
- [原创]经历:asp.net oracle 部署问题以及解决方法
- win7共享文件步骤以及权限不足问题解决方法
- Redis 测试以及集群部署方案
- Windows XP下部署php apche mysql时 不能使用mysql_connect的问题:以及安装配置步骤
- Sql Server 2005 与Sql Server Mobile(Sql server 2005 mobile Edition)数据同步步骤以及问题解决方案
- 经历:asp.net oracle 部署问题以及解决方法
- 使用solr4.9部署到tomcat上出现Context [/solr] startup failed due to previous errors问题以及解决办法
- eclipse配置tomcat,以及部署项目到tomcat(解决项目部署后,webapps中无项目文件问题)
- tftp服务器的安装、启用以及完全正确步骤安装后未出现提示的问题解决
- 创建redis集群时出现no such fileto load -- rubygems问题的解决
- 在部署MVC4.0网站的过程中遇到的问题以及解决办法
- 水晶报表部署以及相关问题解决方案
- linux安装java的步骤以及问题解决
- linux(centOS6) 安装Mysql 5.6.19数据库步骤、 问题以及相应的解决办法
- Xcode7 真机调试步骤以及遇到的问题解决办法