代码编织梦想

前置说明

现有三台虚拟机,IP地址如下
192.168.1.71  
192.168.1.72
192.168.1.73
##这里71服务器为默认的 master节点,其余的为 replication 节点

单机安装请参考上一篇文章,下面的redis镜像都是基于上次下载的

当前版本:

redis-6.0.9

主从复制

哨兵使用都是基于主从复制的,所以在启用哨兵之前,我们得安装好主从复制集群

redis.conf 配置文件

主从搭建有两种形式,这里我们主要介绍以配置文件的形式搭建主从复制集群

这里我们从官网上找到当前版本对应的 redis.conf 配置文件,修改以下内容:

master 节点配置文件

# 配置文件进行了精简,完整配置可自行和官方提供的完整conf文件进行对照。端口号自行对应修改 
#端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 6380
# IP绑定,注释此行
#bind 127.0.0.1
# 这个文件会自动生成(如果同一台服务器上启动,注意要修改为不同的端口)
pidfile /var/run/redis_6380.pid 
##这里的日志文件为了记录启动时的日志,方便排查错误,正常运行成功后,这里可以还原为空,使用docker查询日志
logfile "/data/redis.log"

replication 节点配置文件

port 6380
# IP绑定,注释此行
#bind 127.0.0.1
pidfile /var/run/redis_6380.pid 
logfile "/data/redis.log"
##副本配置 replicaof <masterip> <masterport> 
##192.168.1.71 为主节点IP ,6380为主节点的端口号
replicaof 192.168.1.71 6380

这里说明一下,不需要修改 daemonizeprotected-mode 等的配置

启动

在每一个服务器上,我们都运行以下命令,以启动服务

sudo docker run -d --privileged=true --restart=always -p 6380:6380 \
-v /mnt/data/redis-6380/redis.conf:/etc/redis/redis.conf \
-v /mnt/data/redis-6380/data:/data \
--name redis6 \
redis redis-server /etc/redis/redis.conf \
--requirepass "Sin1/2=30" \
--masterauth "Sin1/2=30"

说明:

其它配置这里不做说明了,只说明以下配置

–masterauth “Sin1/2=30” :如果设置了认证密码,就必须的配置此参数为master的密码

测试

首先查看docker容器是否在运行

sudo docker ps
##如正常运行就执行下面的验证,如总是不断的重启,这时就可以查看前面配置的日志文件了
##当然也可以直接用docker查看,但是有时候有些错误是看不到的,所以这时我们配置的日志文件就起到关键性的作用了

#进入主节点
##打开 redis 客户端
sudo docker exec -it redis6 redis-cli -p 6380
##密码认证
auth Sin1/2=30
##查看副本信息
info replication
##如返回以下信息,就说明主节点OK了,注意role为master,同时可以看到slave的信息
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.72,port=6380,state=online,offset=2421114,lag=1
slave1:ip=192.168.1.73,port=6380,state=online,offset=2421114,lag=1
master_replid:0670524eb7c36f68dc661a054241335b22cfb9ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2421114
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1372539
repl_backlog_histlen:1048576

#进入副本节点,同样执行以上命令,返回如下信息,就说明副本节点也OK了
##注意role为slave,可以看到master的信息,但是看不到其它副本节点的信息
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:192.168.1.71
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:2548557
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:0670524eb7c36f68dc661a054241335b22cfb9ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2548557
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1499982
repl_backlog_histlen:1048576

数据测试

##进入主节点,随意设置key,并查看结果
127.0.0.1:6380> set test 11
OK
127.0.0.1:6380> get test
"11"
##进入任意节点,查看该key是否存在,如果存在,尝试获取key值
127.0.0.1:6380> keys *
1) "test"
127.0.0.1:6380> get test
"11"
127.0.0.1:6380> set test 22
(error) READONLY You can't write against a read only replica.
##从以上命令,我们可以看到该key的值,但是不能修改该key值,说明主从集群成功了

哨兵

sentinel.conf 配置文件

这里我们从官网上找到当前版本对应的 sentinel.conf 配置文件,修改以下内容:

#端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 26380
#监控的主redis服务器
sentinel monitor mymaster 192.168.1.71 6380 2
##认证密码
sentinel auth-pass mymaster Sin1/2=30
# 修改日志文件的路径
logfile "/mnt/sentinel.log"

复制修改过的哨兵配置文件到各个服务器上

启动

在每一个服务器上,我们都运行以下命令,以启动服务

sudo docker run -d --privileged=true --restart=always -p 26380:26380 \
-v /mnt/data/redis-6380/sentinel.conf:/etc/redis/sentinel.conf \
-v /mnt/data/redis-6380/data/:/data/ \
--name sentinel \
redis redis-sentinel /etc/redis/sentinel.conf

说明:

redis-sentinel /etc/redis/sentinel.conf : 指定配置文件启动 redis-sentinel 进程

测试

首先查看docker容器是否在运行

sudo docker ps
##看到了正常运行的docker容器sentinel了,我们就可以执行以下命令

