Redis四大模式之主从配置
Redis工作模式主要有单机模式、主从模式(slave)、哨兵模式(sentinel)、集群模式(cluster)这四种,本文主要讲解一下主从模式的部署方式。
我是windows单机进行的这套搭建操作,linux系统下搭建也是同样的,要点都是对配置文件进行一些更改。redis大家可以直接去官网https://redis.io/download下载,linux也可根据页面上的指示输入相应的指令下载。
首先准备master的配置文件(redis.windows-service.conf),主要有port(端口号,默认是6379)、requirepass(密码)、dbfilename(数据持久化文件)、logfile(日志文件),这里我就不更改端口号和不设置密码了,所以直接使用默认的配置就可以,master-slave模式下,作为master的redis是不需要额外配置的。接下来进去redis目录,执行redis-server.exe redis.windows-service.conf即可,然后到windows服务列表(cmd窗体输入services.msc回车进入)中开启redis服务即可。回到redis目录,双击redis-cli.exe,出现以下界面则成功连接上了端口号为6379的redis服务。
接下来配置第一台slave的redis。新建redis-6380目录,并复制配置文件redis.windows-service.conf和redis-server.exe 到redis-6380目录下。打开redis.windows-service.conf进行编辑,更改端口号为6380,slave规则添加一条slaveof 127.0.0.1 6379。完整的配置如下:
port 6380
dbfilename dump.rdb
logfile "server_log.txt"
slaveof 127.0.0.1 6379
cluster-enabled no
其中cluster-enabled no配置默认是 #cluster-enabled yes,可以不用更改,如果去掉屏蔽就必须更改为no,因为redis的cluster模式和slave模式是互斥的。slaveof 127.0.0.1 6379这里的值就是maste模式redia的ip和端口号,如果master设置了密码,则还需要添加“masterauth masterpassword”一项配置。然后命令行窗体进入redis-6380目录,执行redis-server.exe redis.windows-service.conf --service-name Redis6380,转到windows服务列表启动名为redis6380的服务就可以了,到现在作为slave模式运行的redis服务就正常运行了。
打开redis-6380目录下的server_log_6380.txt文件可以看到以下界面,注意红色框部分,表示当前slave节点已经成功从master节点同步数据了:
至此,一个master-slave模式的redis系统就部署完成,并且成功运行了。接下来我们测试一下在master节点写入的数据,能否正常同步到slave节点里面;
在刚才的redis-cli.exe界面输入 set test-slave 'test slave of port 6380',成功执行如下:
回到slave节点的客户端连接,我用的是命令行窗体,进入redis-6380目录,执行redis-cli.exe -h 127.0.0.1 -p 6380命令,回车,然后输入 get test-slave,得到如下界面的结果:
这就是刚才在master几点存入的test-slave键值的数据,由此运行在6380端口的slave模式redis已经能成功同步到6379端口的master模式下的数据了。
接下来,在master的redis客户端输入INFO replication,查看部署的集群信息,这里我部署了两台slave,端口号为6381的那台我就没有描述了,部署方式和6380那台一样:
redis主从模式下,master模式的redis是不需要额外配置的,和单机模式下的配置一样,只需要更改slave模式的配置,添加slaveof masterip masterport,如果开启了cluster模式,必须要关闭,同时,如果master设置了访问密码,则slave需要配置masterauth masterpassword 一项。另外slave模式下的redis只支持读取模式,不支持写入,修改配置项 slave-read-only no即可,但是没有必要。即使在slave机器写入了数据,也不会被同步到其余redis上,如果master写入了相同键值的数据也会把slave中的数据覆盖,所以完全没有必要配置slave模式的redis为可写模式。