Redis主从复制
当master出现问题时需要手动切换master
在从机的配置文件中做如下配置:
replicaof <masterip> <masterport>
或者在启动从机实例时使用
redis-server /etc/redis/6379.conf --replicaof 192.168.157.11 6379
或者使用redis-cli连接从机实例后执行 REPLICAOF 192.168.157.11 6379
命令
也可以调用命令:REPLICAOF no one
手动切换从机为master,取消对之前master的跟随
Redis哨兵
Redis哨兵替代了手动操作,可以监控并切换master
Redis哨兵会发现主身上的多个从,还会发现监控同样master的其他哨兵。多个哨兵通过主redis的发布/订阅发现其他哨兵,可以使用PSUBSCRIBE * 来订阅主master上的所有channel,观察哨兵之间的通信。
编写哨兵配置文件
这里需要注意的是,如果哨兵与当前master处于同一主机,并且两个哨兵启动后疯狂刷修改ip相关日志,则使用本机ip而不是127.0.0.1。
#哨兵占用端口
port 26379
#哨兵要监控的master
#mymaster是哨兵监控的master命名,最少给这个redis实例投2票
sentinel monitor mymaster 192.168.157.11 6379 2
哨兵启动后会根据情况修改该配置文件。
更多配置参数:http://www.redis.cn/topics/sentinel.html
启动哨兵
以哨兵方式启动redis实例,哨兵会监控master并对其他从进行投票,选出新的master。
redis-server ./sentinel.conf --sentinel
Redis Cluster集群
Redis 集群可以使数据分片,每个reids实例持有不同槽位的数据,可以将槽转移到其他实例上,还可以从集群中添加或删除节点。
启动实例
编写/etc/redis/cluster.conf配置文件
#该节点占用端口
port 7000
#是否以集群方式启动
cluster-enabled yes
#节点配置文件,自动创建,无需配置
cluster-config-file nodes.conf
cluster-node-timeout 5000
#开启AOF
appendonly yes
#根据实际情况配置
protected-mode no
启动redis实例,可以在不同机器上开多个实例。这里假设分别在三台机器上开启三台redis实例:192.168.157.11、192.168.157.12、192.168.157.13
redis-server /etc/redis/cluster.conf
创建集群
redis-cli --cluster create 192.168.157.11:7000 192.168.157.12:7000 192.168.157.13:7000
假设创建6台实例,3主3从,在上面命令的最后加上 --cluster-replicas 1
,表示一共6台实例,每个主有一个从。如果参数设置为2则为每个主两个从。
客户端连接集群
redis-cli -c -h 192.168.157.11 -p 7000
其中-c
表示用来连接cluster的客户端。如果使用普通客户端连接集群,当向集群中set值时会以报错的方式返回应该重定向的节点。使用-c
直接将客户端重定向到指定节点并执行相应命令。
集群操作
关于对集群的操作可以使用redis-cli --cluster help
命令查看
[root@localhost ~]# redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN
--cluster-replicas <arg>
check host:port
--cluster-search-multiple-owners
info host:port
fix host:port
--cluster-search-multiple-owners
reshard host:port
--cluster-from <arg>
--cluster-to <arg>
--cluster-slots <arg>
--cluster-yes
--cluster-timeout <arg>
--cluster-pipeline <arg>
--cluster-replace
rebalance host:port
--cluster-weight <node1=w1...nodeN=wN>
--cluster-use-empty-masters
--cluster-timeout <arg>
--cluster-simulate
--cluster-pipeline <arg>
--cluster-threshold <arg>
--cluster-replace
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id <arg>
del-node host:port node_id
call host:port command arg arg .. arg
set-timeout host:port milliseconds
import host:port
--cluster-from <arg>
--cluster-copy
--cluster-replace
help
参考: