2024广东省职业技能大赛云计算赛项实战——Redis主从架构

Redis主从架构

前言

Redis是一个开源的内存数据结构存储系统,一般用于作为数据库、缓存和消息代理使用,而主从架构是许多分布式系统中常见的设计模式,用来提高系统的性能、可靠性和扩展性。

虚拟机使用的是自行创建的CentOS7,如果你不会,那虚拟机创建的流程可以参考我这篇文章:职业技能大赛云计算赛项实战------OpenStack搭建-CSDN博客

使用镜像为CentOS-7-x86_64-DVD-2009.iso,可从阿里镜像站下载:https://mirrors.aliyun.com/centos/7/isos/x86_64/

两台机子可以创好一台再克隆一台,这样会比较省时。

需要用到的redis软件源压缩包:https://pan.baidu.com/s/1ZnZoD_hdBywwFy3Q6GZFSA?pwd=tk9h

提取码:tk9h

同时,这个实验中两节点打得命令很多都是一样的,一样推荐使用Xshell,可以同时控制两个会话。

节点规划如下

主机名 IP/24 节点
redis1 192.168.100.100 主节点
redis2 192.168.100.200 从节点

操作过程

关闭防火墙和Selinux

shell 复制代码
#两个节点均关闭防火墙并禁止其开机自启
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
#临时关闭Selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# setenforce 0

修改主机名

shell 复制代码
#修改两台机子的主机名
[root@localhost ~]# hostnamectl set-hostname redis1
[root@localhost ~]# bash
[root@redis1 ~]# 

[root@localhost ~]# hostnamectl set-hostname redis2
[root@localhost ~]# bash
[root@redis2 ~]# 

上传redis软件源

上传我提供的软件包(使用远程连接软件,SecureFX、XShell都行)

大小才707K,两个节点都要上传

然后将软件包解压至opt目录

shell 复制代码
[root@redis1 ~]# tar -zxf redis-3.2.12.tar.gz -C /opt
[root@redis2 ~]# tar -zxf redis-3.2.12.tar.gz -C /opt

配置YUM源

