Redis哨兵集群(两台主机)

这篇具有很好参考价值的文章主要介绍了Redis哨兵集群(两台主机)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.部署

因为架构要求,只分配了两台服务器,要搭建Redis集群,为此针对两台服务器搭建了一套特殊的哨兵集群,特殊在不能无限切换,
只能抗住1-2次宕机或网络故障,1-2次故障之后,集群切换机制便不能使用,需要人工按后文的步骤修复;
Redis哨兵集群(两台主机)

1.前期准备

准备AB两台服务器部署Redis集群,选择A服务器作为主节点服务器,B服务器作为从节点服务器;

默认服务器上已安装docker环境;

1)在两台服务器创建目录

sudo mkdir -p /iids/redis

2)将redis镜像文件redis_6.0.tar.gz上传到redis目录中,并导入镜像

#导入镜像
gunzip -c redis_6.0.tar.gz | docker load
2.部署主节点服务器

1)上传redis-master.sh脚本到/iids目录下(见后文)

2)赋予脚本权限

cd /iids
chmod +x redis-master.sh

3)执行脚本

./redis-master.sh 127.0.0.1 #ip修改为当前服务器地址
3.部署从节点服务器

1)上传redis-slave.sh脚本到/iiids目录下(见后文)

2)赋予脚本权限

cd /iids
chmod +x redis-slave.sh

3)执行脚本

./redis-slave.sh 127.0.0.1 127.0.0.2  #ip1修改为主节点服务器地址 #ip2为当前服务器地址
4.验证节点是否正常
#进入任一哨兵容器
docker exec -it redis-sentinel-26679 bash
#登录redis(替换ip)
redis-cli -h 127.0.0.1 -p 26382
#查看主节点
SENTINEL masters
#查看从节点
SENTINEL slaves mymaster
#查看集群信息
info
#退出redis
exit
#退出哨兵容器
exit

输入info:

显示slaves=1,sentinels=3则为正常;

Redis哨兵集群(两台主机)

或者在/iids/redis-master/sentinel-26379/log/下查看哨兵日志文件

Redis哨兵集群(两台主机)

二.维护

1.场景一:主节点(A)服务器宕机

此时redis集群主节点被选举到了B服务器上,当A服务器恢复后,在A服务器上执行以下操作:

1)删除旧镜像

docker stop redis-6379  redis-sentinel-26379 
docker rm   redis-6379  redis-sentinel-26379

2)执行脚本重启A服务器redis;

A服务器redis集群重启后,A服务器上节点都是从节点,该步骤的目的是将B服务器上redis节点的数据同步在A服务器redis节点上;避免下一步操作,重新部署A服务器上节点为主节点时,出现数据丢失

./redis-master.sh 127.0.0.1 #ip修改为当前服务器地址

3)重启整个集群

A服务器:

#删除镜像
docker stop redis-6379  redis-sentinel-26379 
docker rm   redis-6379  redis-sentinel-26379

B服务器:

#删除镜像
docker stop redis-6379  redis-sentinel-26379 redis-sentinel-26380
docker rm   redis-6379  redis-sentinel-26379 redis-sentinel-26380 

A服务器:

#执行脚本
./redis-master.sh 127.0.0.1 #ip修改为当前服务器地址

B服务器:

#执行脚本
./redis-slave.sh 127.0.0.1 127.0.0.2  #ip1修改为主节点服务器地址 #ip2为当前服务器地址

验证:

同上方式验证节点状态

1.场景二:从(B)服务器宕机

直接执行脚本重启:

#删除镜像
docker stop redis-6379  redis-sentinel-26379 redis-sentinel-26380
docker rm   redis-6379  redis-sentinel-26379 redis-sentinel-26380 

#执行脚本
./redis-slave.sh 127.0.0.1 127.0.0.2  #ip1修改为主节点服务器地址 #ip2为当前服务器地址

验证:

同上方式验证节点状态

三.执行脚本

redis-master.sh

#!/bin/bash

#接收外部参数
echo "===1.接收外部参数master_ip:$1===="
master_ip=$1

#主从节点port
master_port="6379"

#哨兵节点port
sentinel1_port="26379"

rm -rf /iids/redis-master
echo "===2.开始安装主从节点===="
sudo mkdir -p /iids/redis-master/redis-$master_port/db/log
sudo mkdir -p /iids/redis-master/redis-$master_port/db/data
#授权
chmod 777 /iids/redis-master/redis-$master_port/db/log
chmod 777 /iids/redis-master/redis-$master_port/db/data

#创建节点配置文件

