设为首页 收藏本站
查看: 1034|回复: 0

[经验分享] 搭建redis-cluster环境

[复制链接]

尚未签到

发表于 2018-11-5 11:37:40 | 显示全部楼层 |阅读模式
  前提:之前因为redis-cluster没有php客户端+小白鼠,所以直接一票否决,当前情况下使用的redis高可用是通过哨兵+脚本vip切换,但目前redis支持了php客户端,我准备测试下redis cluster.
  参考官网文档:http://redis.io/topics/cluster-tutorial
  使用版本:3.0.7  下载地址:http://redis.io/download
  server环境:10.1.3.191
  目的:构建一个6个master、6个slave的集群环境
  1. 下载
  cd /opt/soft/
  wget  http://219.239.26.10/files/10300000079CAD74/120.52.72.46/download.redis.io/c3pr90ntcsf0/releases/redis-3.0.7.tar.gz
  2. 解压安装
  
  tar -zxf redis-3.0.7.tar.gz
  cd redis-3.0.7
  make && make install
  3. 统一配置文件
  
  cd /opt/soft/redis-3.0.7/
  cp redis.conf redis.conf_bak
  重点参数如下:
maxmemory  5Gb  
port 7000
  
cluster-enabled yes
  
pidfile /var/run/redis_7000.pid
  
cluster-config-file nodes-7000.conf
  
cluster-node-timeout 5000
  
appendonly yes
  
dir /u01/redis-cluster-test/7000/data/
  
logfile "/u01/redis-cluster-test/log/redis_7000.log"
  4. 系统配置
echo 512 >/proc/sys/net/core/somaxconn  
sysctl vm.overcommit_memory=1
  
echo never > /sys/kernel/mm/transparent_hugepage/enabled
  
yum install ruby rubygems -y
  
gem install redis
  5. 统一脚本配置
function create_dir  
{
  
#创建数据文件和配置文件目录
  
port="7001 7002 7003 7004 7005 8000 8001 8002 8003 8004 8005"
  
for i in $port; do
  
mkdir -p /etc/redis/$i/
  
mkdir -p /u01/redis-cluster-test/$i/data/
  
done
  
mkdir -p /u01/redis-cluster-test/log
  
}
  

  
function conf
  
{
  
# 修改配置文件
  
port="7001 7002 7003 7004 7005 8000 8001 8002 8003 8004 8005 "
  
for i in $port;
  
do
  
cp /etc/redis/7000/redis.conf /etc/redis/$i/  #copy redis.conf
  
cd /etc/redis/$i/
  
sed -i "s/7000/$i/g" redis.conf
  
done
  
}
  

  

  
function start_redis
  
{
  

  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/7000/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/7001/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/7002/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/7003/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/7004/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/7005/redis.conf &
  

  

  

  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/8000/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/8001/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/8002/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/8003/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/8004/redis.conf &
  
/opt/soft/redis-3.0.7/src/redis-server /etc/redis/8005/redis.conf &
  
}
  

  
create_dir
  
conf
  
start_redis
  执行脚本启动后如下展示
DSC0000.png

  6. 创建集群
  #建立12个实例的集群
/opt/soft/redis-3.0.7/src/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 127.0.0.1:8000 127.0.0.1:8001 \
  
127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005
DSC0001.jpg

  7. 集群管理命令
集群  
CLUSTER INFO 打印集群的信息
  
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
  
节点
  
CLUSTER MEET   将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
  
CLUSTER FORGET  从集群中移除 node_id 指定的节点。
  
CLUSTER REPLICATE  将当前节点设置为 node_id 指定的节点的从节点。
  
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
  
槽(slot)
  
