Linux:conts7 Redis版本: 5.0.14 官网下载网页链接:https://redis.io/download 第三方Redis连接工具推荐:RedisDesktopManager 官网下载:https://redisdesktop.com/download
一主二从三哨兵,1个master主节点,2个slave从节点,对所有3个Redis配置sentinel哨兵模式。 当master节点宕机时,通过哨兵(sentinel)重新推选出新的master节点,保证集群的可用性。
哨兵的主要功能:
1.集群监控:负责监控 Redis master 和 slave 进程是否正常工作。 2.消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。 3.故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。 4.配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。 PS:根据推举机制,集群中哨兵数量最好为奇数(3、5....)
一主二从三哨兵优缺点:
优点:能满足高可用,且在满足高可用的情况下使用服务器资源最少(相较于主从与集群模式) 缺点:但是选举时会间断。扩展难,有性能瓶颈。--(每台机器上的缓存数据都是一样的,受制于单台机器的机器配置)
环境:
IP地址 | 端口 | 角色 | Redis版本 |
---|---|---|---|
192.168.2.203 | 6379 | redis-master,sentinel | 5.0.14 |
192.168.2.205 | 6379 | redis-slave1,sentinel | 5.0.14 |
192.168.2.206 | 6379 | redis-slave2,sentinel | 5.0.14 |
Redis安装见:[Linux安装Redis教程](https://github.com/zlk-github/common-test/blob/master/common-redis-test/README-INIT.md# Linux安装Redis教程)
2.1 配置Redis主节点(redis-master)
2.1.1 主Redis配置文件redis.conf
vi redis.conf
redis.conf修改内容如下:
bind 0.0.0.0 # 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind 192.168.2.203 daemonize yes # 允许redis后台运行 logfile "/var/log/redis.log" # 设置redis日志存放路径 requirepass "123456" # 设置redis密码 protected-mode no # 设置为no,允许外部网络访问 port 6376 # 修改redis监听端口(可以自定义) pidfile /var/run/redis.pid # pid存放目录 dir /usr/local/redis/redis-5.0.14/tmp # 工作目录,需要创建好目录,可自定义 masterauth 123456 # 主从同步master的密码
2.1.2 主Redis修改Sentinel(哨兵)配置
vi sentinel.conf
sentinel.conf修改内容如下:
port 2700 # 修改Sentinel监听端口 daemonize yes # 允许Sentinel后台运行 logfile "/var/log/redis-sentinel.log" # 设置Sentinel日志存放路径 dir /usr/local/redis/redis-5.0.14/tmp # 工作目录,需要创建好目录,可自定义 # redis01:master名称可自定义 # 192.168.2.203 6379 :redis主节点IP和端口 # 2 :表示多少个Sentinel认为redis主节点失效时,才算真正失效 sentinel monitor redis01 192.168.2.203 6379 2 # Sentinel监听redis主节点 # 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒 sentinel down-after-milliseconds redis01 10000 # 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。 sentinel failover-timeout redis01 60000 # 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。 sentinel parallel-syncs redis01 2 # 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同 sentinel auth-pass redis01 123456
注:注意:含有mymaster的配置,都必须放置在sentinel monitor mymaster 192.168.2.203 6379 2之后,否则会出现问题
2.2 配置Redis从节点
从节点1(redis-slave1)与从节点2(redis-slave1)
2.2.1 从节点Redis配置文件redis.conf
复制主节点的redis.conf,修改replicaof与bind。
redis-slave1对应redis.conf
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind 192.168.2.205 bind 0.0.0.0 # 主库为主虚拟机1的地址 replicaof 192.168.2.203 6379
redis-slave2对应redis.conf
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind 192.168.2.205 bind 0.0.0.0 # 主库为主虚拟机1的地址 replicaof 192.168.2.203 6379
2.2.2 从Redis修改Sentinel(哨兵)配置
复制主节点的sentinel.conf即可。需要的话可以改 bind 从节点本机id
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind 192.168.2.205 bind 0.0.0.0
将Redis启动与配置路径添加到系统 /etc/rc.d/rc.local后保存。
进入编辑: vim /etc/rc.d/rc.local 添加如下内容(redis的bin目录启动相关与配置文件目录): /usr/local/redis/redis-5.0.14/bin/redis-server /usr/local/redis/redis-5.0.14/etc/redis.conf /usr/local/redis/redis-5.0.14/bin/redis-sentinel /usr/local/redis/redis-5.0.14/etc/sentinel.conf
ln -s /usr/local/redis/redis-5.0.14/bin/redis-server /usr/bin/redis-server ln -s /usr/local/redis/redis-5.0.14/bin/redis-cli /usr/bin/redis-cli ln -s /usr/local/redis/redis-5.0.14/bin/redis-sentinel /usr/bin/redis-sentinel
进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin 启动Redis集群 1.启动Redis,顺序主->从 redis-server /usr/local/redis/redis-5.0.14/etc/redis.conf 2.启动Sentinel,顺序主->从 redis-sentinel /usr/local/redis/redis-5.0.14/etc/sentinel.conf
4.1 访问redis主节点(redis-master)
进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin 进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456 查看集群:info replication
master集群结果如下:
[root@localhost bin]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6379> info replication # Replication # 个人注释:当前节点为主节点 role:master # 个人注释:从节点2个,192.168.2.205 6379与192.168.2.206 6379 connected_slaves:2 slave0:ip=192.168.2.206,port=6379,state=online,offset=167962,lag=0 slave1:ip=192.168.2.205,port=6379,state=online,offset=167684,lag=1 master_replid:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c master_replid2:0000000000000000000000000000000000000000 master_repl_offset:167962 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:167962
4.2 访问redis从节点1(redis-slave1)
进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin 进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456 查看集群:info replication
redis-slave1集群结果如下:
127.0.0.1:6379> info replication # Replication # 个人注释:当前节点为从节点 role:slave # 个人注释:主节点192.168.2.203 6379 master_host:192.168.2.203 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:249823 slave_priority:100 # 个人注释:从节点只读 slave_read_only:1 connected_slaves:0 master_replid:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c master_replid2:0000000000000000000000000000000000000000 master_repl_offset:249823 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:249823
4.3 访问redis从节点2(redis-slave2)
进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin 进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456 查看集群:info replication
redis-slave2集群结果如下:
127.0.0.1:6379> info replication # Replication # 个人注释:当前节点为从节点 role:slave # 个人注释:主节点192.168.2.203 6379 master_host:192.168.2.203 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:291664 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c master_replid2:0000000000000000000000000000000000000000 master_repl_offset:291664 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:183 repl_backlog_histlen:291482
4.4 从节点只读测试(redis-slave2)
哨兵模式:从节点允许读,不允许写入。
127.0.0.1:6379> set key 123456 (error) READONLY You can't write against a read only replica.
4.5 主节点写入,复制到从节点
redis-master
127.0.0.1:6379> set key1001 600 OK
redis-slave1
127.0.0.1:6379> get key1001 "600"
redis-slave2
127.0.0.1:6379> get key1001 "600"
4.6 验证Redis故障转移
4.6.1 停止主节点192.168.2.203(redis-master)
进入目录: cd /usr/local/redis/redis-5.0.14/bin 停止服务(密码123456): redis-cli -a 123456 shutdown (注:不要使用kill -9 PID,可能导致备份丢数据)
4.6.2 查看主节点(redis-slave1与redis-slave2)
原来redis-slave1:
进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin 进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456 查看集群:info replication
结果如下,192.168.2.205(原来从节点)变为了主节点。从节点只剩下192.168.2.206。 原来主节点192.168.2.203被剔除。
192.168.2.205集群信息。
127.0.0.1:6379> info replication # Replication role:master connected_slaves:1 slave0:ip=192.168.2.206,port=6379,state=online,offset=18702889,lag=1 master_replid:10dc8efe5dca92037d2cc945fd16a76981afec85 master_replid2:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c master_repl_offset:18702889 second_repl_offset:18664112 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:17654314 repl_backlog_histlen:1048576
192.168.2.206集群信息:
进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin 进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456 查看集群:info replication
结果如下,192.168.2.205(原来从节点1)变为了主节点。 从节点192.168.2.206还是从节点2。
192.168.2.206集群信息。
127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.2.205 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:18826183 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:10dc8efe5dca92037d2cc945fd16a76981afec85 master_replid2:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c master_repl_offset:18826183 second_repl_offset:18664112 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:17777608 repl_backlog_histlen:1048576
4.6.1 启动192.168.2.203(原来的主节点redis-master)
进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin 启动服务:redis-server /usr/local/redis/redis-5.0.14/etc/redis.conf 进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456 查看集群:info replication
192.168.2.203(原来主节点)现在变为了从节点。主节点由变成原来的192.168.2.206(原来的从节点)。
127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.2.205 master_port:6379 master_link_status:up master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:18780158 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:10dc8efe5dca92037d2cc945fd16a76981afec85 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:18780158 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:18771309 repl_backlog_histlen:8850
Redis集群 https://www.cnblogs.com/yufeng218/p/13688582.html Redis官网 https://www.redis.net.cn/tutorial/3501.html || https://redis.io/download Redis源码地址:https://github.com/redis/redis 查看: https://www.jianshu.com/p/e71c5a3a7162