提示授权声明:本篇文章授权活动官方亚马逊科技文章转发、改写权,包括不限于在 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/etcdio/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.gz

tar -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

datadir 保存日志快照目录默认当前工作目录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-reload

sudo systemctl start etcd

sudo 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,并在其中添加服务注册和发现的方法

<?php

namespace appcommonservice;

use EtcdClient;

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中使用:

<?php

namespace appcontroller;

use appBaseController;
use appcommonserviceEtcdService;


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,这个等以后有时间在写

原文地址:https://blog.csdn.net/qq_24694139/article/details/134678299

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_49964.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注