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

[经验分享] 搭建和测试 Redis 主备和集群

[复制链接]

尚未签到

发表于 2017-12-22 07:20:38 | 显示全部楼层 |阅读模式
  本文章只是自我学习用,不适宜转载。

1. Redis主备集群

1.1 搭建步骤
  机器:海航云虚机(2核4GB内存),使用 Centos 7.2 64bit 操作系统,IP 分别是 192.168.100.5(主) 和 192.168.100.6(备)。
  Redis 版本:3.2.3

1.1.1 在主备节点上,做如下安装
  

sudo yum update  
sudo yum install epel
-release  
sudo yum update
  
sudo yum install redis
  
sudo systemctl start redis
  
sudo systemctl enable redis #配置redis在启动机器时自动启动
  

  验证是否安装正确:
DSC0000.png


1.1.2 配置主备节点
  主节点上,修改 /etc/redis.conf,设置 bind 127.0.0.1 192.168.100.5,然后运行 sudo systemctl restart redis 来重启redis。
  主节点上,修改 /etc/redis.conf,设置 slaveof 192.168.100.5 6379,然后运行 sudo systemctl restart redis 来重启redis。
  确认是否设置成功:


  • 在 master 上设置一个key/value:
DSC0001.png



  • 在 salve 上试着查看:
DSC0002.png



  • 不成功。检查 slave 上的 master 日志:
DSC0003.png



  • 检查网络连接,都没有问题。检查 master 节点,看看 redis 是否在网卡 192.168.100.5 的 6379 上监听,发现没有。再检查 redis.conf,发现有两行 bind,好吧。修改后,在 slave 上能取到 'a' 的value。
  • 查看两者之间的复制状态。在 master 上:
DSC0004.png



  • 在 slave 上,能看到自身的 role 和 master 的信息,以及 replication 的信息等
DSC0005.png


1.1.3 测试benchmark
  在 master 上,运行:
DSC0006.png

  不清楚这些绝对值意味着什么,但是和 https://redis.io/topics/benchmarks 上的下面结果差不多:
DSC0007.png


1.1.4 将备升主
  在备升主之前,在备上无法写:
DSC0008.png

  将备升主:
DSC0009.png

  此时它就可写了:
DSC00010.png


1.1.5 设置过期时间
  https://redis.io/commands/expire
DSC00011.png


1.1.6 持久化
  https://redis.io/topics/persistence
  (1)关于持久化的几个问题:


  • RDB 模式:Redis 在指定的时间间隔上对数据集做快照。RDB 对日常备份和灾备都非常方便,而且对性能没有太大的影响。通常定时,比如每5分钟来做快照,但是使用它还是会丢数据。
  • AOF:Redis 服务器端将它收到的所有写操作以追加写方式写入到日志文件中,以便在服务器重启时重新执行。AOF有较强的灵活性,比如每秒刷新,每次写就刷新等;但是,AOF 文件通常比 RDB 文件大。根据不同的写入模式,AOF 通常会比 RDB 慢。
  • 默认开启 RDB,关闭 AOF。用户可以将两者都关闭,或者将两者都开启。官方不建议单独使用 AOF。如果对数据丢失有一定的容忍度,比如五分钟,则可以使用 RDB;否则,建议两者同时使用。
  (2)测试 RDB:
  文件的默认路径是 /var/lib/redis/dump.rbd.
  默认配置:
  save 900 1 #15分钟内如有一个1个key变化
  save 300 10 #5分钟内,如果有10个key变化
  save 60 10000 #1分钟内如果有10000个key变化
  写入10个key后,备份写入:
DSC00012.png

  在日志中能看到完整检测和写入过程:
DSC00013.png

  (3)测试 AOF
  AOF 默认被关闭,通过修改配置文件中的 appendonly yes 来将其打开。相关配置包括:


  • appendfsync everysec  #每隔一秒sync
  • appendfilename "appendonly.aof"  #AOF文件名
  写入两个key/value,然后看到 aof 文件被修改了,其内容是文本格式:
DSC00014.png


2. Redis Cluster
  Redis 从 3.0.5 版本开始推出了 Redis cluster 版本。

2.1 安装
  主要参考文档:https://redis.io/topics/cluster-tutorial
  (1)创建配置文件 redis.conf
  

