从小白到大神之路之学习运维第51天---第三阶段----redis高可用集群数据库的安装部署

news2024/11/24 9:46:08

第三阶段基础

时  间:2023年7月3日

参加人:全班人员

内  容:

生产级redis cluster部署

目录

一、环境配置:【两台服务器】

二、redis多实例配置:

三、构建redis cluster集群

四、生产集群部署

五、集群故障切换

故障转移测试

六、拓  展:


安装部署:(两台主机,三主三从,redis版本为4.0.10)

实验基本条件:

Ip地址

Node1

Node2

Node3

主  库huyang1

192.168.59.137

7000

7001

7002

从  库huyang2

192.168.59.138

8000

8001

8002

一、环境配置:【两台服务器】

 1、关闭防火墙

systemctl stop firewalld

iptables -F

setenforce 0

2.安装相关基础环境

 yum -y install wget gcc gcc-c++ make tar openssl

openssl-devel cmake

3.上传相关软件安装包

rz  redis-4.0.10.tar.gz  ruby-2.5.1.tar.gz

redis-3.2.0.gem

4.解压安装包并调整位置

 tar xf redis-4.0.10.tar.gz -C /usr/src/

5、编译、配置、安装

make  

make MALLOC=jemalloc   #避免碎片和可伸缩的并发支持

make PREFIX=/usr/local/redis install

6、优化redis程序命令

mkdir -p /usr/local/redis/conf

cp sentinel.conf /usr/local/redis/conf/

cp src/redis-trib.rb /usr/local/redis/bin/