shell 复制代码
#这里两个节点都要配置
#创建挂载目录
[root@redis1 ~]# mkdir /opt/centos
#挂载
[root@redis1 ~]# mount -o loop /dev/sr0 /mnt/
[root@redis1 ~]# cp -rf /mnt/* /opt/centos/
[root@redis1 ~]# umount /mnt/
#redis1:
#删除系统自带的默认源
[root@redis1 ~]# rm -rf /etc/yum.repos.d/*
#创建新的仓库文件
[root@redis1 ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
enabled=1
gpgcheck=0
[redis]
name=redis
baseurl=file:///opt/redis
enabled=1
gpgcheck=0
#检查可用性
[root@redis1 ~]# yum clean all && yum repolist
...
源标识                                       源名称                                       状态
centos                                       centos                                       4,070
redis                                        redis                                            3
repolist: 4,073
...
#redis2:
#创建挂载目录
[root@redis2 ~]# mkdir /opt/centos
#挂载
[root@redis2 ~]# mount -o loop /dev/sr0 /mnt/
[root@redis2 ~]# cp -rf /mnt/* /opt/centos/
[root@redis2 ~]# umount /mnt/
#删除系统自带的默认源
[root@redis2 ~]# rm -rf /etc/yum.repos.d/*
#创建新的仓库文件,你也可以从redis1通过scp命令把文件传过来
[root@redis2 ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
enabled=1
gpgcheck=0
[redis]
name=redis
baseurl=file:///opt/redis
enabled=1
gpgcheck=0
[root@redis2 ~]# yum clean all && yum repolist
...
源标识                                       源名称                                       状态
centos                                       centos                                       4,070
redis                                        redis                                            3
repolist: 4,073
...

安装redis服务

shell 复制代码
#redis1/redis2:
[root@redis1/2 ~]# yum -y install redis
#启动并设置服务开机自启
[root@redis1/2 ~]# systemctl start redis && systemctl enable redis
...

修改redis服务配置文件

shell 复制代码
#修改配置文件redis.conf
#具体修改内容如下:
#修改前的配置项:
[root@redis1/2 ~]# sed -n '61p;80p;128p;265p;272p;480p;593p' /etc/redis.conf
61 bind 127.0.0.1
80 protected-mode yes
128 daemonize no
265 # slaveof <masterip> <masterport>
272 # masterauth <master-password>
480 # requirepass foobared
593 appendonly no

#redis1:
[root@redis1 ~]# vi /etc/redis.conf									
61 #bind 127.0.0.1		#原来是生效的,将其注释
80 protected-mode no 	#原先是yes,改为no。这是允许外部网络进行访问
128 daemonize yes 		#原先是no,改为yes。这是开启守护进程
272 masterauth "123456"#去掉注释符,并设置主库密码
480 requirepass "123456" #去掉注释符,并设置访问密码
593 appendonly yes		#原先是no,改为yes。设置AOF持久化支持
#修改完后重启服务
[root@redis1 ~]# systemctl restart redis
#redis2:
[root@redis2 ~]# vi /etc/redis.conf
61 #bind 127.0.0.1		#原来是生效的,将其注释
80 protected-mode no 	#原先是yes,改为no。这是允许外部网络进行访问
128 daemonize yes 		#原先是no,改为yes。这是开启守护进程
265 slaveof 192.168.100.100 6379 #设置主节点IP和端口
272 masterauth "123456" #去掉注释符,并设置主库密码
480 requirepass "123456" #去掉注释符,并设置访问密码
593 appendonly yes		#原先是no,改为yes。设置AOF持久化支持
#修改完后重启服务
[root@redis2 ~]# systemctl restart redis

测试服务

shell 复制代码
#使用命令行客户端工具,指定连接的Redis服务器的地址、端口号和密码,查看当前Redis实例的复制状态信息
[root@redis1 ~]# redis-cli -h 192.168.100.100 -p 6379 -a 123456 info replication
# Replication
role:master		#当前角色是主节点
connected_slaves:1	#连接的从节点数量为1
slave0:ip=192.168.100.200,port=6379,state=online,offset=267,lag=1
#从节点的详细信息
#offset是从节点的复制偏移量,表示从节点已成功接收并复制的字节数
#lag是复制延迟,表示从节点落后于主节点的时间量/s
master_repl_offset:267	#主节点复制偏移量,这是主节点已发送给所有从节点的字节数。
repl_backlog_active:1	#复制回放缓冲区,为1说明在活跃,它用于保存主节点发送给从节点的命令和数据
repl_backlog_size:1048576	#复制回放缓冲区大小/byte
repl_backlog_first_byte_offset:2	#复制回放缓冲区的第一个字节的偏移量
repl_backlog_histlen:266	#复制回放缓冲区的历史长度/byte
[root@redis2 ~]# redis-cli -h 192.168.100.200 -p 6379 -a 123456 info replication 
# Replication
role:slave		#当前角色是主节点
master_host:192.168.100.100	#主节点IP
master_port:6379			#主节点端口
master_link_status:up		#与#主节点的连接状态,up说明正常
master_last_io_seconds_ago:3#上次与主节点进行I/O操作间隔/s
master_sync_in_progress:0	#是否正在进行同步操作
slave_repl_offset:281		#从节点的复制偏移量
slave_priority:100			#从节点优先级,选举新的主节点时使用,数值越小优先级越高
slave_read_only:1			#从节点是否只读,一般从节点是只读的,防止数据不一致
connected_slaves:0			#连接的从节点,一般从节点不会有自己的从节点
master_repl_offset:0		#主节点的复制偏移量
repl_backlog_active:0		#复制回放缓冲区
repl_backlog_size:1048576	#复制回放缓冲区大小/byte
repl_backlog_first_byte_offset:0	#复制回放缓冲区的第一个字节的偏移量
repl_backlog_histlen:0	#复制回放缓冲区的历史长度/byte

后语

没啥可说了,会持续更新的

相关推荐
Tttian622几秒前
基于Pycharm与数据库的新闻管理系统(2)Redis
数据库·redis·pycharm
言之。39 分钟前
redis延迟队列
redis
企业管理8MSaaS1 小时前
如何选择适合Scrum团队的项目管理系统?
云计算·scrum
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
企业管理8MSaaS1 小时前
如何在 Scrum 管理中化解团队冲突?
云计算·scrum
hanbarger2 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
弗罗里达老大爷2 小时前
Redis
数据库·redis·缓存
小扳4 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
正在走向自律10 小时前
阿里云ESC服务器一次性全部迁移到另一个ESC
服务器·阿里云·云计算
盛派网络小助手12 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#