举例c++
└── redis_6379 ├── conf │ └── redis.conf ├── db │ └── dump.rdb ├── logs │ └── redis_6379.log └── pid └── redis_6379.pid
dir——指定rdb和aof持久化文件存放的位置redis
mkdir -p /opt/redis_cluster/redis_{6379,6380}/{conf,db,logs,pid}
新建用户服务器
useradd -M -s /sbin/nologin redis
改变目录属主属组
chown -R redis. /opt/redis_cluster架构
gcc -v # 若是没有编译环境则必需要安装:使用yum或者是rpm包安装 yum install gcc gcc-c++
wget http://download.redis.io/releases/redis-4.0.11.tar.gz tar xvf redis-4.0.11.tar.gz
安装分布式
# 会把主程序安装到/usr/local/bin/下,并配置好环境变量 make && make install # 若是不执行make install那么主程序就在src目录下,也可使用
# 另外一种方法安装(这样能够指定bin目录的放置位置) make PREFIX=/opt/redis_cluster/redis_6380/ install
redis-server /opt/redis_cluster/redis_6380/conf/redis.conf redis-server /opt/redis_cluster/redis_6379/conf/redis.conf
redis-cli -h 10.0.0.103 -p 6380 redis-cli -h 10.0.0.103 -p 6379
bind 10.0.0.103 port 6380 daemonize yes pidfile /opt/redis_cluster/redis_6380/pid/redis_6380.pid logfile "/opt/redis_cluster/redis_6380/logs/redis_6380.log" dir /opt/redis_cluster/redis_6380/db/ slaveof 10.0.0.103 6379
每一个从节点只能有一个主节点,主节点能够有多个从节点
配置复制的方式有三种:ide
一、在配置文件中加入slaveof {masterHost} {masterPort} 随redis启动生效
二、在redis-server启动命令后加入 -slaveof {masterHost} {masterPort}生效
三、直接使用命令:slavefo {masterHost} {masterPort}生效code
查看复制状态信息命令server
info replication
断开复制:
slaveoo命令不但能够创建复制,还能够在从节点执行slave of no one来断开与主节点复制关系blog
slave of no one
经过slaveof命令还能够实现切主操做,所谓切主操做是指把当前从节点对主节点的复制切换到另外一个主节点
执行命令便可。ip
slaveof {masterHost} {masterPort}
Redis主从模式下,主节点一旦发生故障不能提供服务,须要人工干预,将从节点晋升为主节点,同时还须要修改客户端配置。
Sentinel(哨兵)架构解决了redis主从人工干预的问题。
当主节点出现故障时sentinel能自动完成故障发现和故障转移,并通知客户端从而实现真正的高可用。
Redis Sentinel是一个分布式的架构,其中包含N个Sentinel节点和Redis数据节点,每一个Sentinel节点会对汇聚节点和其它Sentinel节点进行监控,当它发现节点不可达时,会对节点作下线标识,若是被标识的是主节点,它还会和其余Sentinel
节点进行“协商”,当大可能是节点都认为主节点不可达时,会选举出一个Sentinel节点来完成自动故障转移的工做,同时会将这个变化同事给redis客户端。
sentinel.conf
bind 10.0.0.103 port 26379 daemonize yes pidfile "/opt/redis_cluster/redis_26379/pid/redis_26379.pid" logfile "/opt/redis_cluster/redis_26379/logs/redis_26379.log" dir "/opt/redis_cluster/redis_26379/db" sentinel monitor mymaster 10.0.0.103 6379 2 # mymaster主节点别名 主节点ip和端口,判断主节点失败,须要两个sentinel节点赞成 sentinel down-after-milliseconds mymaster 30000 # 选项指定了Sentinel认为服务器已经断线所需的毫秒数 sentinel parallel-syncs mymaster 1 # 向新的主节点发起复制操做的从节点个数,1轮询发起复制 sentinel failover-timeout mymaster 180000 # 故障转移超时时间
方式1:
redis-server /opt/redis_cluster/redis_26379/conf/sentinel.conf --sentinel
方式2:
redis-sentinel /opt/redis_cluster/redis_26379/conf/sentinel.conf
SENTINEL master <master name>:用于查看监控的某个Redis Master信息,包括配置和状态等。
SENTINEL slaves <master name>:列出给定主服务器的全部从服务器,以及这些从服务器的当前状态。
SENTINEL sentinels <master name>:查看给定主服务器的Sentinel实例列表及其状态。
SENTINEL get-master-addr-by-name <master name>:返回给定名字的主服务器的IP地址和端口号。 若是这个主服务器正在执行故障转移操做,或者针对这个主服务器的故障转移操> 做已经完成,那么这个命令返回新的主服务器的IP地址和端口号。
SENTINEL MONITOR <name> <ip> <port> <quorum>这个命令告诉sentinel去监听一个新的masterSENTINEL REMOVE <name> 命令sentinel放弃对某个master的监听