当前位置: 首页>数据库>正文

redis6搭建3主3从 redis主从集群搭建

说明:单机的Redis存在许多的问题,如数据丢失问题、高并发问题、故障恢复问题、海量数据的存储能力问题,针对这四个问题,对应解决方式有:数据持久化、搭建主从集群、Redis哨兵和搭建分片集群;

本文介绍搭建Redis主从集群和哨兵,用以解决单机Redis的并发问题和故障恢复问题。操作系统是CentOS 7,远程连接工具是WindTerm。

单机安装

首先,先安装单机的Redis

第一步:下载Redis压缩包

可在官网(https://redis.io/download/#redis-downloads)下载,下载完成后将压缩包复制到云服务器或者Linux虚拟机里;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_数据库,第1张

我这里放在/tmp/essay目录下

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_Redis_02,第2张

第二步:安装Redis所需的依赖

我安装过了,首次安装需要一点时间

yum install -y gcc tcl

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis_03,第3张

第三步:解压

tar -xvf redis-6.2.4.tar.gz

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_数据库_04,第4张

第四步:编译

进入redis目录

cd redis-6.2.4

执行编译命令

make && make install

全程没有爆红,就是编译完成

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_缓存_05,第5张

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_数据库_06,第6张

第五步:修改配置文件

需要修改两个地方,一个是绑定地址(75行),默认是127.0.0.1,本地访问,需要修改为0.0.0.0,表示任意IP访问;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis6搭建3主3从_07,第7张

第二个是数据库数量(327行),默认是16,我们设置为1;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_Redis_08,第8张

可通过下面的命令查看配置文件中对应的配置是否已经更改

grep -rina "关键字" 文件

可以看到地址已经修改了,可是数据库数量没有更改过来

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_缓存_09,第9张

修改完之后再看,已经修改完成

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_Redis_10,第10张

第六步:启动测试

redis-server redis.conf

可以看到,Redis可以正常启动;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis6搭建3主3从_11,第11张

如果出现了端口被占用的情况,可使用下面两个命令,查看端口被占用的进程PID,再强制结束该进程;

ps -ef |grep 端口号

kill -9 进程ID

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_Redis_12,第12张

关闭Redis(ctrl+c),开始搭建主从集群

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_数据库_13,第13张

主从集群

结构图

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_数据库_14,第14张

第一步:复制配置文件

将redis.conf配置文件拷贝三份,修改文件中对应的端口号(如8001、8002、8003),模拟三台Redis服务器;

注意,需要在Redis的目录外面操作;

# 创建三个目录,以端口号命名
mkdir 8001 8002 8003

# 复制redis配置文件到三个文件夹中
echo 8001 8002 8003 | xargs -t -n 1 cp redis-6.2.4/redis.conf

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis_15,第15张

第二步:修改对应的端口号

修改对应目录下的配置文件中的端口号,注意路径,我这里的是/tmp/essay

sed -i -e 's/6379/8001/g' -e 's/dir .\//dir \/tmp\/essay\/8001\//g' 8001/redis.conf
sed -i -e 's/6379/8002/g' -e 's/dir .\//dir \/tmp\/essay\/8002\//g' 8002/redis.conf
sed -i -e 's/6379/8003/g' -e 's/dir .\//dir \/tmp\/essay\/8003\//g' 8003/redis.conf

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis6搭建3主3从_16,第16张

第三步:绑定IP

修改每个目录里的配置文件,使每个Redis绑定一个固定IP,避免多个IP造成的混乱(如果是虚拟机操作);

printf '%s\n' 8001 8002 8003 | xargs -I{} -t sed -i '1a replica-announce-ip IP' {}/redis.conf

我这里改成自己云服务的内网IP,如果是虚拟机操作的话,那么改成自己虚拟机的IP就可以;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_Redis_17,第17张

第四步:启动

可以创建三个窗口,分别启动这三个Redis

# 第1个
redis-server 8001/redis.conf
# 第2个
redis-server 8002/redis.conf
# 第3个
redis-server 8003/redis.conf

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_缓存_18,第18张

第五步:关联主从关系

此时,三台Redis服务器是相互独立的,没有主从关系。需要进入到对应的客户端里,建立主从关系;

# 指定端口进入对应的redis客户端
redis-cli -p 端口号
# 在子节点中设置master节点
slaveof master节点的IP 端口号
# 在master节点中查看子节点信息
info replication

例如设置8001为master节点,8002、8003均为8001的子节点

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis_19,第19张

在master节点的redis日志中,可以看到另外两个节点发过来的同步请求同步信息;

同样,在另外两个子节点也可以看到对应的日志信息;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis_20,第20张

如果无法关联主从关系,检查一下三个redis.conf文件中的这行配置是否已经设置为0.0.0.0

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis6搭建3主3从_21,第21张

第六步:使用

正如前面所说,搭建主从集群,可以解决高并发问题,这是通过读写分离实现的。

  • 子节点没有写能力,只有读能力;
  • master节点有读写能力;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_缓存_22,第22张

小结

通过搭建主从集群,实现读写分离,可解决高并发问题。

另外,值得一提的是:

(1)主从集群可以设置临时和永久两种模式,上面通过命令行的方式设置的是临时模式,重启redis服务后失效。想要设置永久模式,可将命令写在对应的redis.conf配置文件中。

(2)在redis 5.0以后,新增了replicaof命令,效果与slaveof一样。

Redis哨兵

结构图

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis_23,第23张

第一步:创建文件

在essay目录下,创建三个目录(s1、s2、s3),分别表示三个哨兵,端口号分别是28001、28002、28003;

# 创建三个目录
mkdir s1 s2 s3

进入s1目录,创建sentinel.conf文件,文件内容如下,补充上IP地址

# 创建sentinel.conf文件
touch sentinel.conf
port 28001
sentinel announce-ip IP地址
sentinel monitor mymaster IP地址 8001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/essay/s1"

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_数据库_24,第24张

第二步:复制文件到其他目录

在essay目录下,将s1中的文件复制一份到另外两个文件夹中

echo s2 s3 | xargs -t -n 1 cp s1/sentinel.conf

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis_25,第25张

第三步:修改配置文件

修改另外两个配置文件中的端口号

sed -i -e 's/28001/28002/g' -e 's/s1/s2/g' s2/sentinel.conf
sed -i -e 's/28001/28003/g' -e 's/s1/s3/g' s3/sentinel.conf

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_数据库_26,第26张

第四步:启动哨兵

分别启动三个哨兵

# 第1个
redis-sentinel s1/sentinel.conf
# 第2个
redis-sentinel s2/sentinel.conf
# 第3个
redis-sentinel s3/sentinel.conf

通过日志信息,可以看到哨兵已经监测到了前面的主从集群

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis6搭建3主3从_27,第27张

第五步:使用

手动尝试把8001master节点宕机,查看另外两个子节点是否可以异常恢复;

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_缓存_28,第28张

(8002端口Redis:可以发现,8002有关于8001、8003的请求同步日志,说明此时8002成为新的master节点)

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_redis6搭建3主3从_29,第29张

(8003端口Redis:可以看到8001宕机后,8003连接数次失败后,转为连接8002,说明此时8002称为新的master节点)

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_Redis_30,第30张

查看哨兵日志,可以看到详细的日志记录,表明8001宕机后,8002称为了新的master节点;

(哨兵日志图片.png)

如果此时8001重新上线,将作为8002的子节点

redis6搭建3主3从 redis主从集群搭建,redis6搭建3主3从 redis主从集群搭建_Redis_31,第31张

小结

通过增加哨兵,可以解决单机Redis故障问题



https://www.xamrdz.com/database/6ce1963985.html

相关文章: