首页 > 数据库 >Redis伪分布式集群三主三从模式+开启自启动+自动部署集群

Redis伪分布式集群三主三从模式+开启自启动+自动部署集群

时间:2024-11-01 23:17:34浏览次数:6  
标签:service Redis 三主三 redis cluster 集群 自启动 local

搭建redis集群

首先进入一个新目录,创建六个以端口号为名字的子目录

$ mkdir redis-cluster
$ cd redis-cluster
$ mkdir 8001 8002 8003 8004 8005 8006

添加集群配置文件

把编译好的redis.conf文件复制到redis-cluster/800*/文件夹中

修改对应文件夹的redis.conf,内容如下:

daemonize yes
port 8001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

cluster-enabled:用于开实例的集群模式

cluster-conf-file:设定了保存节点配置文件的路径,默认值为nodes.conf,节点配置文件无须人为修改,它由 Redis集群在启动时创建, 并在有需要时自动进行更新。要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

创建集群

现在我们已经有了六个正在运行中的Redis实例,接下来我们需要使用这些实例来创建集群,并为每个节点编写配置文件。通过使用Redis集群命令行工具redis-trib,编写节点配置文件的工作可以非常容易地完成:redis-trib位于Redis源码的src文件夹中,它是一个Ruby程序,这个程序通过向实例发送特殊命令来完成创建新集群,检查集群,或者对集群进行重新分片(reshared)等工作。

sudo apt-get update
sudo apt-get install ruby
sudo apt-get install rubygems
gem install redis

分别启动六个Redis实例,并检查是否启动成功

$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8001/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8002/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8003/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8004/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8005/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8006/redis.conf

检查是否启动成功

ps -ef | grep redis

使用redis.trib.rb命令创建整个集群

root@iZwz97dkzcmzfg3epej2zdZ:/usr/local/src/redis-6.2.6/src# ./redis-cli --cluster create yourIP:8001 yourIP:8002 yourIP:8003 yourIP:8004 yourIP:8005 yourIP:8006 --cluster-replicas 1 

有过有密码的话需要在上面命令后面跟上:

-a yourpassword

记住这里若是出现无休止的等待(下图),那就去看看是不是自己集群总线端口没有开放

解决办法开放集群总线端口:集群总线端口是redis客户端连接的端口+10000

然后重新执行创建集群命令--->成功:

到这你的redis伪分布式集群也就搭建好了 !!!

现在配置自动部署集群,也就是开机自启+自动部署集群

  1. 确保 Redis 已安装在目标机器上。
  2. 确定要创建的 Redis 实例数量(这里以六个为例),规划好每个实例的端口号(如 8001 - 8006)、配置文件名称(如 redis8001.conf、redis8002.conf 等)以及数据存储目录

  • 为每个 Redis 实例在/etc/systemd/system/目录下创建一个对应的服务文件,文件名形如redis<端口号>.service(如redis8001.serviceredis8002.service等)。
  • 例:redis8001.service

    [Unit]
    Description=redis-server 8001
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-cluster/8001/redis.conf
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target

    编写完保存后:

  • 执行 systemctl daemon-reload 让 systemd 重新加载配置。
  • 使用 systemctl enable redis8001.service 将 Redis 8001 实例设置为开机自启动。
  • 重复上述步骤为 redis8001.serviceredis8006.service 进行相同操作(记得每个redis实例的redis800*.service的ExecStart得按自己路径实际情况来)

走到这恭喜你这六台redis实例的开机自启动你已经完成了,接下来就差开机自动部署了:

  1. 创建启动脚本文件:
vim /opt/redis_cluster_setup.sh

    2.打开的文件中输入以下内容:

   #!/bin/bash

   # 等待所有 Redis 实例启动完成
   for port in {8001..8006}; do
       while! nc -z localhost $port; do
           sleep 1
       done
   done

   # 创建集群
   redis-cli --cluster create yourIP:8001 yourIP:8002 yourIP:8003 yourIP:8004 yourIP:8005 yourIP:8006 --cluster-replicas 1

保存后退出

赋予脚本执行权限:

sudo chmod +x /opt/redis_cluster_setup.sh

编辑 /etc/rc.local 文件来添加开机启动任务:

vim /etc/rc.local

文件末尾的 exit 0 之前添加以下内容:

/opt/redis_cluster_setup.sh

保存并退出编辑器.

如果你的系统中没有 /etc/rc.local 文件,可以用下面方法来实现类似的开机启动功能

使用 systemd 的方法:

  1. 创建一个新的 systemd 服务文件来执行你的启动脚本。例如,创建一个名为 redis-cluster-init.service 的文件:
vim /etc/systemd/system/redis-cluster-init.service