CLUSTER ADDSLOTS  [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
  
CLUSTER DELSLOTS  [slot ...] 移除一个或多个槽对当前节点的指派。
  
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
  
CLUSTER SETSLOT  NODE  将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
  
CLUSTER SETSLOT  MIGRATING  将本节点的槽 slot 迁移到 node_id 指定的节点中。
  
CLUSTER SETSLOT  IMPORTING  从 node_id 指定的节点中导入槽 slot 到本节点。
  
CLUSTER SETSLOT  STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
  

  
CLUSTER KEYSLOT  计算键 key 应该被放置在哪个槽上。
  
CLUSTER COUNTKEYSINSLOT  返回槽 slot 目前包含的键值对数量。
  
CLUSTER GETKEYSINSLOT   返回 count 个 slot 槽中的键。
  8. 集群简单测试
  测试1:查看集群状态等
DSC0002.png

  测试2:模拟宕机切换
  注意一点集群客户端连接方式需要用:redis-cli -c -p 7000 登陆,否则在执行写入的时候会报错
  附: -c        Enable cluster mode (follow -ASK and -MOVED redirections)
  
  127.0.0.1:7000> set tiger bear
  (error) MOVED 2772 127.0.0.1:7001
  127.0.0.1:7000> get tiger
  (error) MOVED 2772 127.0.0.1:7001
  redis-cli -c -p 7000
  127.0.0.1:7000> set tiger bear
  -> Redirected to slot [2772] located at 127.0.0.1:7001
  OK
  127.0.0.1:7001> get tiger
  "bear"
  127.0.0.1:7001>
  高可用测试1:模拟转存的实例宕机
  上述说明在7000实例插入的key备份在了7001实例上,通过其他节点来访问key(tiger)的时候,也都是提示分发到7001端口。
# redis-cli -c -p 7001  
127.0.0.1:7001> SHUTDOWN
  
not connected>
  
# redis-cli -c -p 7004
  
127.0.0.1:7004> get tiger
  
-> Redirected to slot [2772] located at 127.0.0.1:8001
  
"bear"
  说明:主动shutdown7001端口后,再去其他节点访问key(tiger),会转发的8001(7001的slave)
  这里的slave并不同于slaveof中的slave概念,是集群给实例的定位,作为M的备切点,所以实际使用的时候,作为‘主备’的实例不要放在一个机器上。
  好,我们再启动7001实例,又会怎么样的?
  # /opt/soft/redis-3.0.7/src/redis-server /etc/redis/7001/redis.conf &
  结果是再次访问还是会访问8001实例,我们把8001下掉,如下是测试结果
# redis-cli -c -p 7004  
127.0.0.1:7004> get tiger
  
-> Redirected to slot [2772] located at 127.0.0.1:8001
  
"bear"
  

  
# redis-cli -c -p 8001
  
127.0.0.1:8001> SHUTDOWN
  
not connected>
  

  
# redis-cli -c -p 7004
  
127.0.0.1:7004> get tiger
  
(error) CLUSTERDOWN The cluster is down
  
127.0.0.1:7004> get tiger
  
-> Redirected to slot [2772] located at 127.0.0.1:7001
  
"bear"
  当8001下掉的时候,立马访问会提示集群宕机,是因为集群切换也需要时间,短暂不能用,很快切换后又回到7001节点。
  今天先写到这,后续继续添加内容.....
  继续之前:
   添加新的master节点;
  a. 新启动一个实例9000 ok (do it yourself)
  b. redis-trib.rb add-node 10.1.3.191:9000 10.1.3.191:7000
DSC0003.png

  c. 分配数据
  redis-trib.rb reshard 10.1.3.191:9000
  输入被分配的实例id:57e15ffc521a26e4c314447a31ba85afa8d87324
  然后被分配的slot个数:1000
  系统会打印出来需要转移的slot跟你确认,输入yes确定
  go~~
DSC0004.png

   添加一个slave节点
./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000 移除一个节点
  ./redis-trib del-node 127.0.0.1:7000 57e15ffc521a26e4c314447a31ba85afa8d87324
   迁移一个slave节点
  进入某个slave节点,执行 CLUSTER REPLICATE  57e15ffc521a26e4c3144324
  即可更换slave信息



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631065-1-1.html 上篇帖子: POPTEST老李分享操作redis-10978776 下篇帖子: redis 基准测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表