【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据

在分布式系统中,etcd 是一个高可用的键值存储,用于存储和共享配置信息、服务发现、协调等。向 etcd 写入数据可以通过多种方式进行,常见的方式是使用 etcd 提供的 HTTP API 或者通过客户端库来进行操作。

目录

一、使用EtcdCtl工具来写入数据

1.1、设置环境变量(可选)
cmd 复制代码
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=http://localhost:2379
1.2、使用etcdctl put写入数据
cmd 复制代码
etcdctl put <key> <value>
etcdctl put /config/db/host "192.168.1.100"
1.3、通过etcdctl put -h来查看相关帮助信息
cmd 复制代码
etcdctl put -h
NAME:
	put - Puts the given key into the store

USAGE:
	etcdctl put [options] <key> <value> (<value> can also be given from stdin) [flags]

DESCRIPTION:
	Puts the given key into the store.
	
	When <value> begins with '-', <value> is interpreted as a flag.
	Insert '--' for workaround:
	
	$ put <key> -- <value>
	$ put -- <key> <value>
	
	If <value> isn't given as a command line argument and '--ignore-value' is not specified,
	this command tries to read the value from standard input.
	
	If <lease> isn't given as a command line argument and '--ignore-lease' is not specified,
	this command tries to read the value from standard input.
	
	For example,
	$ cat file | put <key>
	will store the content of the file to <key>.

以下是 etcdctl put -h 命令帮助信息的中文翻译::

cmd 复制代码
---

### 名称:
`put` - 将给定的键值对写入存储中

### 用法:
​```bash
etcdctl put [选项] <key> <value> (<value> 也可以通过标准输入给出) [标志]
​```

### 描述:
将给定的键值对写入存储中。

- 当 `<value>` 以 `-` 开头时,`<value>` 会被解释为一个标志。
  - 使用 `--` 进行工作区处理:
  
    ```bash
    $ put <key> -- <value>
    $ put -- <key> <value>
    ```

- 如果没有通过命令行参数给出 `<value>` 且没有指定 `--ignore-value`,该命令会尝试从标准输入读取值。

- 如果没有通过命令行参数给出 `<lease>` 且没有指定 `--ignore-lease`,该命令会尝试从标准输入读取租约。

  例如:
  
  ```bash
  $ cat file | put <key>

这条命令会将文件的内容存储到 <key> 中。

选项:

  • -h, --help[=false] 显示 put 命令的帮助信息
  • --ignore-lease[=false] 使用当前的租约更新键值对
  • --ignore-value[=false] 使用当前的值更新键值对
  • --lease="0" 租约 ID(十六进制格式),将其附加到键值对
  • --prev-kv[=false] 在修改前返回之前的键值对

这个帮助信息提供了 etcdctl put 命令的所有选项和详细描述。put 命令用于将键值对存储到 etcd 中,支持从标准输入获取值,并且可以在命令中使用租约等参数。

复制代码
### 二、使用go 客户端写入数据

#### 2.1、安装 Go 客户端库

#### 2.2、示例代码

```go
func init() {
	// 初始化etcd客户端
	var err error
	cli, err = clientv3.New(clientv3.Config{
		Endpoints:   []string{"127.0.0.1:2379"}, // 替换为你的etcd集群地址
		DialTimeout: 5 * time.Second,
	})
	if err != nil {
		log.Fatal(err)
	}
}

// put 向etcd写入数据
func put(key, value string) {
	response, err := cli.Put(context.Background(), key, value)
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("write data success,response header is:%s", response.Header.String())
}

func main() {
	defer cli.Close()
	String key = "/config/db/host";
    String value = "192.168.1.100";
	put(key, value)
}

三、使用Java客户端写入数据

3.1、添加pom依赖
xml 复制代码
        <!-- https://mvnrepository.com/artifact/com.ibm.etcd/etcd-java -->
        <dependency>
            <groupId>com.ibm.etcd</groupId>
            <artifactId>etcd-java</artifactId>
            <version>0.0.24</version>
        </dependency>
3.2、写入数据示例代码
java 复制代码
        KvStoreClient client = EtcdClient.forEndpoint("localhost", 2379).withPlainText().build();


        KvClient kvClient = client.getKvClient();
        LeaseClient leaseClient = client.getLeaseClient();
        LockClient lockClient = client.getLockClient();
        // 写入数据
        String key = "/config/db/host";
        String value = "192.168.1.100";
        PutResponse result = kvClient.put(ByteString.copyFrom(key, StandardCharsets.UTF_8), ByteString.copyFrom(value, StandardCharsets.UTF_8)).sync();
        System.out.println(result);
相关推荐
惊起白鸽45038 分钟前
MySQL全量,增量备份与恢复
数据库·mysql
暮雨疏桐2 小时前
MySQL SQL Mode及其说明
数据库·sql·mysql·sql mode
Tangcan-2 小时前
【MySQL】数据库基础
数据库·mysql
蔡蓝2 小时前
Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
数据库·mysql
jstart千语2 小时前
【Redis】分布式锁的实现
数据库·redis·分布式
一把年纪学编程3 小时前
【牛马技巧】word统计每一段的字数接近“字数统计”
前端·数据库·word
极小狐3 小时前
极狐GitLab 通用软件包存储库功能介绍
java·数据库·c#·gitlab·maven
钢铁男儿4 小时前
C# 方法(可选参数)
数据库·mysql·c#
陆少枫4 小时前
MySQL基础关键_013_常用 DBA 命令
数据库·mysql
赵渝强老师4 小时前
【赵渝强老师】在PostgreSQL中使用file_fdw访问外部文件系统
数据库·postgresql