Redis服务器默认使用6379号端口,通过–port参数可以自定义端口号:

redis常用命令,redis入门,启动redis,启动哨兵_数据库

正确停止Redis的方式应该是向Redis发送SHUTDOWN命令,方法为:

redis常用命令,redis入门,启动redis,启动哨兵_redis_02


Redis可以妥善处理SIGTERM信号,所以使用kill Redis进程的PID也可以正常停止Redis,效果与发送SHUTDOWN命令一样。redis-cli执行时会自动按照默认配置(服务器IP地址为127.0.0.1,端口号为6379)连接Redis,通过参数-h和-p可以分别自定义IP地址和端口号:

redis常用命令,redis入门,启动redis,启动哨兵_缓存_03

Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG

redis常用命令,redis入门,启动redis,启动哨兵_缓存_04

因此Redis支持通过配置文件来设置这些选项。启用配置文件的方法是在启动时将配置文件的路径作为启动参数传递给redis-server,如:

redis常用命令,redis入门,启动redis,启动哨兵_redis_05


在Redis中使用复制功能非常容易,只需要在从数据库的配置文件中加入“slaveof主数据库地址 主数据库端口”[2],主数据库无须进行任何配置。

redis常用命令,redis入门,启动redis,启动哨兵_配置文件_06


我们使用INFO命令来获取replication节点的相关信息:

redis常用命令,redis入门,启动redis,启动哨兵_配置文件_07


可以看到,实例A的角色(上面输出中的role)是master,即主数据库,同时已连接的从数据库(上面输出中的connected_slaves)的个数为1。

redis常用命令,redis入门,启动redis,启动哨兵_redis_08


从这里可以看到,实例B的role是slave,即从数据库,同时其主数据库的IP地址为127.0.0.1,端口号为6379。

可以通过设置从数据库的配置文件中的slave-read-only为no以使从数据库可写,但是因为对从数据库的任何更改都不会同步给任何其他数据库,并且一旦主数据库中更新了对应的数据就会覆盖从数据库中的更改,所以通常的场景下不应该设置从数据库可写,以免导致易被忽略的潜在应用逻辑错误。

除了通过配置文件或命令行参数设置slaveof参数,还可以在运行时使用SLAVEOF命令修改:

redis常用命令,redis入门,启动redis,启动哨兵_缓存_09


如果该数据库已经是其他主数据库的从数据库了,SLAVEOF命令会停止和原来数据库的同步转而和新数据库同步。此外对从数据库来说,还可以使用SLAVEOF NO ONE命令来使当前数据库停止接收其他数据库的同步数据并转换成为主数据库。

当主数据库崩溃时,情况就稍显复杂了。手动通过从数据库数据恢复主数据库数据时,需要严格按照以下两步进行。
(1)在从数据库中使用SLAVEOF NO ONE命令将从数据库提升成主数据库继续服务。
(2)启动之前崩溃的主数据库,然后使用SLAVEOF命令将其设置成新的主数据库的从数据库,即可将数据同步回来。

哨兵
在一个典型的一主多从的Redis系统中,从数据库在整个系统中起到了数据冗余备份和读写分离的作用。
当主数据库遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升格为主数据库,以使得系统能够继续提供服务。然而,整个过程相对麻烦且需要人工介入,难以实现自动化。为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。

配置哨兵。建立一个配置文件,如sentinel.conf,内容为:

redis常用命令,redis入门,启动redis,启动哨兵_redis_10


其中,mymaster表示要监控的主数据库的名字,可以自己定义一个。这个名字必须仅由大小写字母、数字和.-_这3个字符组成。后两个参数表示主数据库的IP地址和端口号,这里我们要监控的是主数据库6379端口。最后的1表示最低通过票数。

因为考虑到故障恢复后当前监控的系统的主数据库的IP地址和端口会产生变化,所以哨兵提供了命令可以通过主数据库的名字获取当前系统的主数据库的IP地址和端口号。接下来执行启动Sentinel进程

redis常用命令,redis入门,启动redis,启动哨兵_配置文件_11


需要注意的是,配置哨兵监控一个系统时,只需要配置其监控主数据库,哨兵会自动发现所有复制该主数据库的从数据库

哨兵与集群是两个独立的功能,但从特性来看哨兵可以视为集群的子集,当不需要数据分片或者已经在客户端进行分片的场景下使用哨兵就足够了,但如果需要进行水平扩容,则集群是一个非常好的选择。