打开文件后添加以下内容:

   [Unit]
   Description=Redis Cluster Initialization
   After=network.target redis8001.service redis8002.service redis8003.service redis8004.service redis8005.service redis8006.service

   [Service]
   Type=oneshot
   ExecStart=/opt/redis_cluster_setup.sh

   [Install]
   WantedBy=multi-user.target

编写完保存后:

  1. 执行 systemctl daemon-reload 让 systemd 重新加载配置。
  2. 使用 systemctl enable redis8001.service 将 Redis 8001 实例设置为开机自启动。

全部操作完就可以重启试试配置有没有生效啦!!

使用 ps -ef | grep redis 命令,应该能看到对应端口(8001 - 8006)的六个 Redis 进程都在运行。

然后再使用 redis-cli -c 进入 Redis 客户端(以集群模式连接),接着输入 cluster nodes 命令

用Redis客户端测试也可以:

nice -- 拜拜

标签:service,Redis,三主三,redis,cluster,集群,自启动,local
From: https://blog.csdn.net/2301_76597244/article/details/143442216

相关文章

  • 1.TiDB集群部署篇
    **TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(HybridTransactionalandAnalyticalProcessing,HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时HTAP、云原生的分布式数据库、兼容MyS......
  • KingbaseES V8R6集群备份恢复案例之---主库single-pro备份恢复
    案例说明:KingbaseESV8R6集群物理备份支持single-pro方式,本案例在集群执行single-pro方式备份并多次切换集群后,对集群执行了恢复测试,文档记录了恢复的详细过程。适用版本:KingbaseESV8R6集群架构:ID|Name|Role|Status|Upstream|repmgrd|PID|Paused?|......
  • web集群项目-迁移与接入负载
    1.web01数据库迁移到db01项目背景:网站集群访问量或数据量越来越大单台机器无法承受.项目实时步骤:准备新环境部署数据库服务(版本一致)临时停止服务,旧环境备份,新环境恢复,测试修改数据库地址(用户,密码,库),指向新的环境(wp-config.php代码中连接数据库的配置文件)......
  • 在K8S中,集群服务暴露失败 如何解决?
    在Kubernetes(K8S)中,集群服务暴露失败可能由多种原因引起。为了解决这个问题,可以按照以下步骤进行详细的排查和解决:1.检查服务是否存在首先,需要确认要暴露的服务是否已经存在。使用kubectlgetservices命令查看当前命名空间下的所有服务,确认目标服务是否在其中。如果服务不存在,......
  • 在K8S中,集群服务访问失败 如何解决?
    在Kubernetes(K8S)中,集群服务访问失败是一个常见的问题,可能由多种原因引起。下面是一些排查和解决问题的步骤,可以帮助你定位并解决服务访问失败的问题。1.检查服务定义首先,确保你的服务定义是正确的。检查服务的YAML文件,确认selector标签与后端Pod的标签匹配。如果服务定义有......
  • 在K8S中,外网无法访问集群提供的服务 如何解决?
    在Kubernetes(K8S)中,如果外网无法访问集群提供的服务,可以按照以下步骤进行详细的排查和解决:1.检查服务配置服务类型:确保服务的类型是NodePort或LoadBalancer,因为这两种类型允许外部访问。如果使用NodePort,检查是否所有节点的防火墙都允许访问该端口。如果使用LoadBalancer,确......
  • Kubernetes集群证书过期解决方案:使用kubeadm为证书续期
    目录一.系统环境二.前言三.Kubernetes证书过期及续期简介四.使用kubeadm为Kubernetes集群证书续期4.1查看k8s集群证书过期时间4.2为master节点续期证书4.3为worker节点替换最新的证书五.总结一.系统环境本文主要基于Kubernetes1.22.2和Linux操作系统Ubuntu18.04。服务器......
  • 浅谈TiKV集群运维问题排查与修复——磁盘空间占用问题
    作者:来自vivo互联网存储团队-YuanJianwei本文介绍了TiKV磁盘空间问题的排查思路与解决方案。一、背景介绍在业务快速扩张的年代,vivo内部的很多业务为了可以快速上线,给现网功能提供支撑,在KV类型的选型下许多场景都选用了轻量快速的Redis集群。但是随着业务的不断发......
  • java项目自启动方案——jar包做成服务(Windows版本)
    需求:公司做的很多项目都是属于客户端—服务器形式,在客户端部分运行了属于面向用户操作的项目jar包,客户端机器就不像服务器那样,经常会遇到重启机器的情况,所以让我们的项目能自启动就是个必须的工作。 方案:(1)环境:电脑需要安装Microsoft.NETFramework4,如果有的话这个可以不......
  • Linux Docker 部署 Elasticsearch (ES) 集群详解教程
    1.安装Docker首先,确保你的Linux系统上已经安装了Docker。如果尚未安装,可以通过以下命令进行安装:sudoyuminstall-yyum-utilssudoyum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.reposudoyuminstalldocker-cedocker-ce......