Redis快速上手篇七(集群-六台虚拟机)

news/2024/7/7 23:42:38

Redis集群

主从复制的场景无法吗满足主机单点故障时需要引入集群配置

一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 ,处理读请求。

基本原理

哨兵选举机制,如果过半数节点发现某个异常节点,共同决定更改异常节点的状态,如果该节点是主节点,对应的备节点自动顶替为主节点。

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器。并能在被监视的主服务器下线时自动将下线主服务器下的某个从服务器升级为新的主服务器。

配置集群所需的环境

Redis集群至少需要三个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。

要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。

学习可以采用伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号。

分布式集群搭建:

1.在安装目录下新建目录redis_cluster,文件夹下新建文件redis7001.conf

2. vim redis7001.conf

在不同的服务器 这个可以不要

cluster-config-file nodes-7006.conf 伪集群每个节点这个文件一样所以需要加这个

include /usr/local/bin/redis_cluster/redis.conf #引入配置文件
port 7001 #端口设置
pidfile "/var/run/redis_7001.pid" #存放进程ID防止启动多个进程副本
dbfilename "dump_7001.rdb" #持久化文件名称
dir "/usr/local/bin/redis_cluster" #持久化保存位置
logfile "/usr/local/bin/redis_cluster/redis_err_7001.log"
cluster-enabled yes    #开启集群
cluster-config-file nodes-7001.conf #节点名称
cluster-node-timeout 15000 #节点过期时间
                          

集群一般不设置密码

3.后台启动,查看启动是否正常

4.关闭 建议使用 shutdown 不要使用 kill杀死进程

一台虚拟机多个节点需要 -h 指定 IP

5.完整克隆第一台虚拟机五次(关机后在进行克隆)

6.启动六台虚拟机并修改 IP 与 .conf

/etc/sysconfig/network-scripts/ifcfg-ens32(这个数值看个人网卡)

/etc/sysconfig/network-scripts/ifcfg-ens+tab(自动补全)

vim /usr/local/bin/redis_cluster/redis7001.conf(文件名不用更改即可)

service network restart         修改网络配置后重启网络服务

(1)

vim /etc/sysconfig/network-scripts/ifcfg-ens32

克隆的五台虚拟机需要删掉此行 UUID

(2)

按esc通过vim 底行指令快速修改

vim /usr/local/bin/redis_cluster/redis7001.conf

cluster-node-timeout 15000        1会被修改

        :%s/7001/7002/g        不会修改 15000

五台克隆的虚拟机均进行以上操作

保证:(1)不在同一个ip

           (2)不在同一个端口启动

如图:

ip                                                                redis运行端口

192.168.253.16                                                7001

192.168.253.21                                                7002

192.168.253.22                                                7003

192.168.253.23                                                7004

192.168.253.24                                                7005

192.168.253.25                                                7006

7.在6个虚拟机分别启动redis

因为没有更改文件名称,可以直接去每个虚拟机粘贴执行即可

 /usr/local/bin/redis-server /usr/local/bin/redis_cluster/redis7001.conf 

ps -ef | grep redis 查看进程

8.创建redis集群

/usr/local/bin/redis-cli  --cluster create  192.168.253.16:7001 192.168.253.21:7002 192.168.253.22:7003 192.168.253.23:7004 192.168.253.24:7005 192.168.253.25:7006 --cluster-replicas 1

cluster-replicas 1

1其实代表的是一个比例,就是主节点数/从节点数的比例。会按照命令中IP:PORT的顺序,先是3个主节点,然后是3个从节点。

分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。

这里输入 yes        如下图创建集群成功

切记 先开启服务端在连接客户端

9.使用cli连接redis集群

使用客户端链接集群 必须使用 -c 连接

/usr/local/bin/redis-cli -c -h 192.168.253.21 -p 7002

10.查看集群的节点的信息 :cluster nodes

11.检查集群的状态

/usr/local/bin/redis-cli --cluster check 192.168.253.21:7002

12.添加主节点

新建虚拟机,配置 ip 与 .conf文件,与前六台配置一样。

例如 IP 192.168.253.26 redis服务端口 7007

启动服务后

/usr/local/bin/redis-cli --cluster add-node 192.168.253.26:7007 192.168.253.21:7002

前面的IP加端口号是要添加的redis节点,后面的IP和端口号是集群中的任意一个节点。

