linux-redis学习经历四,redis集群初步体验

Redis的初步搭建及被入侵经历 越来越觉得Redis的火热,同时日常开发中迫切需要用到,所以赶紧来充充电吧。网上非常详细的介绍了Redis的来源、特点、数据结构、应用场景等。在这里仅以一个新接触的入门者来自我总结下,Redis可以理解为以内存作为数据存储介质,因此读写效率极高,相比较于传统的关系数据库,如Mysql,非常适合存储读取频繁使用的数据。同时实现了持久化,不用担心数据丢失,支持多种数据结构,主从模式、配置集群什么的当然... 阅读详情
[2018/1/30 14:29:18] [root@bogon redis]# ll
[2018/1/30 14:29:18] 总用量 60
[2018/1/30 14:29:18] -rw-r--r--. 1 root root   110 1月  30 22:28 appendonly.aof
[2018/1/30 14:29:18] drwxr-xr-x. 2 root root  4096 1月  29 22:17 bin
[2018/1/30 14:29:18] -rw-r--r--. 1 root root   100 1月  30 22:29 dump.rdb
[2018/1/30 14:29:18] -rw-r--r--. 1 root root 46700 1月  30 22:18 redis.conf
//数据持久化方式,可以使用rdb,效率高,但保存间隔长,数据容易缺失。
//或者是aof方式,这个日志形式,比较频繁,安全,但相率相对较低。
//aof配置:
//编辑redis.conf;appendonly no默认关闭aof方式 我们修改成yes 就开启;
//always 是 只要发生修改,立即同步 (推荐实用 安全性最高)
//everysec 是 每秒同步一次;
//no是不同步。我们修改成always
//rdb设置:
//save 900 1 表示 每900秒内至少有1个kery发生变化,就持久化
//save 300 10表示 每300秒内至少有10个key发生变化,就持久化
//save 60 10000表示 每60秒内至少有10000个key发生变化,就持久化
[2018/1/30 14:29:24] [root@bogon redis]# vi appendonly.aof 
[2018/1/30 14:30:48] [root@bogon redis]# bin/redis-server redis.conf 
[2018/1/30 14:30:52] [root@bogon redis]# bin/redis-cli 
[2018/1/30 14:30:58] 127.0.0.1:6379> keys *
[2018/1/30 14:30:58] 1) "aa"
[2018/1/30 14:30:58] 2) "cc"
[2018/1/30 14:30:58] 3) "bb"

