如果一个服务器只有一个节点(只用一个物理服务器部署整个程序),那么出现以下问题:
可用性:如果这个机器挂了,意味着服务就中断了.
性能:支持的并发量也是比较有限的.
因此引入分布式系统,主要也是为了解决上述的单点问题。 分布式系统中,往往需要多个服务器来部署 redis 服务,从而构成 redis 集群,此时就可以让这个集群给整个分布式系统中的其他服务,提供更稳定 / 更高效的数据存储功能.
本节介绍redis集群模式之一主从模式,主要框架如下图:
1、创建主从实例配置文件
配置 redis 主从结构,需要启动多个 redis 服务器,分配在一个个单独的主机上(分布式),但是考虑到我们目前每个人,大概只有一个云服务器,因此就来实现一下,在一个服务器主机上,运行多个 redis-server 进程。
我们需要配置一个主实例和两个从实例,配置步骤如下:
1.1、建立配置文件目录
在redis安装目录下创建一个目录redi-conf,用于存放redis主从配置文件
mkdir redis-conf
1.2、建立主服务配置文件
我们找到一个原始的redis.conf文件,去掉注释和空白内容,复制到刚才创建的配置文件目录
过滤掉注释和空白内容的命令:
cat redis.conf |grep -v "#" |grep -v "^$"
然后复制到 redis-conf下
cat redis.conf |grep -v "#" |grep -v "^$" > redis-conf/redis-master.conf
整体命令如下:
其中:grep -v "^$"是忽略掉空白行,grep -v "#" 忽略注释
cat redis.conf |grep -v "#" |grep -v "^$" > redis-conf/redis-master.conf
文件创建完成后,修改端口为6380 ,保护模式为no,允许远程当问,进程文件也改为6380,数据文件名称也要改动,具体改动项如下:
protected-mode no
port 6380
pidfile /var/run/redis_6380.pid
dbfilename dump_6380.rdb
appendfilename "appendonly_6380.aof"
1.3、建立两个从服务配置文件
- 1、从redis-master.conf 拷贝一个文件名称为redis-slave1.conf,作为从服务1的配置文件
cp redis-master.conf redis-slave1.conf
2、修改redis-slave1.conf的端口为6381和数据文件,修改项如下:
port 6381
pidfile /var/run/redis_6381.pid
dbfilename dump_6381.rdb
appendfilename "appendonly_6381.aof"
3、从redis-master.conf 拷贝一个文件redis-slave2.conf,作为从服务2的配置文件
cp redis-master.conf redis-slave2.conf
4、修改redis-slave2.conf的端口为6382和数据文件,修改项如下:
port 6382
pidfile /var/run/redis_6382.pid
dbfilename dump_6382.rdb
appendfilename "appendonly_6382.aof"
2、设置主从关系配置
在从服务的配置文件加 slaveof 配置主从结构(绑定父节点为 6380 端口),让从服务跟随主服务;
1、先编辑从服务1配置文件redis-slave1.conf
vim redis-slave1.conf
在配置文件任何一行添加如下代码:
slaveof 127.0.0.1 6380
注意:127.0.01 为redis主服务IP地址;6380为主服务端口
保存退出
2、同时编辑服务2配置文件redis-slave2.conf
vim redis-slave1.conf
在配置文件任何一行添加如下代码:
slavef 127.0.0.1 6380
3、启动redis实例
在redis-conf目录下,依次启动redis主实例和2个从实例;
启动主服务
redis-server redis-master.conf &
启动从服务1
redis-server redis-slave1.conf &
启动从服务2
redis-server redis-slave2.conf &
4、测试
连接主服务客户端
redis-cli -p 6380
随便set一个值:
set k1 mingtianhuigengjiameihao
然后退出主服务,登录从服务,看是否能get k1值
redis-cli -p 6381
在6381获取值
get k1
同样测试从服务2
redis-cli -p 6382
获取值
get k1
在 redis 客户端,通过 info replication 就可以查看当前节点的复制状态了.
info replication