1.1.什么是Redis集群?
所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定,高效的状态。
1.2.使用redis集群的必要性
对于一个已经部署好了并且能启动的redis,可以实现数据的读写,为什么还要使用redis集群?原因如下:
- 单个redis存在不稳定性,当redis服务宕机了,此时就没有了可用的服务了
- 单个redis的读写能力是有限的
总结:redis集群是为了强化redis的读写能力。
1.3.如何学习redis集群
- redis集群中,每一个redis称为一个节点
- redis集群中,有两种类型的节点,分别为:主节点(master),从节点(slave)
- redis集群,是基于redis主从复制实现
所有,学习redis集群,就是从学习redis主从复制模型开始
2.1.redis主从复制
主从复制模型中,有多个redis节点,其中,有且仅有一个为主节点Master,从节点Slave可以有多个,只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步。
2.2.特点
- 主节点(Master)可读,可写
- 从节点(Slave)只读(read-only)
因此,主从模型可以提高读的能力,在一定程度上缓解了写的能力,因为写仍然只有Master节点一个,可以讲读的操作全部移交到从节点上,变相提高了写能力。
2.3.基于配置实现
2.3.1.需求
- 一个主节点,端口为6380
- 两个从节点,端口分别为6381,6382
2.3.2.步骤
1.在/usr/local 目录下,创建一个/redis/master-slave 目录
[root@node0719 local]# mkdir -p redis/master-slave
2.在master-slave目录下,创建三个子目录6380、6381、6382
[root@node0719 master-slave]# mkdir 6380 6381 6382
3.依次拷贝redis解压目录下的redis.conf配置文件,到这三个子目录中
[root@node0719 master-slave]# cp /root/redis-3.2.9/redis.conf ./6380/
[root@node0719 master-slave]# cp /root/redis-3.2.9/redis.conf ./6381/
[root@node0719 master-slave]# cp /root/redis-3.2.9/redis.conf ./6382/
4.进入6380目录,修改redis.conf,将port端口修改成6380即可
[root@node0719 master-slave]# cd ./6380
[root@node0719 6380]# vim redis.conf
5.进入6381目录,修改redis.conf,将port端口改成6381,同时指定开启主从复制。
[root@node0719 6380]# cd ../6381
[root@node0719 6381]# vim redis.conf
6.进入6382目录,修改redis.conf,将port端口改成6382,同时指定开启主从复制。
[root@node0719 6380]# cd ../6382
[root@node0719 6381]# vim redis.conf
2.3.3.测试
1.打开三个xshell窗口,在每一个窗口中,启动一个redis节点。查看日志输出。(不要改成后台模式启动,看不到日志,不直观)
[root@node0719 master-slave]# cd 6380 && redis-server ./redis.conf
[root@node0719 master-slave]# cd 6381 && redis-server ./redis.conf
root@node0719 master-slave]# cd 6382 && redis-server ./redis.conf
2.另外再打开三个xshell窗口,在每一个窗口中,登陆一个redis节点
[root@node0719 ~]# redis-cli -p 6380
[root@node0719 ~]# redis-cli -p 6381
[root@node0719 ~]# redis-cli -p 6382
3.在主节点6380上,进行读写操作,操作成功
[root@node0719 ~]# redis-cli -p 6380
127.0.0.1:6380> set user:name zs
OK
127.0.0.1:6380> get user:name
"zs"
127.0.0.1:6380>
4.在从节点6381上读操作执行成功,并且成功从6380上同步了数据
[root@node0719 ~]# redis-cli -p 6381
127.0.0.1:6381> get user:name
"zs"
写操作执行失败。(从节点,只能读,不能写)
127.0.0.1:6381> set user:age 18
(error) READONLY You can't write against a read only slave.