[BEGIN] 2018/1/30 14:46:28
[2018/1/30 14:46:28] Disconnected from remote host(centos) at 14:35:49.
Type `help' to learn how to use Xshell prompt.
[d:\~]$ 
Connecting to 192.168.0.154:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Tue Jan 30 17:42:25 2018 from 192.168.0.122
//redis实验集群
[2018/1/30 14:47:07] [root@bogon ~]# cd /usr/local/
[2018/1/30 14:47:08] [root@bogon local]# ll
[2018/1/30 14:47:08] 总用量 0
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 bin
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 etc
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 games
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 include
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 lib
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 lib64
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 libexec
[2018/1/30 14:47:08] drwxr-xr-x. 3 root root 69 1月  30 22:45 redis
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 sbin
[2018/1/30 14:47:08] drwxr-xr-x. 5 root root 46 1月  24 19:34 share
[2018/1/30 14:47:08] drwxr-xr-x. 2 root root  6 6月  10 2014 src
[2018/1/30 14:47:27] [root@bogon local]# cd bin
//将redis文件下的redis-trib.rb复制到/usr/local/bin/下,使能运行。
//redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。
//redis-trib.rb是redis作者用ruby完成的。
[2018/1/30 14:48:48] [root@bogon bin]# cp /root/redis-3.2.11/src/redis-trib.rb /usr/local/bin/
[2018/1/30 14:48:51] [root@bogon bin]# ll
[2018/1/30 14:48:51] 总用量 60
[2018/1/30 14:48:51] -rwxr-xr-x. 1 root root 60852 1月  30 22:47 redis-trib.rb
//创建集群文件夹,这里以端口命名,可以连续创建
[2018/1/30 14:51:21] [root@bogon bin]# mkdir /root/redis_cluster
[2018/1/30 14:52:22] [root@bogon redis_cluster]# mkdir 7001 7002 7003 7004 7005 7006
[2018/1/30 14:52:24] [root@bogon redis_cluster]# ll
[2018/1/30 14:52:24] 总用量 0
[2018/1/30 14:52:24] drwxr-xr-x. 2 root root 6 1月  30 22:51 7001
[2018/1/30 14:52:24] drwxr-xr-x. 2 root root 6 1月  30 22:51 7002
[2018/1/30 14:52:24] drwxr-xr-x. 2 root root 6 1月  30 22:51 7003
[2018/1/30 14:52:24] drwxr-xr-x. 2 root root 6 1月  30 22:51 7004
[2018/1/30 14:52:24] drwxr-xr-x. 2 root root 6 1月  30 22:51 7005
[2018/1/30 14:52:24] drwxr-xr-x. 2 root root 6 1月  30 22:51 7006
//将redis配置文件复制到7001文件下
[2018/1/30 14:54:10] [root@bogon ~]# copy redis-3.2.11/redis.conf redis_cluster/7001/
//修改配置文件如下:
//port 7001  //六个节点配置文件分别是7001-7006
//daemonize yes        //redis后台运行
//pidfile /var/run/redis_7001.pid   //pidfile文件对应7001-7006
//cluster-enabled yes   //开启集群
//cluster-config-file nodes_7001.conf  //保存节点配置,自动创建,自动更新对应7001-7006
//cluster-node-timeout 5000    //集群超时时间,节点超过这个时间没反应就断定是宕机
//appendonly yes   //存储方式,aof,将写操作记录保存到日志中
[2018/1/30 14:55:17] [root@bogon ~]# vi redis_cluster/7001/redis.conf 
[root@bogon redis_cluster]# cp 7001/redis.conf  7002/
[root@bogon redis_cluster]# cp 7001/redis.conf  7003/
[root@bogon redis_cluster]# cp 7001/redis.conf  7004/
[root@bogon redis_cluster]# cp 7001/redis.conf  7005/
[root@bogon redis_cluster]# cp 7001/redis.conf  7006/
[root@bogon redis_cluster]# vi 7002/redis.conf 
[root@bogon redis_cluster]# vi 7003/redis.conf 
[root@bogon redis_cluster]# vi 7004/redis.conf 
[root@bogon redis_cluster]# vi 7005/redis.conf 
[root@bogon redis_cluster]# vi 7006/redis.conf 
//启动六个节点
[2018/1/30 15:15:15] [root@bogon redis_cluster]# /usr/local/redis/bin/redis-server 7001/redis.conf 
[2018/1/30 15:15:15] [root@bogon redis_cluster]# /usr/local/redis/bin/redis-server 7002/redis.conf 
[2018/1/30 15:15:18] [root@bogon redis_cluster]# /usr/local/redis/bin/redis-server 7003/redis.conf 
[2018/1/30 15:15:21] [root@bogon redis_cluster]# /usr/local/redis/bin/redis-server 7004/redis.conf 
[2018/1/30 15:15:24] [root@bogon redis_cluster]# /usr/local/redis/bin/redis-server 7005/redis.conf 
[2018/1/30 15:15:27] [root@bogon redis_cluster]# /usr/local/redis/bin/redis-server 7006/redis.conf 
//查看是否启动成功
[2018/1/30 15:15:46] [root@bogon redis_cluster]# ps -ef |grep -i redis
[2018/1/30 15:15:46] root       3023      1  0 22:30 ?        00:00:08 bin/redis-server *:6379
[2018/1/30 15:15:46] root       3126      1  0 23:12 ?        00:00:00 /usr/local/redis/bin/redis-server *:7001 [cluster]
[2018/1/30 15:15:46] root       3136      1  0 23:14 ?        00:00:00 /usr/local/redis/bin/redis-server *:7002 [cluster]
[2018/1/30 15:15:46] root       3140      1  0 23:14 ?        00:00:00 /usr/local/redis/bin/redis-server *:7003 [cluster]
[2018/1/30 15:15:46] root       3144      1  0 23:14 ?        00:00:00 /usr/local/redis/bin/redis-server *:7004 [cluster]
[2018/1/30 15:15:46] root       3148      1  0 23:14 ?        00:00:00 /usr/local/redis/bin/redis-server *:7005 [cluster]
[2018/1/30 15:15:46] root       3152      1  0 23:14 ?        00:00:00 /usr/local/redis/bin/redis-server *:7006 [cluster]
[2018/1/30 15:15:46] root       3156   3037  0 23:14 pts/0    00:00:00 grep --color=auto -i redis
//会生成对应配置文件
[2018/1/30 15:17:28] [root@bogon redis_cluster]# ll
[2018/1/30 15:17:28] 总用量 28
[2018/1/30 15:17:28] drwxr-xr-x. 2 root root  23 1月  30 23:12 7001
[2018/1/30 15:17:28] drwxr-xr-x. 2 root root  23 1月  30 23:12 7002
[2018/1/30 15:17:28] drwxr-xr-x. 2 root root  23 1月  30 23:13 7003
[2018/1/30 15:17:28] drwxr-xr-x. 2 root root  23 1月  30 23:13 7004
[2018/1/30 15:17:28] drwxr-xr-x. 2 root root  23 1月  30 23:13 7005
[2018/1/30 15:17:28] drwxr-xr-x. 2 root root  23 1月  30 23:13 7006
[2018/1/30 15:17:28] -rw-r--r--. 1 root root   0 1月  30 23:10 appendonly.aof
[2018/1/30 15:17:28] -rw-r--r--. 1 root root  77 1月  30 23:10 dump.rdb
[2018/1/30 15:17:28] -rw-r--r--. 1 root root 112 1月  30 23:10 nodes-7001.conf
[2018/1/30 15:17:28] -rw-r--r--. 1 root root 112 1月  30 23:14 nodes-7002.conf
[2018/1/30 15:17:28] -rw-r--r--. 1 root root 112 1月  30 23:14 nodes-7003.conf
[2018/1/30 15:17:28] -rw-r--r--. 1 root root 112 1月  30 23:14 nodes-7004.conf
[2018/1/30 15:17:28] -rw-r--r--. 1 root root 112 1月  30 23:14 nodes-7005.conf
[2018/1/30 15:17:28] -rw-r--r--. 1 root root 112 1月  30 23:14 nodes-7006.conf
//因为redis-trib.rb工具是由ruby语言写的,所有使用前要先安装ruby
[2018/1/30 15:18:09] [root@bogon redis_cluster]# cd 
[2018/1/30 15:19:11] [root@bogon ~]# yum -y install ruby ruby-devel rubygems rpm-build
[2018/1/30 15:19:13] 已加载插件:fastestmirror
[2018/1/30 15:19:49] http://mirrors.tuna.tsinghua.edu.cn/centos/7.4.1708/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tuna.tsinghua.edu.cn/centos/7.4.1708/os/x86_64/repodata/repomd.xml: (28, 'Resolving timed out after 30417 milliseconds')
[2018/1/30 15:19:49] 正在尝试其它镜像。
…………
[2018/1/30 15:21:43] 完毕!
//gem是ruby的命令,类似yum,可以理解为从一个庞大的包库里下载需要的包和依赖。
//这里报错:意思为ruby版本太低
[2018/1/30 15:23:04] [root@bogon ~]# gem install redis
[2018/1/30 15:23:06] Fetching: redis-4.0.1.gem (100%)
[2018/1/30 15:23:06] ERROR:  Error installing redis:
[2018/1/30 15:23:06] 	redis requires Ruby version >= 2.2.2.
[2018/1/30 15:24:26] [root@bogon ~]# redis-trib.rb create --replicas 1  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:7006
[2018/1/30 15:24:26] /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
[2018/1/30 15:24:26] 	from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'
[2018/1/30 15:24:26] 	from /usr/local/bin/redis-trib.rb:25:in `<main>'
//这因为没有正常安装ruby的redis所以报错
[2018/1/30 15:28:06] [root@bogon ~]# redis-trib.rb create --replicas 1  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:7006
[2018/1/30 15:28:06] /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
[2018/1/30 15:28:06] 	from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'
[2018/1/30 15:28:06] 	from /usr/local/bin/redis-trib.rb:25:in `<main>'
//安装rvm:Ruby Version Manager,Ruby版本管理器,
[2018/1/30 15:47:24] [root@bogon rvm]# gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
[2018/1/30 15:47:24] gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
[2018/1/30 15:47:24] gpg: 下载密钥‘D39DC0E3’,从 hkp 服务器 keys.gnupg.net
[2018/1/30 15:47:27] gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
[2018/1/30 15:47:27] gpg: 密钥 D39DC0E3:公钥“Michal Papis (RVM signing) <mpapis@gmail.com>”已导入
[2018/1/30 15:47:27] gpg: 没有找到任何绝对信任的密钥
[2018/1/30 15:47:27] gpg: 合计被处理的数量:1
[2018/1/30 15:47:27] gpg:           已导入:1  (RSA: 1)
[2018/1/30 15:47:37] [root@bogon rvm]# curl -L get.rvm.io | bash -s stable
[2018/1/30 15:47:37]   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
[2018/1/30 15:47:37]                                  Dload  Upload   Total   Spent    Left  Speed
[2018/1/30 15:47:38] 100   194  100   194    0     0    192      0  0:00:01  0:00:01 --:--:--   192
[2018/1/30 15:47:39] 100 24090  100 24090    0     0  11714      0  0:00:02  0:00:02 --:--:-- 23365
[2018/1/30 15:47:42] Downloading https://github.com/rvm/rvm/archive/1.29.3.tar.gz
[2018/1/30 15:48:27] Downloading https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc
[2018/1/30 15:48:30] gpg: 于 2017年09月11日 星期一 04时59分21秒 CST 创建的签名,使用 RSA,钥匙号 BF04FF17
[2018/1/30 15:48:30] gpg: 完好的签名,来自于“Michal Papis (RVM signing) <mpapis@gmail.com>”
[2018/1/30 15:48:30] gpg:               亦即“Michal Papis <michal.papis@toptal.com>”
[2018/1/30 15:48:30] gpg:               亦即“[jpeg image of size 5015]”
[2018/1/30 15:48:30] gpg: 警告:这把密钥未经受信任的签名认证!
[2018/1/30 15:48:30] gpg:       没有证据表明这个签名属于它所声称的持有者。
[2018/1/30 15:48:30] 主钥指纹: 409B 6B17 96C2 7546 2A17  0311 3804 BB82 D39D C0E3
[2018/1/30 15:48:30] 子钥指纹: 62C9 E5F4 DA30 0D94 AC36  166B E206 C29F BF04 FF17
[2018/1/30 15:48:30] GPG verified '/usr/local/rvm/archives/rvm-1.29.3.tgz'
[2018/1/30 15:48:30] Creating group 'rvm'
[2018/1/30 15:48:31] 
[2018/1/30 15:48:31] Installing RVM to /usr/local/rvm/
[2018/1/30 15:48:35] Installation of RVM in /usr/local/rvm/ is almost complete:
[2018/1/30 15:48:35] 
[2018/1/30 15:48:35]   * First you need to add all users that will be using rvm to 'rvm' group,
[2018/1/30 15:48:35]     and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.
[2018/1/30 15:48:35] 
[2018/1/30 15:48:35]   * To start using RVM you need to run `source /etc/profile.d/rvm.sh`
[2018/1/30 15:48:35]     in all your open shell windows, in rare cases you need to reopen all shell windows.
//查看安装的路径
[2018/1/30 15:48:59] [root@bogon rvm]# find / -name rvm -print
[2018/1/30 15:49:00] /usr/local/rvm
[2018/1/30 15:49:00] /usr/local/rvm/src/rvm
[2018/1/30 15:49:00] /usr/local/rvm/src/rvm/bin/rvm
[2018/1/30 15:49:00] /usr/local/rvm/src/rvm/lib/rvm
[2018/1/30 15:49:00] /usr/local/rvm/src/rvm/scripts/rvm
[2018/1/30 15:49:00] /usr/local/rvm/bin/rvm
[2018/1/30 15:49:00] /usr/local/rvm/lib/rvm
[2018/1/30 15:49:00] /usr/local/rvm/scripts/rvm
//读取并执行指定文件
[2018/1/30 15:49:12] [root@bogon rvm]# source /usr/local/rvm/scripts/rvm
//查看rvm库中有的版本
[2018/1/30 15:50:13] [root@bogon rvm]# rvm list known
[2018/1/30 15:50:15] # MRI Rubies
[2018/1/30 15:50:15] [ruby-]1.8.6[-p420]
[2018/1/30 15:50:15] [ruby-]1.8.7[-head] # security released on head
[2018/1/30 15:50:15] [ruby-]1.9.1[-p431]
[2018/1/30 15:50:15] [ruby-]1.9.2[-p330]
[2018/1/30 15:50:15] [ruby-]1.9.3[-p551]
[2018/1/30 15:50:15] [ruby-]2.0.0[-p648]
[2018/1/30 15:50:15] [ruby-]2.1[.10]
[2018/1/30 15:50:15] [ruby-]2.2[.7]
[2018/1/30 15:50:15] [ruby-]2.3[.4]
[2018/1/30 15:50:15] [ruby-]2.4[.1]
[2018/1/30 15:50:15] ruby-head
…………
//安装ruby
[2018/1/30 15:50:37] [root@bogon rvm]# rvm install 2.3.4
[2018/1/30 15:50:39] Searching for binary rubies, this might take some time.
[2018/1/30 15:50:40] Found remote file https://rvm_io.global.ssl.fastly.net/binaries/centos/7/x86_64/ruby-2.3.4.tar.bz2
…………
//更换ruby并设置为默认
[2018/1/30 15:55:17] [root@bogon rvm]# rvm use 2.3.4 --default
[2018/1/30 15:55:18] Using /usr/local/rvm/gems/ruby-2.3.4
//查看是否更换成功
[2018/1/30 15:55:36] [root@bogon rvm]# ruby -version
[2018/1/30 15:55:36] ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux]
[2018/1/30 15:55:36] -e:1:in `<main>': undefined local variable or method `rsion' for main:Object (NameError)
//用新的ruby下载
[2018/1/30 15:56:29] [root@bogon rvm]# gem install redis
[2018/1/30 15:56:31] Fetching: redis-4.0.1.gem (100%)
[2018/1/30 15:56:31] Successfully installed redis-4.0.1
……
//创建集群,注意如果对应端口下数据不少清空的也报错,nodes-7001.conf等配置文件里有错误信息的也可能报错
[2018/1/30 15:56:44] [root@bogon rvm]# redis-trib.rb create --replicas 1  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:7006
//创建集群
[2018/1/30 15:56:44] >>> Creating cluster
//有六个节点,至少要三个,不然不能创建
[2018/1/30 15:56:44] >>> Performing hash slots allocation on 6 nodes...
//设置三个为主节点
[2018/1/30 15:56:44] Using 3 masters:
[2018/1/30 15:56:44] 127.0.0.1:7001
[2018/1/30 15:56:44] 127.0.0.1:7002
[2018/1/30 15:56:44] 127.0.0.1:7003
//给主节点分配奴隶(副)节点
[2018/1/30 15:56:44] Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
[2018/1/30 15:56:44] Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
[2018/1/30 15:56:44] Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
//显示哈希槽分配情况,如果集群运行时哈希槽断掉会报错
//M表示主节点,S表里奴隶节点(cluster)
[2018/1/30 15:56:44] M: 03faf924369fb2622aa851b846a797fd613c451d 127.0.0.1:7001
[2018/1/30 15:56:44]    slots:0-5460 (5461 slots) master
[2018/1/30 15:56:44] M: a33ff4fcc56ecb840a5c957e46ea547556531f57 127.0.0.1:7002
[2018/1/30 15:56:44]    slots:5461-10922 (5462 slots) master
[2018/1/30 15:56:44] M: 715a175dfe8b30ad1304787d47ca917d6ef5d1be 127.0.0.1:7003
[2018/1/30 15:56:44]    slots:10923-16383 (5461 slots) master
[2018/1/30 15:56:44] S: 675abfe3278df935ef8a9766c3fe5120ac7f40b1 127.0.0.1:7004
[2018/1/30 15:56:44]    replicates 03faf924369fb2622aa851b846a797fd613c451d
[2018/1/30 15:56:44] S: 6aa9f5b62591b508ae0576c6f769c75e8c86bb42 127.0.0.1:7005
[2018/1/30 15:56:44]    replicates a33ff4fcc56ecb840a5c957e46ea547556531f57
[2018/1/30 15:56:44] S: 6e13358c766de76177e4641c55bc7a246f7dc8e3 127.0.0.1:7006
[2018/1/30 15:56:44]    replicates 715a175dfe8b30ad1304787d47ca917d6ef5d1be
[2018/1/30 15:56:56] Can I set the above configuration? (type 'yes' to accept): yes
[2018/1/30 15:56:56] >>> Nodes configuration updated
[2018/1/30 15:56:56] >>> Assign a different config epoch to each node
[2018/1/30 15:56:56] >>> Sending CLUSTER MEET messages to join the cluster
[2018/1/30 15:56:59] Waiting for the cluster to join..
[2018/1/30 15:56:59] >>> Performing Cluster Check (using node 127.0.0.1:7001)
[2018/1/30 15:56:59] M: 03faf924369fb2622aa851b846a797fd613c451d 127.0.0.1:7001
[2018/1/30 15:56:59]    slots:0-5460 (5461 slots) master
[2018/1/30 15:56:59]    1 additional replica(s)
[2018/1/30 15:56:59] M: a33ff4fcc56ecb840a5c957e46ea547556531f57 127.0.0.1:7002
[2018/1/30 15:56:59]    slots:5461-10922 (5462 slots) master
[2018/1/30 15:56:59]    1 additional replica(s)
[2018/1/30 15:56:59] S: 6aa9f5b62591b508ae0576c6f769c75e8c86bb42 127.0.0.1:7005
[2018/1/30 15:56:59]    slots: (0 slots) slave
[2018/1/30 15:56:59]    replicates a33ff4fcc56ecb840a5c957e46ea547556531f57
[2018/1/30 15:56:59] S: 6e13358c766de76177e4641c55bc7a246f7dc8e3 127.0.0.1:7006
[2018/1/30 15:56:59]    slots: (0 slots) slave
[2018/1/30 15:56:59]    replicates 715a175dfe8b30ad1304787d47ca917d6ef5d1be
[2018/1/30 15:56:59] S: 675abfe3278df935ef8a9766c3fe5120ac7f40b1 127.0.0.1:7004
[2018/1/30 15:56:59]    slots: (0 slots) slave
[2018/1/30 15:56:59]    replicates 03faf924369fb2622aa851b846a797fd613c451d
[2018/1/30 15:56:59] M: 715a175dfe8b30ad1304787d47ca917d6ef5d1be 127.0.0.1:7003
[2018/1/30 15:56:59]    slots:10923-16383 (5461 slots) master
[2018/1/30 15:56:59]    1 additional replica(s)
[2018/1/30 15:56:59] [OK] All nodes agree about slots configuration.
[2018/1/30 15:56:59] >>> Check for open slots...
[2018/1/30 15:56:59] >>> Check slots coverage...
[2018/1/30 15:56:59] [OK] All 16384 slots covered.
[2018/1/30 16:03:29] [root@bogon rvm]# cd
//集群使用时要追加-c表示集群,-p表示用集群的哪个端口
[2018/1/30 16:03:52] [root@bogon ~]# /usr/local/redis/bin/redis-cli -c -p 7001
[2018/1/30 16:04:18] 127.0.0.1:7001> set aa 11
[2018/1/30 16:04:18] OK
//设置内容根据集群算法自带分配,这里7001的内容根据算法得出哈希槽,然后分配给了7002,连接也同时跳转过去
[2018/1/30 16:04:35] 127.0.0.1:7001> set bb "hihi"
[2018/1/30 16:04:35] -> Redirected to slot [8620] located at 127.0.0.1:7002
[2018/1/30 16:04:35] OK
[2018/1/30 16:05:19] 127.0.0.1:7002> quit
[2018/1/30 16:05:24] [root@bogon ~]# /usr/local/redis/bin/redis-cli -c -p 7005
//同理获取数据也根据算法来获取是哪个哈希槽,再确定端口
[2018/1/30 16:05:28] 127.0.0.1:7005> get aa
[2018/1/30 16:05:28] -> Redirected to slot [1180] located at 127.0.0.1:7001
[2018/1/30 16:05:28] "11"
[2018/1/30 16:05:48] 127.0.0.1:7001> quit
//杀死主节点,-9表示无条件强制杀死进程,3136是进程id,这里模拟宕机
[2018/1/30 16:06:02] [root@bogon ~]# ps -ef | grep -i redis
[2018/1/30 16:06:02] root       3023      1  0 1月30 ?       00:00:13 bin/redis-server *:6379
[2018/1/30 16:06:02] root       3126      1  0 1月30 ?       00:00:05 /usr/local/redis/bin/redis-server *:7001 [cluster]
[2018/1/30 16:06:02] root       3136      1  0 1月30 ?       00:00:05 /usr/local/redis/bin/redis-server *:7002 [cluster]
[2018/1/30 16:06:02] root       3140      1  0 1月30 ?       00:00:04 /usr/local/redis/bin/redis-server *:7003 [cluster]
[2018/1/30 16:06:02] root       3144      1  0 1月30 ?       00:00:04 /usr/local/redis/bin/redis-server *:7004 [cluster]
[2018/1/30 16:06:02] root       3148      1  0 1月30 ?       00:00:04 /usr/local/redis/bin/redis-server *:7005 [cluster]
[2018/1/30 16:06:02] root       3152      1  0 1月30 ?       00:00:04 /usr/local/redis/bin/redis-server *:7006 [cluster]
[2018/1/30 16:06:02] root      16593   3037  0 00:04 pts/0    00:00:00 grep --color=auto -i redis
[2018/1/30 16:07:53] [root@bogon ~]# kill -9 3136
[2018/1/30 16:07:54] [root@bogon ~]# ps -ef | grep -i redis
[2018/1/30 16:07:54] root       3023      1  0 1月30 ?       00:00:13 bin/redis-server *:6379
[2018/1/30 16:07:54] root       3126      1  0 1月30 ?       00:00:05 /usr/local/redis/bin/redis-server *:7001 [cluster]
[2018/1/30 16:07:54] root       3140      1  0 1月30 ?       00:00:04 /usr/local/redis/bin/redis-server *:7003 [cluster]
[2018/1/30 16:07:54] root       3144      1  0 1月30 ?       00:00:05 /usr/local/redis/bin/redis-server *:7004 [cluster]
[2018/1/30 16:07:54] root       3148      1  0 1月30 ?       00:00:05 /usr/local/redis/bin/redis-server *:7005 [cluster]
[2018/1/30 16:07:54] root       3152      1  0 1月30 ?       00:00:05 /usr/local/redis/bin/redis-server *:7006 [cluster]
[2018/1/30 16:07:54] root      16596   3037  0 00:06 pts/0    00:00:00 grep --color=auto -i redis
//可以发现原本的主节点7002被强制杀死后消失,对应的子节点变成了主节点。
//如果再次杀死7005,则slots:5461-10922这段哈希槽空缺,报错。
[2018/1/30 16:08:40] [root@bogon ~]# redis-trib.rb check 127.0.0.1:7001
[2018/1/30 16:08:40] >>> Performing Cluster Check (using node 127.0.0.1:7001)
[2018/1/30 16:08:40] M: 03faf924369fb2622aa851b846a797fd613c451d 127.0.0.1:7001
[2018/1/30 16:08:40]    slots:0-5460 (5461 slots) master
[2018/1/30 16:08:40]    1 additional replica(s)
[2018/1/30 16:08:40] M: 6aa9f5b62591b508ae0576c6f769c75e8c86bb42 127.0.0.1:7005
[2018/1/30 16:08:40]    slots:5461-10922 (5462 slots) master
[2018/1/30 16:08:40]    0 additional replica(s)
[2018/1/30 16:08:40] S: 6e13358c766de76177e4641c55bc7a246f7dc8e3 127.0.0.1:7006
[2018/1/30 16:08:40]    slots: (0 slots) slave
[2018/1/30 16:08:40]    replicates 715a175dfe8b30ad1304787d47ca917d6ef5d1be
[2018/1/30 16:08:40] S: 675abfe3278df935ef8a9766c3fe5120ac7f40b1 127.0.0.1:7004
[2018/1/30 16:08:40]    slots: (0 slots) slave
[2018/1/30 16:08:40]    replicates 03faf924369fb2622aa851b846a797fd613c451d
[2018/1/30 16:08:40] M: 715a175dfe8b30ad1304787d47ca917d6ef5d1be 127.0.0.1:7003
[2018/1/30 16:08:40]    slots:10923-16383 (5461 slots) master
[2018/1/30 16:08:40]    1 additional replica(s)
[2018/1/30 16:08:40] [OK] All nodes agree about slots configuration.
[2018/1/30 16:08:40] >>> Check for open slots...
[2018/1/30 16:08:40] >>> Check slots coverage...
[2018/1/30 16:08:40] [OK] All 16384 slots covered.

Rocky Linux 10 上构建高可用 Redis 8.2.0 三主三从集群全攻略 本文详细介绍了在Rocky Linux 10操作系统上,从零开始部署最新版Redis 8.2.0三主三从高可用集群的完整流程。内容涵盖环境规划、系统准备、源码编译、集群配置、故障转移测试及生产环境优化建议,旨在帮助用户构建一个高性能、高可用的分布式缓存解决方案。 阅读详情

相关推荐

分享一次华为面试失败经历......

这几天有幸接到华为二面的面试通知,整个过程大概有九十分钟,面试官真的问的东西很全面的,如果不做足准备是肯定不可以的(当时也问到了多概念的问题)。面试之后,将这些面试题目做了一个分类并且整理出了答案(比较强迫症~需要狂补知识~),面试的有:Linux+Redis+MySQL+算法+网络+Java等,现在记得的就只有这些了,下面分享一下我这一次面试的面经+面试答案+我的学习笔记(有面试专题+脑图),绝对很值得~~~ 01 操作系统、Linux相关 1.1 华为面试问题 1.死锁产生的原因 2.进程、线程

Java圈全能架构师的博客 1万+

mac查看ruby版本出错undefined local variable or method `rsion‘ for main:Object (NameError)

当使用终端输入命令:ruby -version 查看ruby版本时出现error: ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21] -e:1:in `<main>': undefined local variable or method `rsion' for main:Object (NameError) 原因是它将-version解析为rsion。 使用ruby -v或ruby --version

one111a的博客 3366

Redis分片集群实战:单机迁移到Cluster的高可用之路

分布式缓存是应对高并发读写的关键组件,但当数据量呈S型增长时,单机Redis会同时面临内存、CPU单线程和持久化开销的三重瓶颈。哈希槽(hash slot)机制通过固定16384个槽位与动态映射,让数据分片成为提升集群容量与可用性的核心手段,实现故障自动转移与在线扩缩容。从工程实践出发,围绕集群原理、六节点部署、主从切换、业务侧改造及扩容缩容等要点,系统梳理了从单机迁移到Redis Cluster的完整路径与踩坑经验,帮助在高并发场景下构建稳定、可扩展的缓存架构。

weixin_30522983的博客 325

brew install node 安装提示Ruby版本错误等问题

问题描述:更新brew时遇到 /usr/local/Homebrew/Library/Homebrew/brew.rb:12:in `’: Homebrew must be run under Ruby 2.3! You’re running 2.0.0. (RuntimeError)解决方法: 输入:ruby -version提示ruby 2.0.0p648 (2015-12-16 revis

mingtiannihao623的博客 7658

避坑指南:RK3588上编译EtherCAT 1.6时遇到的权限问题和模块安装错误

本文详细解析了在RK3588平台上编译EtherCAT 1.6时常见的权限问题和模块安装错误,提供了两种实战解决方案和嵌入式开发的通用权限管理策略。通过优化内核配置和编译参数,显著提升实时性能,帮助开发者高效完成EtherCAT主站部署。

weixin_33724046的博客 453

微前端实战:MicroApp内存泄漏优化策略与性能调优

本文分享了在大型后台管理系统微前端化过程中,使用MicroApp框架时遇到的内存泄漏实战问题与优化策略。通过深入分析沙箱机制,提出动态加载、精准卸载、沙箱配置优化及第三方库补丁等核心方案,并结合Vue/React子应用专项检查清单,有效解决了内存占用飙升问题,为微前端架构的性能调优提供了系统性解决方案。

weixin_29014939的博客 277

mac osx 下 homebrew安装

由于很多开源的东西,苹果没有安装源,可以使用homebrew来安装,所以在osx下安装好homebrew还是很方便的 查看版本 ruby -versionruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16] -e:1:in `<main>': undefined local variable or method

技术之路 2万+

【已解决】如何在服务器中下载huggingface模型,解决huggingface无法连接

在服务器上使用huggingface模型时,如果直接指定模型名称,用AutoTokenizer.from_pretrained(“model_name”),可能会由于网络原因会报错 Failed to connect to huggingface.co port 443 after 75018 ms: Operation time out因此我们需要下载模型到服务器上,得到模型本地的路径model_dir,再通过AutoTokenizer.from_pretrained(model_dir)方式来使用。

a61022706的博客 4万+

Delphi - 关于错误E2002 File Type is not allowed here

====================================================== 注:本文源代码点此下载 ====================================================== 技术交流,dh讲解. 最近写的程序里面想加入一个log的功能,为了方便以后使用,所以就打算写一个控件.结果遇到了一个问题,这里和大家分享.pro

javazhuanzai的专栏 813

数字麦克风PDM信号采集与STM32 I2S接口应用(二)

在使用STM32的数字麦克风I2S接口时,计算采样率让人头疼,芯片手册上没有明确的说法,而手册上的计算方法经过测试却和实验不符。借助搜索引擎,大部分资料都是来自于开发板卖家或开发板论坛,主要是咪头采集然后配置WM89系列解码芯片,然后配合FatFS、MP3解码等模式,主要是讲解I2S录音、存储、放音等。外文资料得到的也寥寥无几,也没有找到讲解STM32数字麦克风配置、计算的文档。加上网上资料转载、抄袭、浅尝辄止的笔记教程,这些更是让检索大海捞针,过程艰辛一言难尽,有些网文三言两语抑或作者都没有搞清楚随手一写

