哨兵机制配置的主从复制默认,每台机器上都存在所有数据的备份。水平扩展不太方便。
redis 集群不光实现了主从复制,还实现了数据的分开存储。一个集群中可以有多个主从复制模式。一个主从复制模式就存储一块数据,另外一个主从复制存储另外的数据。
redis 集群配置的要求 一个集群中最少要有三队主从复制复制模式。一对主从复制模式需要一主一备,最小的一个redis集群需要几台主机?6台。
查看当前进程
杀死之前的进程
[root@localhost ~]# kill -9 1576 1581 1586 1591 1596 1601 1779
再查看下当前进程
[root@localhost zhucong]# ps -ef|grep redis
进入到 /opt 目录下,创建文件夹 cluster,并创建子文件夹 7001 , 7002 , 7003 , 7004 , 7005 ,7006
[root@localhost zhucong]# cd ../../
[root@localhost opt]# mkdir cluster
[root@localhost opt]# ls
cluster containerd nginx-1.19.0.tar.gz redis-5.0.4 redis-5.0.4.tar.gz
[root@localhost opt]# cd cluster
[root@localhost cluster]# mkdir 7001 7002 7003 7004 7005 7006
[root@localhost cluster]# ls
7001 7002 7003 7004 7005 7006
[root@localhost cluster]#
这几个子文件加复制配置文件。
port 7001
cluster-enabled yes
cluster-config-file nodes7001.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis_7001.pid
属性名 | 说明 |
---|---|
port | 端口号 |
cluster-enabled | 是否开启redis集群模式 |
cluster-config-file | 当前节点的集群的配置文件名称,这个文件不需要我们往文件中写东西,他的作用是在集群启动之后记录记录集群的一些信息,以便当前节点挂了重启之后能把原先的集群信息读回来。 |
cluster-node-timeout | 集群节点的超时时间 |
appendonly | 开启AOF日志模式 |
daemonize | 配置后台启动 |
pidfile | 记录当前节点运行起来的进程号 |
配置7001的配置文件
[root@localhost cluster]# vim 7001/redis.conf
输入i , 粘贴上面的配置信息
配置7002的配置文件
[root@localhost cluster]# vim 7002/redis.conf
按esc,:%s/7001/7002/g 把端口号改为 7002
:wq 保存退出
配置7003的配置文件
[root@localhost cluster]# vim 7003/redis.conf
按esc,:%s/7001/7003/g 把端口号改为 7003
:wq 保存退出
依次把7004、7005、7006的进行配置,操作都是把配置信息复制,把端口号改为对应的端口号,保存退出。
配置完成之后。
启动7001到7006所有的redis服务:
查看下当前进程
每个服务进程后面都有 [cluster] , 这就是以集群模式开启redis服务。现在这6个命令还没有形成一个整体。
查看集群管理的命令
执行创建集群的命令
redis-cli --cluster create 192.168.25.10:7001 192.168.25.10:7002 192.168.25.10:7003 192.168.25.10:7004 192.168.25.10:7005 192.168.25.10:7006 --cluster-replicas 1
redis中 集群中插槽slot的意思:
redis 集群中共有16384个插槽。这些插槽你可以自己分配到不同的主从复制模式中 ,来达到把数据分
开存储的目的。
上面最后一行的 Can I set the above configuration? (type ‘yes’ to accept): yes 我能使用上面的配置吗?yes就是接受
现在集群已经创建好了。
集群管理的命令
查看集群的状态
以集群的方式连接集群的节点
比如连接7001节点
[root@localhost cluster]# redis-cli -c -h 192.168.25.10 -p 7001
重定向到7002的5798的插槽上了
查看集群的状态
cluster info
cluster_state:ok 集群正常
cluster_slots_assigned:16384 集群的插槽数量
查看集群节点信息
cluster nodes
这里停掉 7001主机的服务,重启7001的客户端,重启7006的客户端
查看集群状态
查看集群节点信息
添加集群节点
拷贝 7006到7007中
[root@localhost cluster]# cp -r 7006 7007
[root@localhost cluster]# vim 7007/redis.conf
启动7007的服务
添加一个主机 192.168.25.10:7007 添加为主机:
redis-cli --cluster add-node 192.168.25.10:7007 192.168.25.10:7001
新节点被正确添加了
主机创建之后,需要分配插槽才能存储数据。
分配插槽命令:
redis-cli --cluster reshard 192.168.25.10:7004
可以看到7007有插槽了
测试一下
添加备机也可以
redis-cli --cluster add-node 192.168.25.10:7008 192.168.25.10:7002 --cluster-master-id f64c83e30c6751fe443b3da2148936ca5cda3ca1 #复制的是7007的id
[root@localhost 7008]# cd ../7007
[root@localhost 7007]# ls
appendonly.aof nodes7007.conf redis.conf
[root@localhost 7007]# clear
[root@localhost 7007]# cd ../7008
[root@localhost 7008]# ls
redis.conf
[root@localhost 7008]# vim redis.conf
[root@localhost 7008]# redis-server redis.conf
91273:C 21 Mar 2021 03:01:20.927 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
91273:C 21 Mar 2021 03:01:20.927 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=91273, just started
91273:C 21 Mar 2021 03:01:20.927 # Configuration loaded
[root@localhost 7008]# ps -ef|grep redis
root 82389 1 0 00:04 ? 00:01:30 redis-server *:7002 [cluster]
root 82399 1 0 00:04 ? 00:01:30 redis-server *:7003 [cluster]
root 82408 1 0 00:05 ? 00:01:28 redis-server *:7004 [cluster]
root 82417 1 0 00:05 ? 00:01:28 redis-server *:7005 [cluster]
root 83514 1 0 00:26 ? 00:01:21 redis-server *:7006 [cluster]
root 85571 1 0 01:08 ? 00:00:58 redis-server *:7001 [cluster]
root 86647 1 0 01:29 ? 00:00:48 redis-server *:7007 [cluster]
root 91274 1 0 03:01 ? 00:00:00 redis-server *:7008 [cluster]
root 91285 91086 0 03:01 pts/0 00:00:00 grep --color=auto redis
[root@localhost 7008]# redis-cli --cluster help
[root@localhost 7008]# redis-cli -c -h 192.168.25.10 -p 7005
[root@localhost 7008]# redis-cli --cluster add-node 192.168.25.10:7008 192.168.25.10:7002 --cluster-slave --cluster-master-id f64c83e30c6751fe443b3da2148936ca5cda3ca1
[root@localhost 7008]# redis-cli -c -h 192.168.25.10 -p 7005
192.168.25.10:7005> cluster nodes
dcb403413167205fe555041f7050dccb381aef77 :0@0 master,fail,noaddr - 1616266331987 1616266330945 0 disconnected
4a30d80d3693d21429643ac18f8140008efc5d5f 192.168.25.10:7001@17001 slave 48e51281061027ccf52fafbdd4084dc0110993b8 0 1616267373789 7 connected
aae5f453bc049c67c73040551674ef9a66486f61 192.168.25.10:7003@17003 master - 0 1616267373696 3 connected 11073-16383
35ddfc2a0097c82637ca281e9d29bfce98d2846d 192.168.25.10:7005@17005 myself,slave aae5f453bc049c67c73040551674ef9a66486f61 0 1616267371000 5 connected
ed43781efc73f601ab31882ff84ad2364bdc4d0f 192.168.25.10:7008@17008 slave f64c83e30c6751fe443b3da2148936ca5cda3ca1 0 1616267373000 8 connected
f64c83e30c6751fe443b3da2148936ca5cda3ca1 192.168.25.10:7007@17007 master - 0 1616267373611 8 connected 0-149 10923-11072
48e51281061027ccf52fafbdd4084dc0110993b8 192.168.25.10:7006@17006 master - 0 1616267373618 7 connected 150-5460
ca40cc0b0b4c534baa8119bbf882739901de482f 192.168.25.10:7004@17004 slave 640b6258f2dc610defe5588090c8acbc646711d4 0 1616267371604 4 connected
640b6258f2dc610defe5588090c8acbc646711d4 192.168.25.10:7002@17002 master - 0 1616267371706 2 connected 5461-10922
192.168.25.10:7005> quit
结束 7002 7004的进程
修复集群命令
redis-cli --cluster fix 192.168.25.10:7005
f84ad2364bdc4d0f 192.168.25.10:7008@17008 slave f64c83e30c6751fe443b3da2148936ca5cda3ca1 0 1616267373000 8 connected
f64c83e30c6751fe443b3da2148936ca5cda3ca1 192.168.25.10:7007@17007 master - 0 1616267373611 8 connected 0-149 10923-11072
48e51281061027ccf52fafbdd4084dc0110993b8 192.168.25.10:7006@17006 master - 0 1616267373618 7 connected 150-5460
ca40cc0b0b4c534baa8119bbf882739901de482f 192.168.25.10:7004@17004 slave 640b6258f2dc610defe5588090c8acbc646711d4 0 1616267371604 4 connected
640b6258f2dc610defe5588090c8acbc646711d4 192.168.25.10:7002@17002 master - 0 1616267371706 2 connected 5461-10922
192.168.25.10:7005> quit
结束 7002 7004的进程
修复集群命令
redis-cli --cluster fix 192.168.25.10:7005