13.配置从节点

新建虚拟机 配置 IP 与 端口

例如 IP 192.168.253.27 redis服务端口 7008

刚才添加的主节点还没有分配槽,所以无法使用

添加从节点之前需要设置从节点并启动节点

--cluster-master-id 为从节点对应主节点的id

列: 添加刚才主节点的从节点

/usr/local/bin/redis-cli --cluster add-node 192.168.253.27:7008 192.168.253.26:7007 --cluster-slave --cluster-master-id 刚才添加的主节点的id

14.重新分配slots

添加的主节点还不能使用,因为没有分配slots,

slot的概念。slot对于Redis集群而言,就是一个存放数据的地方,就是一个槽。对于每一个Master而言,会存在一个slot的范围,而Slave则没有。在Redis集群中,依然是Master可以读、写,而Slave只读

/usr/local/bin/redis-cli --cluster reshard 192.168.253.21:7002(要移动插槽的IP)

然后再执行后的输入框 输入 接收插槽的IP的id

最后输入 all 或 done 

all 代表从所有有数据据节点进行迁移到目的节点,也可以选择 目标节点id回车,最后以done进行结束

done 代表结束

15.删除主节点

--cluster del-node 节点id

删除主节点需要先使用 reshard 把主节点的slots移到其他节点才可以

/usr/local/bin/redis-cli --cluster del-node 192.168.253.16:7007 67211a02cffe48ee7197092ca48e9e7294dc5961

16.删除从节点

--cluster del-node 集群 节点id

/usr/java/redis/bin/redis-cli --cluster del-node 192.168.159.34:7002 cd7545b656df4c8c97bd9d4210ce71880d0fdb54


http://lihuaxi.xjx100.cn/news/1727314.html

相关文章

基于Ubuntu20.04安装ROS系统

文章目录 一、ROS简介二、ROS安装三、ROS安装测试四、安装问题解决1. sudo rosdepc init:找不到命令2. ERROR: cannot download default sources list from...3. Command roscore not found...4. Resource not found: roslaunch... 一、ROS简介 ROS是用于编写机器人…

静力触探数据智能预处理(4)

静力触探数据智能预处理(4) 前言 数据处理方式已由手工1.0、计算机辅助2.0向人工智能3.0的趋势发展。机器学习是人工智能的基础,本文尝试应用机器学习中K均值聚类算法对孔压静力触探数据进行土的分类,分类结果不理想&#xff0c…

IT新人如何在职场弯道超车?强推荐考取当下最有价值的云计算认证证书!

疯狂的裁员!股价降低!在美国,一股寒冷的创业寒流正在席卷而来。不只是硅谷进入了冬天,国内的传统互联网寒潮也凛冽地来了。在传统 IT体系结构逐渐式微、产业规模不断缩小的情况下,许多 IT工程师都面临着下岗、跳槽等问…

ubuntu安装nps客户端

Ubuntu安装nps客户端 1.什么是nps内网穿透?2.设备情况3.下载客户端3.链接服务端3.1、无配置文件模式3.2、注册到系统服务(启动启动、监控进程) 1.什么是nps内网穿透? nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发…

Python分享之数学与随机数 (math包,random包)

我们在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy项目,它们不但支持数组和矩阵运算,还有丰富的数学和物理方…

jackjson下载地址

三个链接: https://github.com/FasterXML/jackson-databind https://github.com/FasterXML/jackson-annotations/wiki https://github.com/FasterXML/jackson-core 一番搜索: Central Repository: com/fasterxml/jackson/core

uniapp实现公众号微信登录

前端代码 data() {return {openid: "",server: ,code:}; }, mounted() {this.getCode() }, methods:{getCode() {// 非静默授权,第一次有弹框this.code ;var callback_url 回调地址; // 获取页面urlvar appid APPID;this.code this.getUrlCode().cod…

XJ+Nreal 高精度地图+Nreal眼镜SDK到发布APK至眼镜中

仅支持Anroid平台 Nreal套装自带的计算单元,其实也是⼀个没有显示器的Android设备 新建unity⼯程,将⼯程切换Android平台。 正在上传…重新上传取消正在上传…重新上传取消 Cloud XDK Unity User Manual for Nreal ARGlasses 该XDK是针对 NReal AR 眼镜…