XIAOYOUDUODUO的博客 6055

如何将一个向量投影到一个平面上_线性代数19——投影矩阵和最小二乘

一维空间的投影矩阵  先来看一维空间内向量的投影:  向量p是b在a上的投影,也称为b在a上的分量,可以用b乘以a方向的单位向量来计算,现在,我们打算尝试用更“贴近”线性代数的方式表达。  因为p趴在a上,所以p实际上是a的一个子空间,可以将它看作a放缩x倍,因此向量p可以用p = xa来表示,只要找出x就可以了。因为a⊥e,所以二者的点积为0:  我们希望化简这个式子从而得出x:  x是一个实数...

weixin_39741101的博客 5230

Redis简介集群

Redis redis的简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会

qq_36322692的博客 222

2026年3月GESP真题及题解(C++七级):物流网络

2026年3月GESP真题及题解(C++七级):物流网络

王老师青少年编程 1126

linux-redis学习经历五,redis多机多节点集群初体验

我这里是用于学习,所以使用的是虚拟机VMware,使用克隆功能复制了第二台服务器。第一台作为管理机,开7001,7002,7003端口的redis服务,第二台开7004,7005,7006端口的服务。 //多机多节点集群 Xshell 5 (Build 1339) Copyright (c) 2002-2017 NetSarang Computer, Inc. All rights reserv