cat > /iids/redis-master/redis-$master_port/db/redis.conf << EOF
protected-mode no
port $master_port
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/$master_port.pid
loglevel notice
logfile "/var/log/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
oom-score-adj no
oom-score-adj-values 0 200 800
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
EOF

echo "===3.开始启动节点容器===="
sudo docker run \
-d \
--network host \
--restart=always \
--name redis-$master_port \
--privileged=true \
-v /iids/redis-master/redis-$master_port/db/redis.conf:/etc/redis/redis.conf \
-v /iids/redis-master/redis-$master_port/db/data:/data  \
-v /iids/redis-master/redis-$master_port/db/log:/var/log \
-v /etc/localtime:/etc/localtime:ro \
redis:6.0 \
redis-server /etc/redis/redis.conf

echo "===4.开始安装哨兵节点===="
 

#创建宿主机挂在目录
sudo mkdir -p /iids/redis-master/sentinel-$sentinel1_port/log
sudo mkdir -p /iids/redis-master/sentinel-$sentinel1_port/data
#授权
chmod 777 /iids/redis-master/sentinel-$sentinel1_port/log
chmod 777 /iids/redis-master/sentinel-$sentinel1_port/data

#创建哨兵配置文件
cat > /iids/redis-master/sentinel-$sentinel1_port/sentinel.conf << EOF
port $sentinel1_port
protected-mode no
daemonize yes
logfile "/var/log/sentinel-$sentinel1_port.log"
#注意修改为本机内网IP
sentinel announce-ip $master_ip
sentinel announce-port $sentinel1_port
#注意修改为主节点IP
sentinel monitor mymaster ${master_ip} ${master_port} 1
sentinel down-after-milliseconds mymaster 5000
EOF
echo "===5.开始启动哨兵容器===="

#启动哨兵容器

sudo docker run -it \
--name redis-sentinel-$sentinel1_port \
--net=host \
--restart=always \
-v /iids/redis-master/sentinel-$sentinel1_port/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-v /iids/redis-master/sentinel-$sentinel1_port/log:/var/log \
-v /etc/localtime:/etc/localtime:ro \
-d redis:6.0 /bin/bash




echo "===6.开始启动哨兵===="

#启动哨兵
sudo docker exec -it redis-sentinel-$sentinel1_port /bin/bash -c 'redis-sentinel /usr/local/etc/redis/sentinel.conf'

redis-slave.sh文章来源地址https://www.toymoban.com/news/detail-506498.html

#!/bin/bash

#接收外部参数
echo "===1.接收外部参数master_ip:$1 local_ip:$2===="
master_ip=$1
local_ip=$2

#主从节点port
master_port="6379"
slave1_port="6379"

#哨兵节点port
sentinel1_port="26379"
sentinel2_port="26380"

rm -rf /iids/redis-slave
echo "===2.开始安装从节点===="
sudo mkdir -p /iids/redis-slave/redis-$slave1_port/db/log
sudo mkdir -p /iids/redis-slave/redis-$slave1_port/db/data
#授权
chmod 777 /iids/redis-slave/redis-$slave1_port/db/log
chmod 777 /iids/redis-slave/redis-$slave1_port/db/data

#创建节点配置文件
cat > /iids/redis-slave/redis-$slave1_port/db/redis.conf << EOF
replicaof ${master_ip} ${master_port}
protected-mode no
port $slave1_port
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_$slave1_port.pid
loglevel notice
logfile "/var/log/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 10
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
oom-score-adj no
oom-score-adj-values 0 200 800
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
EOF




echo "===3.开始启动节点容器===="

sudo docker run \
-d \
--network host \
--restart=always \
--name redis-$slave1_port \
--privileged=true \
-v /iids/redis-slave/redis-$slave1_port/db/redis.conf:/etc/redis/redis.conf \
-v /iids/redis-slave/redis-$slave1_port/db/data:/data  \
-v /iids/redis-slave/redis-$slave1_port/db/log:/var/log \
-v /etc/localtime:/etc/localtime:ro \
redis:6.0 \
redis-server /etc/redis/redis.conf



echo "===4.开始安装哨兵节点===="
 
for port in {$sentinel1_port,$sentinel2_port}
do
#创建宿主机挂在目录
sudo mkdir -p /iids/redis-slave/sentinel-$port/log
sudo mkdir -p /iids/redis-slave/sentinel-$port/data
#授权
chmod 777 /iids/redis-slave/sentinel-$port/log
chmod 777 /iids/redis-slave/sentinel-$port/data