ln -s /usr/local/redis/bin/* /usr/local/bin/

7.redis配置文件精简

cp redis.conf /usr/local/redis/conf/

cd /usr/local/redis/

cp conf/redis.conf{,.bak}

egrep -v "^$|^#" conf/redis.conf.bak > conf/redis.conf

8.系统调优配置

echo never >

/sys/kernel/mm/transparent_hugepage/enabled

echo never >

/sys/kernel/mm/transparent_hugepage/defrag

echo 'echo never >

/sys/kernel/mm/transparent_hugepage/enabled' >>

/etc/rc.local

echo 'echo never >

/sys/kernel/mm/transparent_hugepage/defrag' >>

/etc/rc.local

echo "* - nofile 10240" >> /etc/security/limits.conf        --文件并发数

echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf    --监听队列

echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf    -- 0内存不够,就会拒绝申请

1物理内存都允许分配给你,只要有内存就给你用,这样可以避免申请内存失败的问题。

sysctl -p

二、redis多实例配置:

主库配置:

步骤一:建立三个端口文件夹,移动配置文件并复制三份

mkdir -p /data/redis-cluster

cd /data/redis-cluster

mkdir 7000 7001 7002

cp  /usr/local/redis/conf/redis.conf

/data/redis-cluster/7000/

cp  /usr/local/redis/conf/redis.conf

/data/redis-cluster/7001/

cp  /usr/local/redis/conf/redis.conf

/data/redis-cluster/7002/

tree /data/

步骤二:修改配置文件

vim 7000/redis.conf

修改配置如下:

cluster-enabled yes

bind 0.0.0.0

port 7000

pidfile /data/redis-cluster/7000/redis.pid

logfile "/data/redis-cluster/7000/redis.log"

dir /data/redis-cluster/7000/

tcp-backlog 1024

daemonize yes

同理,将7001和7002配置文件修改,与上述端口不一,其他一致

步骤三:启动服务

redis-server /data/redis-cluster/7001/redis.conf

redis-server /data/redis-cluster/7002/redis.conf

redis-server /data/redis-cluster/7000/redis.conf

netstat -antup | grep redis-server

从库配置:

步骤一:建立三个端口文件夹,移动配置文件并复制三份

mkdir -p /data/redis-cluster

cd /data/redis-cluster

mkdir 8000 8001 8002

cp  /usr/local/redis/conf/redis.conf

/data/redis-cluster/8000/

cp  /usr/local/redis/conf/redis.conf

/data/redis-cluster/8001/

cp  /usr/local/redis/conf/redis.conf

/data/redis-cluster/8002/

tree /data/

步骤二:修改配置文件

vim 7000/redis.conf

修改配置如下:

cluster-enabled yes

bind 0.0.0.0

port 8000

pidfile /data/redis-cluster/8000/redis.pid

logfile "/data/redis-cluster/8000/redis.log"

dir /data/redis-cluster/8000/

tcp-backlog 1024

daemonize yes

同理,将7001和7002配置文件修改,与上述端口不一,其他一致

步骤三:启动服务

redis-server /data/redis-cluster/8001/redis.conf

redis-server /data/redis-cluster/8002/redis.conf

redis-server /data/redis-cluster/8000/redis.conf

netstat -antup | grep redis-server

三、构建redis cluster集群

【主库和从库均配置】配置所用的工具

tar xf ruby-2.5.1.tar.gz -C /usr/src/

cd /usr/src/ruby-2.5.1/

 ./configure && make && make install

本地安装ruby的redis扩展

/usr/local/bin/gem install -l  redis

【主库配置】

步骤一:创建本地回环集群

redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001

127.0.0.1:7002

步骤二:查看cluster集群的构建节点信息

redis-cli -p 7000 cluster nodes

ls /data/redis-cluster/7000/

cat /data/redis-cluster/7000/nodes.conf

步骤三:使用7000登录集群创建信息,查看其他端口登录的变化(使用redis-cli去操作集群,需要加入-c参数)

redis-cli -c -p 7000

get name huyang

其他端口登录查看

redis-cli -c -p 7001

redis-cli -c -p 7002

        此处演示的为,redis数据库去中心化操作,在redis数据库中操作,所有的数据都存在相应的槽里,没有中心之分,只有不同的槽。

步骤四:使用从库登录

redis-cli -h 192.168.59.137 -p 7000 get name

redis-cli -h 192.168.59.137 -p 7001 get name

redis-cli -h 192.168.59.137 -p 7002 get name

redis-cli -h 192.168.59.137 -c -p 7000 get name

redis-cli -h 192.168.59.137 -c -p 7001 get name

redis-cli -h 192.168.59.137 -c -p 7002 get name

        此处演示的为:以远程的方式访问redis-cluster时,被拒绝是因为我们创建集群的时候,是以127.0.0.1的本地IP方式创建的,因此只有本地访问时cluster集群才能发挥作用;

        远程访问7001端口时,之所以能成功,是因为数据本来就是存在了监听7001端口的redis上,所以我们不加-c也能访问成功。

四、生产集群部署

【主库操作】

步骤一:查看当前文件存放位置有哪些文件

ls /data/redis-cluster/7000

ls /data/redis-cluster/7000

ls /data/redis-cluster/7000

步骤二:删除node文件,关闭服务

rm -rf /data/redis-cluster/7000/nodes.conf

rm -rf /data/redis-cluster/7001/nodes.conf

rm -rf /data/redis-cluster/7002/nodes.conf

redis-cli -p 7000 shutdown

redis-cli -p 7001 shutdown

redis-cli -p 7002 shutdown

步骤三:启动redis-server服务

redis-server /data/redis-cluster/7000/redis.conf

redis-server /data/redis-cluster/7001/redis.conf

redis-server /data/redis-cluster/7002/redis.conf

步骤四:重新创建redis-cluster集群

redis-trib.rb create 192.168.59.137:7000

192.168.59.137:7001 192.168.59.137:7002

步骤五:创建数据,登录测试

创建数据:

redis-cli -h 192.168.200.111 -c -p 7000

set name  huyang1

本地登录测试:(通过集群)

远程登录测试:(通过集群)

步骤六:批量导入数据观察key的集群分布情况

(从库远程登录集群操作)

导入数据:

for line in `seq -w 10000`;do redis-cli -h

192.168.59.137 -p 7000 -c set key3_${line}

value_${line};done

观察集群分布情况:

redis-cli -h 192.168.59.137 -p 7000 info Keyspace

redis-cli -h 192.168.59.137 -p 7001 info Keyspace

redis-cli -h 192.168.59.137 -p 7002 info Keyspace

五、集群故障切换

步骤一:将从库添加为主库的从库

redis-trib.rb add-node --slave 192.168.59.138:8000

192.168.59.137:7000

redis-trib.rb add-node --slave 192.168.59.138:8001

192.168.59.137:7001

redis-trib.rb add-node --slave 192.168.59.138:8002 

192.168.59.137:7002

步骤二:查看集群所有节点的信息

 redis-cli -p 7000 cluster nodes

步骤三:从库的读写测试

创建数据:

redis-cli -h 192.168.59.138 -c -p 8000

set age 24

查看:

redis-cli -h 192.168.59.138 -c -p 8000 get age

redis-cli -h 192.168.59.138 -c -p 8001 get age

redis-cli -h 192.168.59.138 -c -p 8002 get age

redis-cli -h 192.168.59.138 -c -p 7000 get age

redis-cli -h 192.168.59.138 -c -p 7001 get age

redis-cli -h 192.168.59.138 -c -p 7002 get age

步骤四:查看主从cluster集群key的分布情况

redis-cli -h 192.168.59.138 -c -p 8000 info Keyspace

redis-cli -h 192.168.59.138 -c -p 8001 info Keyspace

redis-cli -h 192.168.59.138 -c -p 8002 info Keyspace

redis-cli -h 192.168.59.137 -c -p 7000 info Keyspace

redis-cli -h 192.168.59.137 -c -p 7001 info Keyspace

redis-cli -h 192.168.59.137 -c -p 7002 info Keyspace

故障转移测试

步骤一:模拟主库7001宕机,停止7001端口redis-server服务

redis-cli -h 192.168.59.137 -p 7001 shutdown

查看集群状态

 redis-cli -h 192.168.59.137 -p 7000 cluster nodes

从库8001变成了主库

步骤二:重启7001服务,查看集群状态

redis-server /data/redis-cluster/7001/redis.conf

查看集群状态

 redis-cli -h 192.168.59.137 -p 7000 cluster nodes

原主库7001变成了新主库8001的从库

手动切换主库

redis-cli -h 192.168.59.137 -c -p 7001 cluster  

Failover

总  结:

1、redis集群相比于MHA集群,没有固定的中心主库,但是有相对应的槽,在6.0以下版本的redis,槽都是随机分配的;

2、redis相比于MHA,部署相对简单,从库不存储数据,但是共享主库的数据槽,存储都在主库的槽内,相当于主库是工作的一方,从库是用来当备用主库的。

六、拓  展:

删除节点:

redis-trib.rb del-node 192.168.59.138:8001  id号

使用redis-cli -h 192.168.259.138 -p 8001 cluster nodes查看id

例:redis-cli -h 192.168.259.138 -p 8001 cluster nodes

删除节点

redis-trib.rb del-node 192.168.59.138:8001  

d8968dac7b88da6fedb751a7347ded16c1e12422

从库查看服务状态:

netstat -nptl|grep redis-server

由此可见,当删除节点之后,该节点的服务也停止。

重启服务,需要将之前的数据全部清空,再进行连接。

rm -rf /data/redis-cluster/8001/dump.rdb

rm -rf /data/redis-cluster/8001/nodes.conf

rm -rf /data/redis-cluster/8001/redis.pid

redis-server /data/redis-cluster/8001/redis.conf

主库添加重启服务的8001进入集群

redis-trib.rb add-node --slave 192.168.59.137:8001 192.168.59.137:7001

查看集群状态

redis-cli -h 192.168.59.137 -p 8001 cluster nodes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Makefile:1: *** 遗漏分隔符 (null)。 停止。解决方法

在使用ubuntu时,make命令后,直接弹出了个错误。。。。。。 Makefile: n n表示出问题的行数,仔细检查代码的内容,主要问题可能是该有的空格是否添加或者使用$引入的参数是否存在等 我的问题是这个 ifneq 后面的空格没有加 耐心查…

论文浅尝 | 大语言模型综述

笔记整理:刘康为、方润楠,浙江大学硕士,研究方向为自然语言处理 链接:https://arxiv.org/abs/2303.18223 一、介绍 在当前机遇和挑战的背景下,对大语言模型的研究和开发需要更多的关注。为了让读者对大语言模型有一个基…

C++实现打包工具代码框架(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、打包工具二、packtool框架前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践。 专栏介绍:专栏讲本人近…

windows10安装wsl2,centos内核

windows10安装wsl2,centos内核 检查系统环境 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 一、开启WSL2特性 【控制面板】>>【程序】>>【程序和功能】>>【启…

apple pencil平替笔哪个好用?适用于绘画的电容笔推荐

由于ipad的版本一直在升级,其功能也在增加,其功能已经达到了与手提电脑相媲美的程度。而且随着科技的发展,ipad也不仅仅是一个娱乐的工具,更是一个可以用来学习、画画、工作的强大工具。想要提高生产力,那么电容笔就是…

mysql 8.0版本更换用户密码

1、首先 cmd 进入命令行 mysql -uroot -p 2、查询版本号 select version(); 3、看一下数据库 show databases; 4、使用mysql即可 5、进行查询 user、host select user,host from user; 6、修改root的密码 alter user root% identified by 1234; 7、刷新权限 flush privi…

Kubernetes 服务发布方式(蓝绿发布、灰度发布和滚动发布)

目录 一、三种常用的项目发布方式1.1 蓝绿发布1.2 灰度发布(金丝雀发布)1.3 滚动发布 二、金丝雀的方式升级发布实验三、总结 一、三种常用的项目发布方式 应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境&…

Windows服务器——部署WSUS服务与综合测试

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 本章结构: 一.WSUS概述 1.WSUS概述 2.WSUS的特点 3.WSUS常见部署…

fastboot连接@设备识别问题

文章目录 fastboot模式(MIUI)界面变换fastboot链接电脑设备识别问题连接部件的兼容性 fastboot模式(MIUI)界面变换 老设备新设备 fastboot链接电脑设备识别问题 通常一根普通的数据线和PC就能够识别处于fastboot(bootloader)模式下的android设备 扫描已连接的bootloader模式…

软件设计模式与体系结构-设计模式-结构型软件设计模式-外观模式

目录 三、外观模式概念外观模式分析实例一:实例二:图形绘制外观模式讨论一个系统有多个外观类?不要试图通过外观类为子系统增加新行为外观模式与迪米特法则抽象外观类的引入 (因为违背开闭原则)使用外观模式的目的适配…

机器人学科建设沙盘套件!mechArm机械臂智慧农业3D分拣套装详解

作为最热门的技术领域,机器人技术正在彻底改变产业,并推动全球的创新。为了满足这个快速发展的领域对技术人才日益增长的需求,高校开发了一个开创性的机器人教育解决方案。这个创新的解决方案将自动化水果采摘机的模拟与水果分拣和运送的自动…

《AutoSar实战》读写DID之二:工具链配置

文章目录 前言一、配置DID存储功能1. 新建Ram memory2. 新建NvM Block Needs3. 检查 二、关联client/server接口1. 关联2. 生成代码并验证 总结 前言 本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。 DID读写功能实现流程包括如下几点: 1&#…

【ARM】-SWI 和未定义指令异常中断处理程序的返回

文章目录 处理流程示例代码实现SWI未定义指令 附录源码 处理流程 SWI 和未定义指令异常中断是由当前执行的指令自身产生的,当 SWI 和未定义指令异常中断产生时,程序计数器的 PC 的值还未更新,它指向当前指令后面第 2 条指令(对于…

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(一)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践,帮助开发组织减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

异步的终极方案Async-Await 和Generator

Async-Await 基本介绍 之前解决异步我们一直使用Promise的.then()方案,虽然解决了回调地狱的情况,但使用链式写法也并不特别优雅。比如看下面的代码。 所以就出现了一种号称异步的终极方案Async、Await。我们看他的定义 async 函数是使用async关键字…

手枪钻改台钻(3D打印)

所需工具: 1、3D模型打印; 2、手枪钻; 首先在SOLIDWORKS里面新建一个电钻夹的模型: 第二步导出“STL”文件: 第三步将"STL"文件导入到3D切片工具 Cura_15.02.1 里面进行切片: 第四步导出“g-…

显示器方案

概述: USB HUB连接Host与Device之间,可以扩展出多个USB设备接口,使得一个Host能同时与多个Device进行数据连接。 注:普遍而言,一颗HUB扩展芯片可扩展4个USB下行接口,市面上1 to 7的HUB,一般使用…

【Python实训项目】pygame制作【飞机大战】

目录 一、课程设计目的及应用背景 二、课程设计内容 三、课程设计代码实现 1. 创建子弹类 2.创建玩家飞机类 3. 创建敌机类 4.检查键盘输入 5.创建主模块 四、测试结果 五、思考、心得和改进以及不明白的问题 附录 所有代码如下: 一、课程设计目的及应用背景 根据课…

网联V2X视频事件检测相机使用说明书

1 产品概览 网联 V2X视频事件检测相机 视频事件检测相机 ,内置 1/1.8″逐行扫描 800万像素传感器;视 万像素传感器;视 频编码协议支持 H.265、H.264、MJPEG;具有 1个 10M/100M/1000M自适应以 太网 RJ45接口、 1路 RS485接口&#…

Bash中的eval命令

主要参考:What is the “eval” command in bash 简而言之,它让一个输入行被解析两次。 它是如何做到这一点的? shell有一系列步骤来解析一行命令。 shell读取它的输入shell将输入放入token:分为运算符和单词The shell parses the input i…