port 7000  
cluster
-enabled yes  
cluster
-config-file nodes.conf  
cluster
-node-timeout 5000  
appendonly yes
  

  (2)创建留个目录,每个目录运行一个 redis 进程,代表一个 redis 节点。共6个节点,3主3备。
  

mkdir cluster-test  
cd cluster
-test  
mkdir
7000 7001 7002 7003 7004 7005  

  (3)将 redis.conf 拷贝到 7000 ~ 7005 目录中,修改其中的 port 值为各目录name,并且将 redis-server 文件拷贝到每个目录中。
  (4)进入每个目录,启动进程
  

../redis-server ./redis.conf &  

  结果如下:
  

[cloud-user@redis-slave ~]$ ps -ef | grep redis  
cloud
-u+ 23828     1  0 17:05 ?        00:00:04 ./redis-server *:7000 [cluster]  
cloud
-u+ 23831     1  0 17:05 ?        00:00:04 ./redis-server *:7001 [cluster]  
cloud
-u+ 23834     1  0 17:05 ?        00:00:04 ./redis-server *:7002 [cluster]  
cloud
-u+ 23837     1  0 17:06 ?        00:00:04 ./redis-server *:7003 [cluster]  
cloud
-u+ 23840     1  0 17:06 ?        00:00:04 ./redis-server *:7004 [cluster]  
cloud
-u+ 23843     1  0 17:06 ?        00:00:05 ./redis-server *:7005 [cluster]  

  (5)下载 redis 源码,比如 http://download.redis.io/releases/redis-3.2.3.tar.gz,解压,从 src 目录找到 redis-trib.rb 文件,拷贝到工作目录。注意redis-trib.rb版本必须和你使用的redis的版本相同,否则会出现兼容性问题。其github 源代码 在这里。
  (6)安装 ruby 和 rubygems
  

sudo yum install ruby  sudo yum install rubygems
  sudo gem install redi
  

  (7)运行下面的命令,创建 cluster:
  

sudo ruby 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  

  (8)检查cluster 状态,OK
DSC00015.png

  可以看到,6个节点,分为3个master,3个slave。每个master分了5461个slots,共计 16384 slots。
  (9)基本操作
DSC00016.png


2.2 集群操作

2.2.1 将 7000 (master) 杀掉
DSC00017.png

  此时,7003 由 slave 变为 master,它没有 slave。原来在 7000 上的数据改到了 7003 上:
DSC00018.png

  启动 7000,它变为了 7003 的 slave:
DSC00019.png


2.2.2 增加主节点
  (1)按照同样方法,启动 7006 redis 进程
  (2)运行 sudo ruby redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000 命令,将它加入集群
  (3)此时,它作为孤立的 master node,上面却没有分配 slots
DSC00020.png

  (4)执行 reshard 操作
  

sudo ruby redis-trib-3.2.3.rb reshard 127.0.0.1:7000  

  结果:
DSC00021.png

  会看到从其他的 master 上有移动一些 slots 到 7006 上。

2.2.3 增加从节点
  (1)增加 7007
  (2)运行
  

sudo ruby redis-trib.rb add-node --slave --master-id 98c93f338eaada7ced83e0e02360721c6f2187e2 127.0.0.1:7007 127.0.0.1:7000  

  结果:
DSC00022.png

  能看到 7006 和 7007 之间的主备关系:
DSC00023.png

  2.2.4 移除主节点
  运行:
  

udo ruby redis-trib.rb del-node 127.0.0.1:7000 98c93f338eaada7ced83e0e02360721c6f2187e2  

  结果:
DSC00024.png

  看来要先做resharding:
DSC00025.png

  结果:
DSC00026.png



  • 7007 成了 7001 的 slave
  • 7006 被直接删除了
2.2.5 移除从节点
  直接删除,不需要提前做 resharding:
DSC00027.png

  参考链接:
  https://redis.io/presentation/Redis_Cluster.pdf
  https://www.zybuluo.com/phper/note/195558

运维网声明 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-426689-1-1.html 上篇帖子: 使用composer构建PHP框架怎么把Redis引入 下篇帖子: Window环境下的Redis集群部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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