环境说明
本次搭建采用一副本的方式,即3主1副本方式
IP | 主机名 | 节点 |
---|---|---|
192.168.31.10 | redis-01 | master1 |
192.168.31.11 | redis-02 | slave1 |
192.168.31.12 | redis-03 | master2 |
192.168.31.13 | redis-04 | slave2 |
192.168.31.14 | redis-05 | master3 |
192.168.31.15 | redis-06 | slave3 |
- Redis版本号: redis-7.0.8
- 系统版本号:CentOS Linux release 7.4.1708 (Core)
Redis基础环境
需要所有节点安装redis,以下方式任意一种方式即可
- yum安装redis
[root@all redis]# yum install redis
- 源码包安装
[root@all redis]# wget http://download.redis.io/releases/redis-7.0.8.tar.gz
[root@all redis]# tar xf redis-7.0.8.tar.gz
[root@all redis]# cd redis-7.0.8
[root@all redis]# make PREFIX=/opt/redis-7.0.8 install
[root@all redis]# cp redis.conf /opt/redis-7.0.8/ #拷贝配置文件,以及启动脚本
[root@all redis]# cp utils/redis_init_script /etc/init.d/
[root@all redis]# mkdir -p /opt/redis-7.0.8/dbfile #提前创建一下存储目录
接下来修改Redis Cluster
配置文件
cat >/opt/redis-7.0.8/redis.conf<<EOF
#监听网段
bind 0.0.0.0
#端口
port 6379
#后台运行
daemonize yes
#开启集群功能
cluster-enabled yes
#集群节点配置文件名,该文件不是人工编写的,由程序自动生成和修改
cluster-config-file cluster-nodes-6379.conf
#集群节点超时时间,配合cluster-replica-validity-factor使用
cluster-node-timeout 1000
#探测集群节点超时不可用的次数,假设cluster-node-timeout设置为1000毫秒,cluster-replica-validity-factor为5,那么1000*5之间内集群节点还不可用的话,会被标记为疑似下线
cluster-replica-validity-factor 5
#主节点下最少的从节点数
cluster-migration-barrier 1
#yes 要求所有主节点正常工作,且所有hash slots被分配到工作的主节点,集群才能提供服务,如果想一部分hash slots即可响应请求,则设置为no
cluster-require-full-coverage yes
#yes 禁止当主节点挂掉时,让从节点不能竞选为主节点
cluster-replica-no-failover no
#开启AOF持久化
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
aof-rewrite-incremental-fsync yes
#设置RDB和AOF文件目录
dir /opt/redis-7.0.8/dbfile
#设置密码requirepass为Master密码,masterauth为Slave连接Master的密码
masterauth "123123"
requirepass "123123"
#日志
loglevel notice
logfile "/opt/redis.log"
#关闭安全模式
protected-mode no
EOF
直接复制上面的命令,接下来我们启动Redis
#启动
/opt/redis-7.0.8/bin/redis-server /opt/redis-7.0.8/redis.conf
#停止
ps -ef|grep redis-server|awk -F "[ ]+" '{print $2}'|xargs kill -9
检查Redis 状态
[root@redis-01 ~]# ps -ef|grep redis-server #检查进程
root 24996 1 0 23:30 ? 00:00:00 /opt/redis-7.0.8/bin/redis-server 0.0.0.0:6379 [cluster]
root 25002 24851 0 23:30 pts/0 00:00:00 grep --color=auto redis-server
[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli -p 6379 #登陆节点测试
127.0.0.1:6379> auth 123123 #redis我们设置密码为123123,这里进行测试
OK
127.0.0.1:6379> KEYS * #测试数据没有问题
(empty array)
127.0.0.1:6379>
以上步骤需要在每台节点进行操作
Redis Cluster 集群
在上面我们已经启动了redis cluster集群,可以在日志中查看到我们的一个节点ID
[root@redis-06 dbfile]# cat /opt/redis-7.0.8/dbfile/cluster-nodes-6379.conf
63ab1a190eedb1968f422dcdb3d168abea09f25e :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
#每台节点都有一个
并且此时我们使用redis-cli命令,也可以看到当前集群节点的信息 (仅自己可以看到)
[root@redis-06 ~]# /opt/redis-7.0.8/bin/redis-cli -p 6379
127.0.0.1:6379> auth 123123
OK
127.0.0.1:6379> cluster nodes
63ab1a190eedb1968f422dcdb3d168abea09f25e :6379@16379 myself,master - 0 0 0 connected
官方文档在Redis 5版本后可以直接通过Redis-cli命令添加集群,4.x-3.x版本之前可以使用redis-trib.rb
命令操作(ruby写的)
/opt/redis-7.0.8/bin/redis-cli -a 123123 --cluster create 192.168.31.10:6379 \
192.168.31.12:6379 \
192.168.31.14:6379 \
192.168.31.11:6379 \
192.168.31.13:6379 \
192.168.31.15:6379 \
--cluster-replicas 1
#这里使用的命令是create,因为我们要创建一个新集群。该选项--cluster-replicas 1意味着我们希望为每个创建的master创建一个副本。
#创建集群是按照顺序创建master和slave节点,如果想自定义master和slave,请更改他们的顺序
#-a是指定密码
检查集群
使用下面的命令可以检查集群的状态,查看集群的详细信息-a 123123
为Redis密码
[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli --cluster check 192.168.31.10:6379 -a 123123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.31.10:6379 (faa58ffb...) -> 0 keys | 5461 slots | 1 slaves. #集群Master节点,以及Slave数量
192.168.31.12:6379 (7e05d2fd...) -> 0 keys | 5462 slots | 1 slaves.
192.168.31.14:6379 (4726162b...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.31.10:6379)
M: faa58ffb1c7e72cdd480c7fc8fef58730c51ecbd 192.168.31.10:6379
slots:[0-5460] (5461 slots) master #每个节点的槽位
1 additional replica(s)
S: 13d6cc765622c19daedb3736876532c0e499e8fe 192.168.31.11:6379
slots: (0 slots) slave
replicates 4726162bf792c7e11f447e605bd40c8c2efb06e4
M: 7e05d2fdffdebd27fc0f6b4d64eb265aca4f0234 192.168.31.12:6379
slots:[5461-10922] (5462 slots) master #每个节点的槽位
1 additional replica(s)
M: 4726162bf792c7e11f447e605bd40c8c2efb06e4 192.168.31.14:6379
slots:[10923-16383] (5461 slots) master #每个节点的槽位
1 additional replica(s)
S: 63ab1a190eedb1968f422dcdb3d168abea09f25e 192.168.31.15:6379
slots: (0 slots) slave
replicates 7e05d2fdffdebd27fc0f6b4d64eb265aca4f0234
S: aade19f30abdd2859e53dc35f230470421a630eb 192.168.31.13:6379
slots: (0 slots) slave
replicates faa58ffb1c7e72cdd480c7fc8fef58730c51ecbd
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
使用命令往Redis Cluster集群写入数据
-c
表选连接集群-p
集群端口号(节点端口号)-a
Redis密码
其中当我们写数据的时候,Redis会随机分发对应槽位,所以我们每次写入数据都不在一台Redis中
[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli -c -p 6379 -a 123123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set ab ab
-> Redirected to slot [13567] located at 192.168.31.14:6379
OK
192.168.31.14:6379> set go home
-> Redirected to slot [4084] located at 192.168.31.10:6379
OK
192.168.31.10:6379> set abcd 123123
-> Redirected to slot [10294] located at 192.168.31.12:6379
OK
同时也可以通过cluster info
查看集群的配置参数
[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli -c -p 6379 -a 123123 cluster info
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:8888
cluster_stats_messages_pong_sent:8847
cluster_stats_messages_fail_sent:4
cluster_stats_messages_sent:17739
cluster_stats_messages_ping_received:8842
cluster_stats_messages_pong_received:8885
cluster_stats_messages_meet_received:5
cluster_stats_messages_fail_received:4
cluster_stats_messages_received:17736
total_cluster_links_buffer_limit_exceeded:0