『亚马逊云科技产品测评』活动征文| 基于etcd实现服务发现

提示:授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道

背景

etcd 是一个分布式 Key-Value 存储系统,它具有高度可用、一致性和高可靠性等特点。它可以帮助分布式系统实现数据存储、同步和管理等功能。在很多场景中,etcd 都可以发挥重要作用。今天我们就在服务器上安装和配置下etcd,可以让我们以后更好的在云环境中构建和管理分布式系统。

环境准备

这里我们部署在云服务器上去。首先需要创建一个云服务器实例。这里我们以亚马逊云服务器为例。

首先我们登录到AWS网站上,进入到AWS管理控制台。

从最近访问中点击Lightsail,进入Lightsail控制台。

在这里插入图片描述

创建一个Lightsail服务实例是很简单的,我们只需要按以下步骤执行就可以:

  • 选择实例地区
  • 选择实例镜像
  • 配置实例秘钥
  • 选择实例计划
  • 定义实例名称

上面步骤的大部分我们都可以使用默认项,除非你要特别的需求。我们主要需要设置的只有实例的镜像及实例的计划。

我这里其他项都选择使用默认项,主要也只配置了镜像及计划。

在这里插入图片描述
实例计划这里,AWS对新用户有免费使用的额度。可以免费使用3个月的Lightsail服务,只有标记了“First 3 months free”才能免费使用,我还是新用户,这里我选择最高免费额度的计划。

在这里插入图片描述
点击创建之后,我们就创建好了一个实例。
在这里插入图片描述

etcd安装

官方文档:https://etcd.io/docs/,学习的时候,官方文档永远是首选

etcd在生产环境中一般推荐集群方式部署,三个节点的集群就可以实现高可用。我们这里只是安装使用演示,所以主要是单节点的安装和使用。

安装预构建的二进制文件

我们从 https://github.com/etcd-io/etcd/releases/ 下载v3.5.0压缩存档文件。

我们执行下面的命令下载etcd

wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gztar -zvxf etcd-v3.5.0-linux-amd64.tar.gz  sudo mv etcd-v3.5.0-linux-amd64 /opt/etcd-3.5.0

我们进入到安装的目录看下解压后的文件

在这里插入图片描述
其中etcd是server端,etcdctl是客户端,操作之后会生成一个default.etcd,主要用来存储etct数据。

启动一个单节点的etcd服务,只需要运行etcd命令就行。

我们在当前目录下运行以下命令

./etcd 

启动成功后,出现如下所以:
在这里插入图片描述

从上面的截图中我们可以看到启动节点的名称默认为default。

data-dir 保存日志和快照的目录,默认为当前工作目录default.etcd/目录下。

我们采用这种方式启动的etcd只是一个程序,如果启动etcd的窗口被关闭的话则etcd便会被关闭

所以接下来我们使用systemctl 来管理启动etcd服务

使用systemctl 来管理启动etcd服务

1、建立相关目录

sudo mkdir -p /opt/etcd-3.5.0/config/

2、创建配置文件 /opt/etcd-3.5.0/config/etcd.conf.yml

# 节点名称
name: 'etcd-node'# 数据目录
data-dir: /opt/etcd-3.5.0/etcd-data# 快照设置
snapshot-count: 10000# 心跳间隔
heartbeat-interval: 100# 通讯和客户端监听地址
listen-peer-urls: http://0.0.0.0:2380
listen-client-urls: http://0.0.0.0:2379# 初始集群配置
initial-advertise-peer-urls: http://0.0.0.0:2380
initial-cluster: etcd-node=http://0.0.0.0:2380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new# 启用详细日志
log-level: debug
log-dir: /opt/etcd-3.5.0/logs
log-file: etcd.log
log-max-size: 100
log-backups: 3
log-format: text# 压缩设置
auto-compaction-mode: periodic
auto-compaction-retention: "1"

3、创建systemed配置文件 /etc/systemd/system/etcd.service

[Unit]
Description=etcd key-value store
Documentation=https://etcd.io/docs/
After=network.target[Service]
CPUAccounting=true
MemoryAccounting=true
CPUQuota=200%
MemoryLimit=1G
Type=notify
ExecStart=/opt/etcd-3.5.0/etcd  --config-file=/opt/etcd-3.5.0/config/etcd.conf.yml
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target

我们创建好文件之后,我们重新加载 systemd 单元文件
启动etcd,并且检查下etcd的状态

sudo systemctl daemon-reloadsudo systemctl start etcdsudo systemctl status etcd

在这里插入图片描述

使用etcd

etcd为我们提供提供了一个命令行客户端—etcdctl,供用户直接跟etcd服务打交道,而无需基于 HTTP API方式。可以方便我们在对服务进行测试或者手动修改数据库内容。我们刚才查看etcd目录中也看到etcdctl

我们可以运行 ./etcdctl -h 查看 etcdctl的用法

在这里插入图片描述
etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),我们可以指定键为单独的名字比如:test,也指定为目录结构如:/test/info
在这里插入图片描述

服务注册与发现

在ETCD中,每个服务都可以在ETCD中存储自己的注册信息,包括服务的名称、IP地址和端口号等。其他服务可以通过查询ETCD来获取这些注册信息,从而找到并连接其他服务。这种服务注册和发现的方式可以帮助我们构建高可用的分布式系统。

下面我们就使用PHP语言来实现下:

首先我们先安装了etcd的PHP客户端库。可以使用Composer安装

composer require start-point/etcd-php

创建Service类:

创建一个Service类,EtcdService.php,并在其中添加服务注册和发现的方法:

<?phpnamespace app\common\service;use Etcd\Client;class EtcdService
{private $etcdServer;private $client;public function __construct($etcdServer){$this->etcdServer = $etcdServer;$this->client = new Client($this->etcdServer);}public function registerService($serviceName, $serviceAddress){$this->client->put("/services/$serviceName", $serviceAddress);return "Service registered: $serviceName at $serviceAddress";}public function discoverService($serviceName){$response = $this->client->get("/services/$serviceName");$serviceAddress = $response['kvs'][0]['value'];return "Service discovered: $serviceName at $serviceAddress";}
}

在Controller中使用:

<?phpnamespace app\controller;use app\BaseController;
use app\common\service\EtcdService;class Index extends BaseController
{public function register(){// 这里的地址换成你的etcd$etcdService = new EtcdService('http://localhost:2379');$result = $etcdService->registerService('my-service', 'http://localhost:8080');return $result;}public function discover(){$etcdService = new EtcdService('http://localhost:2379');$result = $etcdService->discoverService('my-service');return $result;}}

我们访问下,可以看到已经写入和访问了

在这里插入图片描述
在这里插入图片描述

这里只是一个很基本的示例,实际中我们需要更好的代码结构和错误处理

总结

在本文中我们介绍了如何使用Lightsail在云服务器上快速的安装etcd和简单的使用,使用Lightsail我们可以快速的构建一个测试环境。
这里只介绍了使用预购建的二进制文件安装,其实我们可以通过Docker容器更加轻松的部署etcd,这个等以后有时间在写

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

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

相关文章

vue+el-tooltip 封装提示框组件,只有溢出才提示

效果 封装思路 通过控制el-tooltip的disabled属性控制是否提示通过在内容上绑定mouseenter事件监听内容宽度和可视宽度&#xff0c;判断内容是否溢出 封装代码 <template><div style"display: flex" class"column-overflow"><el-tooltip…

详解API开发【电商平台API封装商品详情SKU数据接口开发】

1、电商API开发 RESTful API的设计 RESTful API是一种通过HTTP协议发送和接收数据的API设计风格。它基于一些简单的原则&#xff0c;如使用HTTP动词来操作资源、使用URI来标识资源、使用HTTP状态码来表示操作结果等等。在本文中&#xff0c;我们将探讨如何设计一个符合RESTfu…

[黑皮系列] 计算机网络:自顶向下方法(第8版)

文章目录 《计算机网络&#xff1a;自顶向下方法&#xff08;第8版&#xff09;》简介作者目录前言配套公开课 《计算机网络&#xff1a;自顶向下方法&#xff08;第8版&#xff09;》 出版信息&#xff1a; 原作名: Computer Networking: A Top-Down Approach 作者: [美] Jame…

VSCode编译多个文件

打开tasks.json文件&#xff0c;找到"$ {file}“这一行。然后在其后面添加你想要编译的文件即可。 比如我这里是想要编译当前文件夹下的所有.cpp文件&#xff0c;那么我就直接把”$ {file}"给注释掉了&#xff0c;然后再使用通配符来代表所有.cpp文件。 最后解释以下…

JVM——产生内存溢出原因

目录 1.产生内存溢出原因一 &#xff1a;代码中的内存泄漏1.案例1&#xff1a;equals()和hashCode()导致的内存泄漏问题&#xff1a;**正常情况**&#xff1a;**异常情况&#xff1a;**解决方案&#xff1a; 2.案例2&#xff1a;内部类引用外部类问题&#xff1a;解决方案&…

数据结构-选择排序(简单选择、堆)

简单选择排序 基本思想 非常基础的算法&#xff0c;假设有N个数据&#xff0c;比较N-1轮&#xff0c;每轮选出当前剩余数据的最大&#xff08;最小&#xff09;放到数据 的开头&#xff0c;之后重复即可获得答案。 示例 代码 void SelectSort(OrderList *L) {RecordType t…

分享几种 Java8 中通过 Stream 对列表进行去重的方法

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 1. Stream 的 distinct…

Linux常用命令——badblocks命令

在线Linux命令查询工具 badblocks 查找磁盘中损坏的区块 补充说明 badblock命令用于查找磁盘中损坏的区块。 硬盘是一个损耗设备&#xff0c;当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后&#xff0c;如果不及时更换或进行技术处理&#xff0c;坏道就会越…

JavaScript图片处理大揭秘!掌握文件流处理方法

说在前面 &#x1f4bb;作为一名前端开发&#xff0c;我们平时也少不了对文件流数据进行处理&#xff0c;今天简单整理一下日常开发中比较常见的一些处理文件流的场景及处理方法&#xff0c;希望可以帮助到大家&#xff0c;挤出多一点的摸鱼学习时间。 常见场景 一、input框上…

linux 磁盘扩容初始化挂载 笔记

目录 说明环境信息前提条件 操作步骤 说明 linux 系统磁盘扩容步骤 环境信息 系统信息&#xff1a;Linux version 4.19.90-23.8.v2101.ky10.aarch64cpu信息&#xff1a;Kunpeng-920 、aarch64、64-bit、HiSilicon 前提条件 有未初始化的用户磁盘操作系统可以支持当前磁盘的…

CentOS 8 安装国内、本地YUM源

环境&#xff1a;windows 11、 VMware 17、Cent OS 8 目的&#xff1a;加快软件下载速度 1、国内YUM源安装 使用国外的源&#xff0c;速度卡到不显示 备份默认YUM源文件 [rootlocalhost ~]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# mkdir yum.bak [rootlocalho…

spring的事物

DataSourceTansactionManager Spring与JdbcTemplate或MyBatis框架集成时,提供的事务管理器. 事物的特性&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性&#xff0c;持久性 int TRANSACTION_READ_UNCOMMITTED 1; 未提交读 int TRANSACTION_READ_COMMITTED 2; …

一文秒懂|Linux字符设备驱动

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

Linux相关--笔试和面试高频

Linux RedHat公司已经宣布停止维护CentOS服务器操作系统&#xff0c;可以选择华为开源的欧拉系统、阿里开源的龙蜥系统和腾讯开源的TencentOS系统 面试 几个基本的Linux命令 pwd #查看当前绝对路径 结果/home/stu touch / vi编辑器 #创建文件 mkdir -p /home/stu/test #当…

记录仿钉钉审批流(将MySQL换成Oracle)走过的坑

需求&#xff1a;实现审批流程 在Gitee上发现了一个功能还OK的项目&#xff0c;于是就clone下来了&#xff08;如下图&#xff09; 原项目用MySQL很好启动&#xff0c;B站上作者还录制了视频&#xff0c;可以去学习 这里主要记录将MySQL换成Oracle出现的问题 首先&#xff0c…

【古月居《ros入门21讲》学习笔记】18_常用可视化工具的使用

目录 说明&#xff1a; 1. Qt工具箱 日志输出工具&#xff1a;rqt_console 绘制数据曲线&#xff1a;rqt_plot 图像渲染工具&#xff1a;rqt_image_view 综合工具&#xff1a;rqt 2. 三维可视化工具&#xff1a;Rviz Rviz启动 使用示例 3. 仿真平台&#xff1a;Gazebo…

【Openstack Train安装】四、MariaDB/RabbitMQ 安装

本章介绍了MariaDB/RabbitMQ的安装步骤&#xff0c;MariaDB/RabbitMQ仅需要在控制节点安装。 在安装MariaDB/RabbitMQ前&#xff0c;请确保您按照以下教程进行了相关配置&#xff1a; 【Openstack Train安装】一、虚拟机创建 【Openstack Train安装】二、NTP安装 【Opensta…

RK3568平台开发系列讲解(Linux系统篇)通过OF函数获取设备树节点实验

** 🚀返回专栏总目录 文章目录 一、获取获取设备树节点二、驱动程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过OF函数获取设备树节点实验 一、获取获取设备树节点 在 Linux 内核源码中提供了一系列的 of 操作函数来帮助我们获取到设备树中编写的…

Linux设置Nginx开机自启

文章目录 获取linux系统是多少位: getconf LONG_BIT获取CentOS版本: lsb_release -a获取nginx的版本: nginx -version第一步配置文件 vim /etc/rc.local最底部增加这一行&#xff1a; /usr/local/nginx/sbin/nginx 第二步注册systemctl服务 在/usr/lib/systemd/system目录…