gcc_java的博客 411

1.为什么要学习SIMULINK

用户也可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化的系统模型,可以自上而下或自下而上地阅读模型,也就是说,用户可以查看最顶层的系统,然后通过双击模块进入下层的子系统查看模型,这不仅方便了工程人员的设计,而且可以使自己的模型方块图功能更清晰,结构更合理。此外,利用示波器模块或其他的显示模块,用户可以在仿真运行的同时观察仿真结果,而且还可以在仿真运行期间改变仿真参数,并同时观察改变后的仿真结果,最后的结果数据也可以输出到MATLAB工作区进行后续处理,或利用命令在图形窗口中绘制仿真曲线。

FPGA/MATLAB学习教程/源码/项目合作开发 1546

巡检领域红外热成像相机镜头焦距选择方法总结

摘要:巡检机器人红外热成像相机镜头焦距的选择需综合考虑检测距离、视场角、目标分辨率等核心要素。短焦距(4-6mm)适用于室内近距离巡检,中焦距(12-19mm)适合变电站等中等距离场景,长焦距(25-50mm)则用于光伏板等远距离检测。选型需遵循焦距计算公式f=SL×d,确保目标占据≥3×3像元,同时考虑机器人安装空间、环境适应性及软件联动需求。建议通过样机实测或仿真软件验证选型合理性,以实现对设备故障的精准识别。

