etcd入门之安装部署

1 单点部署

1.1 安装

确认一下linux操作系统内核版本,版本号需要大于3.10

$ uname -a
Linux  4.14.0_1-0-0-45 #2 SMP Tue Oct 19 18:27:28 CST 2021 x86_64 x86_64 x86_64 GNU/Linux

直接从官网下载相应的二进制文件包etcd-v3.5.0-linux-amd64.tar.gz,并建立相应的工作目录结构

$ mkdir etcd
$ cp etcd-v3.5.0-linux-amd64.tar.gz ./etcd
$ cd ./etcd
$ tar -xzf etcd-v3.5.0-linux-amd64.tar.gz
$ mkdir -p bin conf log data
$ cp etcd-v3.5.0-linux-amd64/etcd ./bin && cp etcd-v3.5.0-linux-amd64/etcdctl ./bin && cp etcd-v3.5.0-linux-amd64/etcdutl ./bin

查看一下etcd的版本

$ ./bin/etcd --version
etcd Version: 3.5.0
Git SHA: 946a5a6f2
Go Version: go1.16.3
Go OS/Arch: linux/amd64

1.2 启动

1.2.1 前台启动

只是简单临时测试试用,可以直接启动

$ ./bin/etcd

也可以指定启动参数, --name为节点取一个名字,--log-level指定打印日志的级别

$ ./bin/etcd --name=etcd-cnlab0 --log-level=info

启动参数也可以放到配置文件中进行统一管理,然后通过--config-file启动参数指定启动的配置文件

$ cat conf/etcd.yaml

# 节点名字
name: etcd-cnlab0
# etcd数据存储目录
data-dir: ./data
# 接收客户端连接的服务端点
listen-client-urls: http://0.0.0.0:2379
./bin/etcd --config-file=./conf/etcd.yaml

1.2.2 后台启动

$ nohup ./bin/etcd --config-file=conf/etcd.yaml 2>&1 1>log/etcd.log &

1.2.3 systemd服务启动

简单测试时上面两种方式启动非常方便快捷,线上生产环境倾向于配置成系统服务

制作一个etcd.service文件:

$ sudo su -
# cd /usr/lib/systemd/system
# vim etcd.service

[Unit]
Description=Etcd Server
# 启动etcd服务后,需要启动network.target服务
After=network.target

[Service]
# 服务类型
Type=simple
# 工作目录
WorkingDirectory=/home/work/etcd
# 服务启动目录
ExecStart=/home/work/etcd/bin/etcd --config-file=/home/work/etcd/conf/etcd.yaml
# 服务启动用户名
User=work
# 服务启动组
Group=work
PIDFile=/home/work/etcd/etcd.pid
# 服务失败后重启服务
Restart=on-failure
# 服务运行打开的文件句柄数
LimitNOFILE=65536

[Install]
# 系统以多用户模式启动时自动启动本服务
WantedBy=multi-user.target

然后可以使用systemctl系统命令管理了etcd服务了

# 查看文件内容
# systemctl cat etcd.service

# 服务还未使能
# systemctl list-unit-files --type=service | grep etcd
etcd.service                                  disabled

# 重新加载服务文件
# systemctl daemon-reload

# 使能自启动
# systemctl enable etcd.service

# 启动服务
# systemctl start etcd.service

其他的几个管理命令

# 关闭服务
# systemctl stop etcd.service

# 重启服务
# systemctl restart etcd.service

# 显示服务的状态
# systemctl status etcd.service

# 在开机时不启动服务
# systemctl disable etcd.service

# 查看服务是否开机启动
# systemctl is-enabled etcd.service

# 查看启动失败的服务
# systemctl --failed | grep etcd

1.2.4 配置logrotate

配置logrotate,对etcd日志文件进行切割,并限制日志文件最大大小

/etc/logrotate.d/目录下创建etcd服务的logrotate的配置文件:

/home/work/etcd/log/*.log {
        # 切割周期为天
        daily
        # 最多保留10个文件
        rotate 10
        # 切割后的文件名添加日期后缀
        dateext
        # 日期格式
        dateformat -%Y%m%d
        # 切割后文件的后缀
        extension log
        # 如果日志文件不存在,不报错
        missingok
        # 日志文件大小为50M,超过50M后进行切割
        size 50M
        compress
        delaycompress
        notifempty
        # 文件权限,user,group
        create 0644 work work
        sharedscripts
        # 切割后执行的命令,让etcd重新加载配置
        postrotate
            /usr/bin/killall -HUP etcd
        endscript
}

1.3 验证

查看启动的进程和端口

# ps -ef | grep etcd
work      3000 25754  0 15:14 pts/0    00:00:00 ./bin/etcd --name=etcd-cnlab0 --log-level=info

# lsof -i :2379
COMMAND  PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
etcd    3000 work    8u  IPv4 2434566770      0t0  TCP localhost:2379 (LISTEN)
etcd    3000 work   13u  IPv4 2434581997      0t0  TCP localhost:59605->localhost:2379 (ESTABLISHED)
etcd    3000 work   14u  IPv4 2434569656      0t0  TCP localhost:2379->localhost:59605 (ESTABLISHED)

# lsof -i :2380
COMMAND  PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
etcd    3000 work    7u  IPv4 2434566767      0t0  TCP localhost:2380 (LISTEN)

查看服务端点状态

$ ./bin/etcdctl endpoint status --cluster -w table
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|       ENDPOINT        |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://localhost:2379 | 8e9e05c52164694d |   3.5.0 |   20 kB |      true |      false |         2 |          4 |                  4 |        |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

查看服务端点健康情况

$ ./bin/etcdctl endpoint health --cluster -w table
+-----------------------+--------+------------+-------+
|       ENDPOINT        | HEALTH |    TOOK    | ERROR |
+-----------------------+--------+------------+-------+
| http://localhost:2379 |   true | 2.059608ms |       |
+-----------------------+--------+------------+-------+

查看成员

$ ./bin/etcdctl member list
8e9e05c52164694d, started, etcd-cnlab0, http://localhost:2380, http://localhost:2379, false

写入和读取数据

$ ./bin/etcdctl put key1 hello
OK
$ ./bin/etcdctl --endpoints=http://127.0.0.1:2379 get key1
key1
hello

2 集群部署

假设集群有三个节点,服务ip分别为10.131.21.1110.131.21.1210.131.21.13,为这三个节点分别创建相应的配置文件

2.1 节点配置

节点1(10.131.21.11)配置文件内容:

$ cat conf/etcd.yaml

# 节点名字,集群内唯一
name: etcd-cnlab0

# 数据存储目录
data-dir: ./data

# 日志文件配置
# logger: zap
log-outputs: ['./log/etcd.log']
# log-level: info

# 客户端连接相关配置
# 服务监听端点
listen-client-urls: http://0.0.0.0:2379
# 向客户端发布的服务端点
advertise-client-urls: http://10.131.21.11:2379

# 集群相关配置
# 监听集群其他节点连接的端点
listen-peer-urls: http://0.0.0.0:2380
# 向集群其他节点发布的服务端点
initial-advertise-peer-urls: http://10.131.21.11:2380
# 集群成员的名字以及服务端点列表,名字与每个节点配置的name字段值对应
initial-cluster: etcd-cnlab0=http://10.131.21.11:2380,etcd-cnlab1=http://10.131.21.12:2380,etcd-cnlab2=http://10.131.21.13:2380
# 集群标识token,可以认为是集群名字
initial-cluster-token: etcd-cnlab
# 创建一个新的集群。如果data-dir目录下的数据属于另外一个集群,则无法启动
inital-cluster-state: new

节点2(10.131.21.12)配置文件内容:

$ cat conf/etcd.yaml

name: etcd-cnlab1
data-dir: ./data
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://10.131.21.12:2379
listen-peer-urls: http://0.0.0.0:2380

initial-advertise-peer-urls: http://10.131.21.12:2380
initial-cluster: etcd-cnlab0=http://10.131.21.11:2380,etcd-cnlab1=http://10.131.21.12:2380,etcd-cnlab2=http://10.131.21.13:2380
initial-cluster-token: etcd-cnlab
inital-cluster-state: new

节点3(10.131.21.13)配置文件内容:

$ cat conf/etcd.yaml

name: etcd-cnlab2
data-dir: ./data
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://10.131.21.13:2379
listen-peer-urls: http://0.0.0.0:2380

initial-advertise-peer-urls: http://10.131.21.13:2380
initial-cluster: etcd-cnlab0=http://10.131.21.11:2380,etcd-cnlab1=http://10.131.21.12:2380,etcd-cnlab2=http://10.131.21.13:2380
initial-cluster-token: etcd-cnlab
inital-cluster-state: new

2.2 启动三个节点

$ ./bin/etcd --config-file=conf/etcd.yaml

2.3 验证

$ ./bin/etcdctl endpoint health --cluster -w table
+--------------------------+--------+------------+-------+
|         ENDPOINT         | HEALTH |    TOOK    | ERROR |
+--------------------------+--------+------------+-------+
| http://10.131.21.11:2379 |   true | 1.405365ms |       |
| http://10.131.21.12:2379 |   true | 2.106704ms |       |
| http://10.131.21.13:2379 |   true | 2.257057ms |       |
+--------------------------+--------+------------+-------+
$ ./bin/etcdctl member list
2d3298f7865acc32, started, etcd-cnlab1, http://10.131.21.12:2380, http://10.131.21.12:2379, false
71e4f8695d490d37, started, etcd-cnlab0, http://10.131.21.11:2380, http://10.131.21.11:2379, false
c2a413a1e752b148, started, etcd-cnlab2, http://10.131.21.13:2380, http://10.131.21.13:2379, false
$ ./bin/etcdctl endpoint status --cluster -w table
+--------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|         ENDPOINT         |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+--------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://10.131.21.12:2379 | 2d3298f7865acc32 |   3.5.0 |   20 kB |     false |      false |         2 |         10 |                 10 |        |
| http://10.131.21.11:2379 | 71e4f8695d490d37 |   3.5.0 |   20 kB |      true |      false |         2 |         10 |                 10 |        |
| http://10.131.21.13:2379 | c2a413a1e752b148 |   3.5.0 |   20 kB |     false |      false |         2 |         10 |                 10 |        |
+--------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容