K8s之Etcd
Etcd是一个开源的、高可用的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现。etcd与zookeeper相比算是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeeper的paxos简单。Etcd基于Go语言实现。
- 简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用。
- 安全:可选SSL客户认证机制。
- 快速:每个实例每秒支持一千次写操作。
- 可信:使用Raft算法充分实现了分布式系统数据的可用性和一致性。
Etcd架构图如下:
从etcd的架构图中我们可以看到,etcd主要分为四个部分。
- HTTP Server: 用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。
- Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。
- Raft:Raft强一致性算法的具体实现,是etcd的核心。
- WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容。
通常,一个用户的请求发送过来,会经由HTTP Server转发给Store进行具体的事务处理
如果涉及到节点的修改,则交给Raft模块进行状态的变更、日志的记录,然后再同步给别的etcd节点以确认数据提交
最后进行数据的提交,再次同步。
ETCD参数说明:
2379端口用于外部通信,2380用于内部通信
- --name
- etcd集群中的节点名,这里可以随意,可区分且不重复就行
- --listen-peer-urls
- 监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等)
- --initial-advertise-peer-urls
- 建议用于节点之间通信的url,节点间将以该值进行通信。
- --listen-client-urls
- 监听的用于客户端通信的url,同样可以监听多个。
- --advertise-client-urls
- 建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信。
- --initial-cluster-token etcd-cluster-
- 节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响。
- --initial-cluster
- 也就是集群中所有的initial-advertise-peer-urls 的合集
- --initial-cluster-state new
- 新建集群的标志
--data-dir
指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件
集群模式配置示例:
- vim /etc/systemd/system/etcd.service
- [Unit]
- Description=Etcd Server
- After=network.target
- After=network-online.target
- Wants=network-online.target
- [Service]
- Type=notify
- WorkingDirectory=/opt/etcd/
- User=etcd
- # set GOMAXPROCS to number of processors
- ExecStart=/usr/bin/etcd \
- --name=etcd1 \
- --cert-file=/etc/kubernetes/ssl/etcd.pem \
- --key-file=/etc/kubernetes/ssl/etcd-key.pem \
- --peer-cert-file=/etc/kubernetes/ssl/etcd.pem \
- --peer-key-file=/etc/kubernetes/ssl/etcd-key.pem \
- --trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
- --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
- --initial-advertise-peer-urls=https://172.16.1.64:2380 \
- --listen-peer-urls=https://172.16.1.64:2380 \
- --listen-client-urls=https://172.16.1.64:2379,http://127.0.0.1:2379 \
- --advertise-client-urls=https://172.16.1.64:2379 \
- --initial-cluster-token=k8s-etcd-cluster \
- --initial-cluster=etcd1=https://172.16.1.64:2380,etcd2=https://172.16.1.65:2380,etcd3=https://172.16.1.66:2380 \
- --initial-cluster-state=new \
- --data-dir=/opt/etcd/
- Restart=on-failure
- RestartSec=
- LimitNOFILE=
- [Install]
- WantedBy=multi-user.target
分别启动所有etcd集群节点的服务
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd
systemctl status etcd
# 如果报错 请使用
journalctl -f -t etcd 和 journalctl -u etcd 来定位问题
验证etcd集群
查看集群状态:
- etcdctl --endpoints=https://172.16.1.64:2379,https://172.16.1.65:2379,https://172.16.1.66:2379 \
- --cert-file=/etc/kubernetes/ssl/etcd.pem \
- --ca-file=/etc/kubernetes/ssl/ca.pem \
- --key-file=/etc/kubernetes/ssl/etcd-key.pem \
- cluster-health
- member 35eefb8e7cc93b53 is healthy: got healthy result from https://172.16.1.66:2379
- member 4576ff5ed626a66b is healthy: got healthy result from https://172.16.1.64:2379
- member bf3bd651ec832339 is healthy: got healthy result from https://172.16.1.65:2379
- cluster is healthy
查看集群成员:
- etcdctl --endpoints=https://172.16.1.64:2379,https://172.16.1.65:2379,https://172.16.1.66:2379\
- --cert-file=/etc/kubernetes/ssl/etcd.pem \
- --ca-file=/etc/kubernetes/ssl/ca.pem \
- --key-file=/etc/kubernetes/ssl/etcd-key.pem \
- member list
- 35eefb8e7cc93b53: name=etcd3 peerURLs=https://172.16.1.66:2380 clientURLs=https://172.16.1.66:2379 isLeader=false
- 4576ff5ed626a66b: name=etcd1 peerURLs=https://172.16.1.64:2380 clientURLs=https://172.16.1.64:2379 isLeader=true
- bf3bd651ec832339: name=etcd2 peerURLs=https://172.16.1.65:2380 clientURLs=https://172.16.1.65:2379 isLeader=false
K8s之Etcd的更多相关文章
- k8s部署etcd集群
1.k8s部署高可用etcd集群时遇到了一些麻烦,这个是自己其中一个etcd的配置文件 例如: [Unit] Description=Etcd Server After=network.target ...
- k8s的etcd
etcd是一个高可用的分布式键值(key-value)数据库.etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现. etcd是一个服务发现系统,具备以下的特点: 简单:安装配置简单, ...
- 如何查看k8s存在etcd中的数据(转)
原文 https://yq.aliyun.com/articles/561888 一直有这个冲动, 想知道kubernetes往etcd里放了哪些数据,是如何组织的. 能看到,才有把握知道它的实现和细 ...
- 查看k8s中etcd数据
#查看etcd pod kubectl get pod -n kube-system | grep etcd #进入etcd pod kubectl exec -it -n kube-system e ...
- k8s部署etcd数据库集群
⒈下载 https://github.com/etcd-io/etcd/releases ⒉解压 tar -zxvf etcd-v3.3.12-linux-amd64.tar.gz ⒊移动可执行文件及 ...
- k8s基础 etcd参数
name 节点名称data-dir 指定节点的数据存储目录listen-peer-urls 监听URL,用于与其他节点通讯listen-client-urls 对外提供服务的地址:比如 http:// ...
- k8s记录-etcd集群部署(三)
https://blog.csdn.net/fy_long/article/details/86542872 1)程序准备tar xvf etcd-v3.3.11-linux-amd64.tar.gz ...
- k8s集群部署之环境介绍与etcd数据库集群部署
角色 IP 组件 配置 master-1 192.168.10.11 kube-apiserver kube-controller-manager kube-scheduler etcd 2c 2g ...
- K8S从入门到放弃系列-(3)部署etcd集群
摘要:etcd 是k8s集群最重要的组件,用来存储k8s的所有服务信息, etcd 挂了,集群就挂了,我们这里把etcd部署在master三台节点上做高可用,etcd集群采用raft算法选举Leade ...
随机推荐
- React Native backgroundColor 的颜色值
React Native 的 css 跟 web开发中css还是很相似的,其中 backgroundColor 支持的颜色值与 css 一致,为方便查找写在这里. 其他样式可以参考 CSS 样式网站 ...
- 框架tensorflow3
tensorflow3 tensorflow 可视化好帮手: tf.train.SummaryWriter报错,改为tf.summary.FileWriter 软件包安装yum install sql ...
- 解决Myeclipse通过svn导入项目后,项目直接报错问题
在使用Myeclipse2015通过SNV导入项目后,项目直接报错,如下图: 点开后报错详细信息如下: Multiple markers at this line - The type java.la ...
- mvn package出现No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
配置java环境变量时偷懒,没有定义%JAVA_HOME%,应该先定义这个变量,然后在path中新建%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin
- 集合总结四(LinkedHashMap的实现原理)
一.概述 按照惯例,先看一下源码里的第一段注释: Hash table and linked list implementation of the Map interface, with predic ...
- 安装包安装npm
在阿里云机器上centos7安装npm可以直接yum安装,然后基于镜像的时候安装不了,直接使用安装包安装,记录一下: 官网下载地址:https://nodejs.org/en/download/ #! ...
- SpringData JPA框架使用时出现JSON循环依赖解决方案
困扰许久的问题终于解决了,之前项目太赶,没有深入学习解决,不甘心,今天再次搭起架子试试,哈哈,终于解决! @ManyToOne(cascade={CascadeType.MERGE,CascadeTy ...
- 使用setup.py安装python包和卸载python包的方法
使用setup.py安装python包和卸载python包的方法 记录安装后文件的路径 python setup.py install --record files.txt删除这些文件 cat fil ...
- phpcms调用语句
title 标题:url 链接地址:thumb缩略图 :先调用moreinfo="1" content 内容: {php list($copyfrom) = explode('| ...
- Java中的内存泄露的几种可能
Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏. 长生命周期的对象持有短生命周期对象的引用就很可能发 ...