start_up_go的博客 299

2024年运维最新总结一下:运维工程师面试的经历及面试相关问题(1),【2024Linux运维最新学习路线

数据量太大的能分表就分表,能分库就分库。基于大家热情高昂的气氛,笔者又花了一个下午的时间回忆并整理在2017年2月24号笔者在东三环边上(快到东四环了,没有地铁过去,到了四惠还要转公交车)的一家传媒公司的面试经历,还好笔者有做笔记的习惯,把之前面试的问题都记录在案,这一次的面试笔者可是记忆犹新,因为这次这家公司都跟笔者发offer了,实在是真心不想去这家公司就找原因推掉了,大家可别学我这么不靠谱。,你要对自己的简历很熟悉,简历上的写的技能自己一定要能说出个一二,因为面试官的很多问题都会挑你简历上写的问。

2401_83946044的博客 914

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

如何快速安装redis集群

本文介绍了使用AI工具自动部署Redis集群的完整流程:1)通过预设别名连接目标服务器;2)从AI提供的多种高可用方案中选择偏好配置;3)全自动完成三节点集群的安装部署,包括自动修正网络配置、生成集群参数;4)自动验证集群状态。整个过程无需人工干预,支持实时进度显示,最终通过cluster nodes命令确认集群搭建成功。该方案显著简化了分布式系统的部署复杂度,实现了智能化运维。(149字)

小王同学的博客 77

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

企业级实战:Linux集群环境Redis高可用部署指南

在主节点redis.conf中,需要特别注意bind配置项设置为服务器内网IP,protected-mode设为no。特别注意down-after-milliseconds和failover-timeout参数的设置,这直接影响故障判断的灵敏度。对于想要深入掌握Redis高可用部署的同学,建议从简单的单机主从开始,逐步扩展到哨兵模式,最后再尝试Redis Cluster方案。通过实际体验,平台的一键部署功能让复杂的Redis集群配置变得非常简单,几分钟就能完成基础环境搭建,大大提高了方案验证效率。

EmeraldWolf23的博客 632

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

redis在linux和window集群,Windows 和 Linux 上Redis的安装守护进程配置方法

# Windows 和 Linux 上Redis的安装守护进程配置Redis 简介​ Redis是目前最常用的非关系型数据库(NOSql)之一,常以Key-Value的形式存储。Redis读写速度远远比关系型数据库高(mysql、oracle)。所以常用作项目热数据缓存Windows上的安装配置2) 解压并安装redis服务以支持守护进程(后台启动)解压之后目录中存在两个配置文件和两个可执行程序两...

weixin_42116604的博客 206

Redis集群Linux部署实战:避坑指南与高可用方案

随着业务数据量和并发请求持续增长,基于Redis构建的分布式缓存系统已成为后端架构的常见选择。传统主从复制与哨兵模式虽能实现部分高可用,却无法突破单机内存和写入瓶颈。Redis Cluster通过哈希槽机制将数据分散到多个主节点,配合从节点自动故障转移,兼顾水平扩展与高可用。在实际Linux环境部署中,节点配置、槽位分配、集群通信、扩容缩容等环节暗藏大量细节,稍有不慎便会出现假集群、槽位冲突或路由异常。从方案选型、源码编译、基础配置到集群创建与运维排错,系统性梳理关键步骤与高频坑点,帮助开发者构建稳定可靠的

weixin_33806859的博客 295

Linux环境Redis Cluster集群部署实战指南

在高并发与海量数据场景下,单机Redis的容量与可用性约束日益凸显,分布式缓存架构成为后端工程化建设的必选项。Redis Cluster作为官方分布式解决方案,通过哈希槽将数据分片至多主节点,由从节点实现自动故障转移,兼顾横向扩展与高可用,是生产环境摆脱单点瓶颈的优选方案。本文面向后端开发与运维人员,系统梳理集群选型依据与部署流程,覆盖编译安装、节点配置、起步认证、槽位路由机制等工程要点,并结合故障演练与性能测试,剖析主从同步、超时误判、大key倾斜等实操中的典型问题。基于真实踩坑经验,沉淀一套可复用的Li

weixin_29597551的博客 76

Redis-Cluster集群部署实战:从单机迁移到Linux搭建

Redis作为内存数据库,单机模式常面临内存与性能瓶颈。Redis-Cluster通过数据分片将键分布到多个节点,实现水平扩展与高可用,其核心是16384个哈希槽和节点间Gossip通信。对于需要突破单机限制的高并发业务,集群部署成为关键。本文围绕Redis-Cluster集群在Linux服务器搭建部署的全过程,基于Redis 5.0x以上版本的工具链变化,详解从节点规划、配置优化到集群创建、故障转移验证的实战步骤,并总结常见坑点,帮助后端和运维人员快速落地。

weixin_30582943的博客 239

Redis系统学习之入门

之前一直都是只会用Redis,但是没有系统的学习过,最近系统的学习了一遍,看的视屏是来自B站的狂神说Java,非常不错推荐一下感谢分享! 网址:https://www.bilibili.com/video/BV1S54y1R7SB?p=1&spm_id_from=pageDriver 概述 Redis是是什么? Redis(Remote Dictionary Server ),即远程...

彼岸舞的博客 103
上一篇: linux-redis学习经历三,了解redis数据和基本操作
下一篇: linux-redis学习经历五,redis多机多节点集群初体验
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值