##进入sentinel 客户端
sudo docker exec -it sentinel redis-cli -p 26380
##查看主节点信息
sentinel master mymaster
##出现以下内容即成功
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "3"
35) "quorum"
36) "2"

服务测试

关闭master
我们执行上面主从复制中的测试模块,多次执行 info replication 查看信息发生的变化
或者监听哨兵配置的日志文件,可以实时看到其发生的变化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_26807113/article/details/111054379

docker安装Redis设置密码-爱代码爱编程

Docker redis 镜像下载地址: https://hub.docker.com/_/redis?tab=tags 下载最新镜像 sudo docker pull redis:latest 运行容器 ##无密码模式 sudo docker run -d --privileged=true --restart=always -p 637

Java线上故障排查完整套路和技巧分享[图]-爱代码爱编程

线上故障主要会包括CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top三连,然后依次jstack、jmap伺候,具体问题具体分析即可。 CPU 一般来讲我们首先会排查CPU方面的问题。CPU异

CentOS7坏境下使用 Docker 安装 MySQL和Redis-爱代码爱编程

1. MySQL 1.1 安装 5.7为版本,若不指定则下载最新版本 docker pull mysql:5.7 1.2 启动 注意命令中是否有多余空格 sudo docker run -p 3306:3306 --name mysql -v /mydata/mysql/conf:/etc/mysql -v /mydata/mysql/

从零开始写一个操作系统(5):函数与磁盘访问-爱代码爱编程

过程调用和磁盘访问 分段 x86支持分段的形式,将不同的指令、数据模块以段的形式放在不同的内存地址中,以方便用户访问。 段内容编译器和cpu不关心,不会强制要求什么段放什么,只是让用户方便使用。 section section声明段标号的语句,后面跟段名称和可选的段标识号。 一个文件可以有多个段,不同段间的数据也可以自由访问,只是加了

Java并发编程技术分享之基础干货归纳总结[图]-爱代码爱编程

我们进入正题:介绍并发编程的基础性概念。 并发编程的优势和缺点 并发编程中常见的线程安全问题 如何实现线程之间的通信? 死锁是怎么发生的,如何避免? 嵌套管程锁死、重入锁死、饥饿和公平。 1.并发编程介绍 1.1并发的出现 单CPU时代,单任务在一个时间点只能执行单一程序。 多任务阶段,计算机能在同一时间点并行执行多进程。多个任务或进程共享一个CPU,并交

Linux镜像最全版本下载网站-爱代码爱编程

Linux镜像下载 Linux镜像下载地址(国内) 网易开源镜像站:http://mirrors.163.com/ 阿里云官方镜像站:http://mirrors.aliyun.com Linux网站 https://www.linux.org/.1.CentOS CentOS官网: https://www.centos.org/. CentOS各

docker安装Redis设置密码-爱代码爱编程

Docker redis 镜像下载地址: https://hub.docker.com/_/redis?tab=tags 下载最新镜像 sudo docker pull redis:latest 运行容器 ##无密码模式 sudo docker run -d --privileged=true --restart=always -p 637

CentOS7坏境下使用 Docker 安装 MySQL和Redis-爱代码爱编程

1. MySQL 1.1 安装 5.7为版本,若不指定则下载最新版本 docker pull mysql:5.7 1.2 启动 注意命令中是否有多余空格 sudo docker run -p 3306:3306 --name mysql -v /mydata/mysql/conf:/etc/mysql -v /mydata/mysql/

redis的哨兵机制-爱代码爱编程

哨兵机制 哨兵机制属于单独的服务,前提是在主从复制中,多个服务启动的情况下,用于监听其他的redis服务,监听主节点运行状态 如果监听到主节点停机了就会让其他的从节点 改为主节点 让服务正常的运行 如果在切换成功之后 原来的主节点 又重启启动了 那只能沦为新主节点的从节点 。 如果只有一个哨兵服务的话 容易出现脑裂的情况 就是说 判断主节点是否停机

spring在加@Transactional的方法中使用redis取值为空的问题-爱代码爱编程

参考博客:https://blog.csdn.net/qq_34021712/article/details/79606551http://www.kaysonlv.com/%E8%AF%B4%E8%AF%B4redis-data-redis%E4%BA%8B%E5%8A%A1%E7%9A%84%E4%BD%BF%E7%94%A8.htmlhttps://

MySql、Mongodb和Redis的区别-爱代码爱编程

NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路。 MongoDB: 它是一个内存数据库,数据都是放在内存里面的。 对数据的操作大部分都在内存中,但 MongoDB 并不是单纯的内存数据库。 MongoDB 是

数据库系列——基于Canal实现MySQL增量数据同步-爱代码爱编程

环境准备: 1、redis (默认端口6379) 2、zookeeper (默认端口2181) 3、Kafka (默认端口9092) 4、Canal (默认端口 11111) 5、MySQL (默认端口 3306 本文Github代码地址:https://github.com/cheriduk/spring-boot-inte