redis详解
支持添加或者删除节点
添加删除节点无需停止服务
例如
1、创建集群:redis-cli --cluster create --cluster-replicas 1 节点IP地址1:端口… 节点IP地址n:端口
2、远程登录redis数据库:redis-cli -h 192.168.233.100 -p 6379 -c
-c:连接集群结点时使用,此选项可防止moved和ask异常
3、查看集群信息:可登陆redis数据库中,输入cluster info查询集群状态,也可使用命令 redis-cli --cluster info 节点ip:6379
yum -y install gcc gcc-c++ make
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7/
make
make PREFIX=/usr/local/redis install
cd /usr/local/redis/
ln -s /usr/local/redis/bin/* /usr/local/bin/
cd /opt/redis-5.0.7/utils/
./install_server.sh
一路回车
Please select the executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server //手动输入
/etc/init.d/redis_6379 status
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
vim /etc/6379.conf
redis-cli //登录
修改配置文件所有节点
vim /etc/redis/6379.conf
89/ protected-mode no //关闭保护模式
93/ port 6379
137/ daemonize yes /以独立进程启动
833/ cluster-enabled yes //开启群集功能
841/ cluster-config-file nodes-6379.conf // 群集名称文件设置
847/ cluster-node-timeout 15000 //群集超时时间设置
700/ appendonly yes //开启aof 持久化
#bind 127.0.0.1 //注释掉,允许所有节点访问
/etc/init.d/redis_6379 restart
导入key文件
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
安装rvm
curl -sSL https://get.rvm.io | bash -s stable不无法连接下载解决方向,用下面脚本文件执行
将rvm-installer.sh 放到虚拟机中
chmod +x rvm-installer.sh
./rvm-installer.sh //执行脚本
source /etc/profile.d/rvm.sh //执行环节变量
rvm list known //列出可执行ruby安装的版本
rvm install 2.4.10 //安装rvm
rvm use 2.4.10 //使用rvm
ruby -v //查看版本
gem install redis //再次安装Redis
所有节点关闭防火墙和核心防护
iptables -F
setenforce 0
建立Redis群集6组,三对,主从
redis-cli --cluster create 192.168.75.134:6379 \
192.168.75.155:6379 \
192.168.75.200:6379 \
192.168.75.144:6379 \
192.168.75.131:6379 \
192.168.75.132:6379 \
--cluster-replicas 1
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.75.131:6379 to 192.168.75.134:6379
Adding replica 192.168.75.132:6379 to 192.168.75.155:6379
Adding replica 192.168.75.144:6379 to 192.168.75.200:6379
M: 2545e996e6a5bc9bd89498eab753195896c6f683 192.168.75.134:6379
slots:[0-5460] (5461 slots) master
M: 0c6b70fd0e8fde5cd9a17234cacdec0f9745f8e5 192.168.75.155:6379
slots:[5461-10922] (5462 slots) master
M: ed9b3be385920f7d1bd20bd0c58ef2b1c7448edf 192.168.75.200:6379
slots:[10923-16383] (5461 slots) master
S: b58e8073edc1e72d15f44a2fcc8f228b64aa383d 192.168.75.144:6379
replicates ed9b3be385920f7d1bd20bd0c58ef2b1c7448edf
S: 3d358490f7bdd68bd876e9dee0d03eb830ef2321 192.168.75.131:6379
replicates 2545e996e6a5bc9bd89498eab753195896c6f683
S: 3b633f51937b54c5786b538b3f69faed5675d8ce 192.168.75.132:6379
replicates 0c6b70fd0e8fde5cd9a17234cacdec0f9745f8e5
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 192.168.75.134:6379)
M: 2545e996e6a5bc9bd89498eab753195896c6f683 192.168.75.134:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 3b633f51937b54c5786b538b3f69faed5675d8ce 192.168.75.132:6379
slots: (0 slots) slave
replicates 0c6b70fd0e8fde5cd9a17234cacdec0f9745f8e5
M: 0c6b70fd0e8fde5cd9a17234cacdec0f9745f8e5 192.168.75.155:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: b58e8073edc1e72d15f44a2fcc8f228b64aa383d 192.168.75.144:6379
slots: (0 slots) slave
replicates ed9b3be385920f7d1bd20bd0c58ef2b1c7448edf
M: ed9b3be385920f7d1bd20bd0c58ef2b1c7448edf 192.168.75.200:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 3d358490f7bdd68bd876e9dee0d03eb830ef2321 192.168.75.131:6379
slots: (0 slots) slave
replicates 2545e996e6a5bc9bd89498eab753195896c6f683
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
master0: Slots 0 - 5460 ——192.168.75.134:6379
master1: Slots 5461 - 10922 —— 192.168.75.155:6379
master2: Slots 10923 - 16383 ——192.168.75.200:6379
master0:192.168.75.134:6379 slave0:192.168.75.131:6379
master1:192.168.75.155:6379 slave1:192.168.75.132:6379
master2:192.168.75.200:6379 slave2:192.168.75.144:6379
[root@localhost ~]# redis-cli --cluster info 192.168.75.134:6379
192.168.75.134:6379 (004fefa8...) -> 2 keys | 5461 slots | 1 slaves.
192.168.75.200:6379 (0ef7c436...) -> 1 keys | 5461 slots | 1 slaves.
192.168.75.155:6379 (6ecd5793...) -> 2 keys | 5462 slots | 1 slaves.
[OK] 5 keys in 3 masters.
0.00 keys per slot on average.
[root@localhost ~]#
[root@localhost 6379]# redis-cli -c -h 192.168.75.134 //登录
192.168.75.134:6379> use shcool
(error) ERR unknown command `use`, with args beginning with: `shcool`,
192.168.75.134:6379> select 10 //群集模式不能切换库
(error) ERR SELECT is not allowed in cluster mode
192.168.75.134:6379> set name age //新建数据键值name
-> Redirected to slot [5798] located at 192.168.75.155:6379 //哈希槽5798属于master1 范围所以set的新数据就切换到节点master1上。
OK
192.168.75.155:6379> get name //其他节点都可以查看
"age"
192.168.75.155:6379> set id 1
OK
192.168.75.155:6379>
1、将redis节点添加到集群:进入集群中一个节点添加
redis-cli --cluster add-node 新节点IP:端口号 当前集群中已存在的任意节点IP:端口号’
[root@master1 ~]# redis-cli --cluster add-node 192.168.75.47:6379 192.168.75.166:6379 '//redis-cli --cluster add-node 新节点IP:端口号 当前集群中已存在的任意节点IP:端口号'
2、删除节点:redis-cli --cluster del-node ip地址 节点id
在删除主节点时需要将数据哈希槽移到其他节点中然后移走或者删除节点
redis群集至少有三个master才能构建群集。如果有一组的主从节点都down。群集不存在。
[root@master1 ~] cd /var/lib/redis/6379/
[root@master1 6379] ls
appendonly.aof dump.rdb nodes-6379.conf
[root@master1 6379] rm -rf *
3、迁移redis槽位
[root@master1 ~] redis-cli --cluster reshard 192.168.100.41:6379
How many slots do you want to move (from 1 to 16384)? 4096 '//要迁移多少个槽'
What is the receiving node ID? 99521b7fd126b694bcb9a22ffa5a490f31f66543 '//迁移到哪个节点,数据节点id'
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
'//要求输入源节点的id,这里因为原本有三个节点,输入done表示结束'
Source node 1: 7f112f82bcf28a5d0627ea81b48cb76f4ea8605d
Source node 2: df195a34a91d756157a0fda7c71e99d5bd8fad09
Source node 3: a233a23541f431107fed79908318394d8bb30b51
Source node 4: done
'//最后会有一个迁移方案,输入yes表示同意,迁移开始。输入no表示不同意,重新设置迁移方案。'
'//确认是否迁移成功'
[root@master1 ~] redis-cli -h 192.168.100.41 -p 6379
192.168.100.41:6379> cluster nodes
...省略内容
4、迁移后检测各个节点槽的均衡性
[root@master1 ~] redis-cli --cluster rebalance 192.168.100.41:6379
>>> Performing Cluster Check (using node 192.168.100.41:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
*** No rebalancing needed! All nodes are within the 2.00% threshold.
可以看出,节点负责的槽数据差异在2%以内,因此槽分配均衡
5、为扩容的主节点添加从节点
[root@master1 ~] redis-cli -h 192.168.100.48 -p 6379 '//登陆redis数据库'
192.168.100.48:6379> cluster replicate 99521b7fd126b694bcb9a22ffa5a490f31f66543 '//添加从节点id'
OK
192.168.100.48:6379> cluster nodes '//查看节点信息'
...省略内容
6、平衡各节点槽数量
[root@master1 ~] redis-cli --cluster rebalance --cluster-threshold 1 192.168.100.41:6379
>>> Performing Cluster Check (using node 192.168.100.41:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
*** No rebalancing needed! All nodes are within the 1.00% threshold.
192.168.75.134:6379> cluster slots
1) 1) (integer) 10923
2) (integer) 16383
3) 1) "192.168.75.134"
2) (integer) 6379
3) "004fefa8639346e660c76c6026fb84a115962c61"
4) 1) "192.168.75.144"
2) (integer) 6379
3) "f7f6e088652a935f84d87ff8d878bdfb8913217e"
2) 1) (integer) 5462
2) (integer) 10922
3) 1) "192.168.75.155"
2) (integer) 6379
3) "6ecd57933114d2bff21f495ea5ca8c20663fbaff"
4) 1) "192.168.75.132"
2) (integer) 6379
3) "ea154447d0f7c3f73f303d66d43ecf4dc82b9a57"
3) 1) (integer) 0
2) (integer) 5461
3) 1) "192.168.75.200"
2) (integer) 6379
3) "cb882911b47e91e9b046bd564a1b016697aac9ff"
4) 1) "192.168.75.131"
2) (integer) 6379
3) "edd600d6bdac1a5e20956e930b82ea8cd8f5ff81"
192.168.75.134:6379>
Redis Config Resetstat 命令用于重置 INFO 命令中的某些统计数据,包括:
Keyspace hits (键空间命中次数)
Keyspace misses (键空间不命中次数)
Number of commands processed (执行命令的次数)
Number of connections received (连接服务器的次数)
Number of expired keys (过期key的数量)
Number of rejected connections (被拒绝的连接数量)
Latest fork(2) time(最后执行 fork(2) 的时间)
The aof_delayed_fsync counter(aof_delayed_fsync 计数器的值)
语法
redis Config Resetstat 命令基本语法如下:
redis 127.0.0.1:6379> CONFIG RESETSTAT
Redis Ping 命令使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。
通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。
语法
redis Ping 命令基本语法如下:
redis 127.0.0.1:6379> PING
可用版本
>= 1.0.0
返回值
如果连接正常就返回一个 PONG ,否则返回一个连接错误。
实例
# 客户端和服务器连接正常
redis 127.0.0.1:6379> PING
PONG
# 客户端和服务器连接不正常(网络不正常或服务器未能正常运行)
redis 127.0.0.1:6379> PING
Could not connect to Redis at 127.0.0.1:6379: Connection refused