#创建哨兵配置文件
cat > /iids/redis-slave/sentinel-$port/sentinel.conf << EOF
port $port
protected-mode no
daemonize yes
logfile "/var/log/sentinel-$port.log"
#注意修改为本机内网IP
sentinel announce-ip ${local_ip}
sentinel announce-port $port
#注意修改为主节点IP
sentinel monitor mymaster ${master_ip} ${master_port} 1
sentinel down-after-milliseconds mymaster 5000
EOF
done


echo "===5.开始启动哨兵容器===="

#启动哨兵容器
for port in {$sentinel1_port,$sentinel2_port}
do
sudo docker run -it \
--name redis-sentinel-$port \
--net=host \
--restart=always \
-v /iids/redis-slave/sentinel-$port/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-v /iids/redis-slave/sentinel-$port/log:/var/log \
-v /etc/localtime:/etc/localtime:ro \
-d redis:6.0 /bin/bash
done


echo "===6.开始启动哨兵===="
for port in {$sentinel1_port,$sentinel2_port}
do
#启动哨兵
sudo docker exec -it redis-sentinel-$port /bin/bash -c 'redis-sentinel /usr/local/etc/redis/sentinel.conf'
done


到了这里,关于Redis哨兵集群(两台主机)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis(主从复制、哨兵模式、集群)概述及部署

    目录 一、Redis高可用 二、redis持久化 2.1 持久化的功能 2.2 Redis 提供两种方式进行持久化 2.3 RDB 持久化 2.3.1 触发条件  2.3.2 执行流程 2.3.3 启动时加载 2.4 AOF持久化 2.5 执行流程 2.5.1 命令追加(append)  2.5.2 文件写入(write)和文件同步(sync) 2.5.3 文件重写(rewrite) 2.5.3.1 文件重写的

    2024年02月15日
    浏览(36)
  • Linux部署Redis哨兵集群 一主两从三哨兵(这里使用Redis6,其它版本类似)

          Redis-Sentinel是redis官方推荐的高可用性解决方案,sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能,而redis-sentinel就是一个独立运行的进程

    2024年02月04日
    浏览(48)
  • redis(6.0以上版本)哨兵、生产级redis cluster集群部署、测试、特点

    目录 一、特点    可自由指定主从    可自定义分配哈希槽    先建立单个实例,在分配主从 二、生产级redis cluster部署 :一台服务器即可(192.168.1.134) 1关闭防火墙 2获取redis6.2.12tar包(官网获取) 3.为了方便管理创建单独目录 4.修改配置文件 5.启动服务 6.用集群模式登

    2024年02月12日
    浏览(38)
  • redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

    前言: redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。 Redis 主从模式(Replication) 优点: 数据备份:主节点的数据会复制到从节点,提供了数据冗余和一定程度的故障恢复能力

    2024年01月20日
    浏览(95)
  • 2 - 部署Redis集群架构

    环境: 6台集群服务器 51-56 : 安装Redis软件 初始化配置 停止Redis服务 修改服务使用的ip地址是eth0接口的地址(不需要设置密码和修改服务使用的端口号) 启动Redis服务 第一步 准备ruby脚本的运行环境 第二步 创建脚本 第三步 查看脚本帮助信息 重要说明:内存里不允许有数据

    2024年01月23日
    浏览(34)
  • 两台宿主机搭建keepalived+Haproxy+mysql实现高可用负载均衡集群(电脑有限弄了两台,更多台同理)

    注意事项 : 1.切记 percona/percona-xtradb-cluster 的版本要统一 ,否则可能出现各种各样的问题 2. 宿主机要关闭SELINUX 。修改文件 vi /etc/selinux/config ,设置SELINUX为disabled,然后reboot机子  两台主机为: 宿主机1:192.168.10.4 宿主机2:192.168.10.6 主节点(在宿主机1上执行) 子节点1(在宿主

    2023年04月26日
    浏览(43)
  • Redis学习笔记02(主从同步,哨兵,哨兵集群)

    redis具有高可靠性:1.数据尽量减少丢失(AOF和RDB来保障) 2.服务尽量减少中断.第二点通过增加冗余副本来保障。 读写分离:  减少保障数据一致性的开销。修改操作只会在主库上进行。 同步过程  1.psync包括了主库runID和复制进度offset。第一次采用全量复制协议(主库bgsav

    2024年02月02日
    浏览(83)
  • 【Redis】3、Redis主从复制、哨兵、集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2024年02月09日
    浏览(38)
  • Redis --- 哨兵、分片集群

    Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。   集群结构和作用 哨兵的结构如图:   哨兵的作用如下: 监控 :Sentinel 会不断检查您的master和slave是否按预期工作 自动故障恢复 :如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的

    2024年02月03日
    浏览(36)
  • Redis 主从复制 哨兵 集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包