集群的概念
所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。
使用redis集群的必要性
问题:我们已经部署好了redis,并且能启动一个redis,实现数据的读写,为什么还要学习redis集群?
答:(1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。
(2)单个redis的读写能力是有限的。
redis集群是为了强化redis的读写能力。
redis主从复制
概念
主从复制模型中,有多个redis节点。
其中,有且仅有一个为主节点Master。从节点Slave可以有多个。
只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步。
特点
(1)主节点Master可读、可写.
(2)从节点Slave只读。(read-only)
因此,主从模型可以1提高读的能力,在一定程度上缓解了写的能力。因为能写仍然只有Master节点一个,可以讲读的操作全部移交到从节点上,变相提高了写能力。
基于配置实现
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
|
测试
打开三个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. |