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
#两个节点均关闭防火墙并禁止其开机自启
[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
修改主机名
#修改两台机子的主机名
[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目录
[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源
#这里两个节点都要配置
#创建挂载目录
[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服务
#redis1/redis2:
[root@redis1/2 ~]# yum -y install redis
#启动并设置服务开机自启
[root@redis1/2 ~]# systemctl start redis && systemctl enable redis
...
修改redis服务配置文件
#修改配置文件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
测试服务
#使用命令行客户端工具,指定连接的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
后语
没啥可说了,会持续更新的