etcd分布式键-值对存储系统

什么是分布式系统:

    业务量的迅速增大,普通的单机系统无法满足要求,要么垂直扩展升级机器硬件,要么水平扩展堆廉价服务器。目前互联网领域选择了后者 水平扩展

etcd介绍:
1、etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选注、分布式锁等)
2、etcd是一个go语言编写的分布式、高可用的一致性键值存储系统
3、etcd基于Raft协议,通过日志复制的方式来保证数据的强一致性
4、etcd默认数据一经更新就落盘持久化,数据持久化存储使用WAL(write ahead log,预写式日志)格式。WAL记录了数据变化的全过程,在etcd中所有数据在提交之前都要先写入WAL中;etcd的snapshot(快照)文件存储了某一时刻etcd的所有数据,默认设置为每10000条记录做一次快照,经过快照后WAL文件即可删除

etcd的优势
1、etcd更加稳定可靠,他的唯一目标就是把分布式一致性键值存储做到极致,其更注重稳定性和扩展性
2、在服务发现的实现上,etcd使用的是节点租约(Lease),并且Group(多key);而zookeeper使用的是临时节点,临时节点存在不少问题。
3、etcd支持MVCC多版本并发控制


etcd分布式键-值对存储系统(controller)

一、安装、配置服务器

yum -y install etcd

vim /etc/etcd/etcd.conf 

二、启动、检查服务器运行情况

systemctl enable/restart etcd

netstat -tnlip|grep etcd   (2379、2380)

三、etcd服务管理

 etcdctl是管理etcd服务的工具,利用它可以实现数据的存储。

向etcd中存入一个键-值对,键为‘testkey’,值为‘liupanming’;从etcd中读取键‘testkey’所对应的值

etcdctl set testkey liupanming

etcdctl get testkey

 

‘set’表示执行存入键-值对操作;‘get’表示读取操作,通过键来读取其对应的值。

 

本文转载于网络 如有侵权请联系删除

相关文章

  • js 知识记录

    js将时间戳转为yyyy-MM-ddHH:mm:ss注意:时间戳需要是13位长度的,如果是10位长度需要乘1000functionformatDate(date){ vardate=newDate(date); varYY=date.getFullYear()+'-'; varMM=(date.getMonth()+1<10?'0'+(date.getMonth()+1):date.getMonth()+1)+'-'; varDD=(date.getDate()<10?'0'+(date.getDate()):date.getDate()); varhh=(date.getHours()<10?'0'+date.getHours():date.getHours())+':'; varmm=(date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes())+'

  • Java线程池,这篇能让你和面试官聊了半小时

    找Java工作的时候,线程池是一个必问的知识点,面试时,有的人只能讲五分钟,而有些人可以讲半个小时,差别在哪?在于知识的深度。下面几个面试高频题,你会吗?不会,赶紧收藏此博文。线程池各个参数的作用,简单阐述一下线程池工作流程。常见的线程池有哪些,分别适用于什么场景?使用无界队列的线程会导致内存飙升吗?Java线程池概念顾名思义,管理线程的池子,相比于手工创建、运行线程,使用线程池,有如下优点降低线程创建和销毁线程造成的开销提高响应速度。任务到达时,相对于手工创建一个线程,直接从线程池中拿线程,速度肯定快很多提高线程可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统稳定性,使用线程池可以进行统一分配、调优和监控Java线程池创建无论是创建何种类型线程池(FixedThreadPool、CachedThreadPool…),均会调用ThreadPoolExecutor构造函数,下面详细解读各个参数的作用publicThreadPoolExecutor(intcorePoolSize, intmaximumPoolSize, longkeepAliveTime, T

  • 跟我一起学Laravel-EloquentORM进阶部分

    关联关系OneToOne假设User模型关联了Phone模型,要定义这样一个关联,需要在User模型中定义一个phone方法,该方法返回一个hasOne方法定义的关联<?php namespaceApp; useIlluminate\Database\Eloquent\Model; classUserextendsModel { /** *Getthephonerecordassociatedwiththeuser. */ publicfunctionphone() { return$this->hasOne('App\Phone'); } }复制hasOne方法的第一个参数为要关联的模型,定义好之后,可以使用下列语法查询到关联属性了$phone=User::find(1)->phone;复制Eloquent会假定关联的外键是基于模型名称的,因此Phone模型会自动使用user_id字段作为外键,可以使用第二个参数和第三个参数覆盖return$this->hasOne('App\Phone','foreig

  • 非常适合新手的一个Python爬虫项目:打造一个英文词汇量测试脚本

    最近朋友在苦学英文,但是又不知道自己学的怎么样了,直到有一天,他找到了扇贝网,里面有个“评估你的单词量”功能非常的好,就推荐给我了!今天我们就用python做一个小的爬虫,然后自己写一个脚本来实现这个功能吧! 目标:打造一个英文词汇量测试脚本url:扇贝网工具:python3.6、pycharm、requests库思路:和网页一样,总共分三步:先来看看网页中数据,用F12开发者工具抓包就可以 为了更好的演示,这里网页缩小了。点击开始,在来看看出现了什么这里我们抓到了一个包,这个json数据中包含了所有的类别或者说是级别,一共十大类,我们点击”响应”验证下可以看到,显示内容在我们抓到的json数据中,但是0和1中的内容有的一样,有的不一样是什么鬼?不要急,我们先选择‘高考’,在抓下包看看选择高考后,网页直接给出了第二步,50个单词选择,注意,先看下抓到的json数据的真实地址还记得我们在第一步抓到的包吗?0里面就是这个真实地址最后的category的值,1里面是对应的显示在网页中的内容,好了,第二步的真实url也被我们找到规律了,那下来就是分析单词了,看看有什么规律,我们点开一个看看有几

  • 靠人工智能打造的先进搜索能帮助百度追上谷歌吗?

    据美国《商业周刊》10月17日报道,百度新进首席科学家吴恩达(AndrewNg)计划研究人工智能的子域-深度学习领域,旨在通过训练类人思维电脑提升搜索结果与计算任务。在中国,百度不仅仅是搜索引擎界的霸主,更是一种民族自豪感的来源。但在其他国家,谷歌则是当仁不让的搜索龙头,百度优势不再。尽管世界上每个国家都能使用百度,但就去年来看,谷歌创造了全世界49%的互联网广告收入,是百度创造的52亿美元(约合人民币312亿元)的十倍。ITG经纪公司的郭成刚认为,百度并不是像谷歌甚至必应那样真正严格意义上的搜索引擎。对此,百度发言人郭怡广表示:“在尽可能为每个市场提供最棒的搜索体验上,我们是十分严肃的。”百度联合创始人,现任CEO李彦宏已经决定增加科研经费,相比去年同期提高85%,达到17.4亿人民币。今年5月,李彦宏聘请了机器人与机器学习领域的著名科学家吴恩达为百度首席科学家。“掌握人工智能者,将赢得中国乃至世界互联网,而百度正在路上。”吴承恩说道。在智能手机与平板电脑时代,深度学习研究对于搜索公司来说变得越来越重要,而百度已经在这些领域落后了好几年。想要基于语音指令和图片进行准确的搜索,就必须要

  • 为什么90后,只会发说说,不会写博客了?

    最近和一个90后技术小伙伴聊天,说到一个话题,平时喜欢写博客嘛?他的回答让我惊讶,我们90后基本不接触博客,只是上去找找资料而已,我们平时更多发说说。几句玩笑的话而已,细想还是很多细节值得回味,的确博客的流行是我们80的产物,90后更多的是喜欢刷刷说说了。信息事物的变化的周期也是越来越短,越来越不可捉摸,给你思考留念的时间都变得越来越多。有点偏题了,今天的要说的主题是要不要写技术文章的事情。随着信息的发展博客固然有些落伍,但是在互联网获取一些常见知识点的介绍或者使用博客还是主要的信息来源,说说固然写的很多,很少说说里面直接写技术相关的知识点,当然笔者也见过写的,这更多的是在说说里面向博客致敬。为什么觉得技术文章难写?写技术文章,其实就是对你知识的一个梳理的过程,其实写代码是一个感觉,真正把你做过的东西用文字表达出来,这其实是一个关卡,在这一点上也是难道了好多的英雄好汉,很多人在内心里都觉得,我该写一些技术总结,但是每次敲键盘的时候,又觉得无从下手,觉得不知道从哪里下手开始去写,同时觉得写文章太浪费时间了,倒不如直接去玩玩游戏来的爽快。笔者曾经和一些著名的技术大V博主聊天,提起说博客的一

  • css 实现换肤几种方式

    说起换肤功能,前端肯定不陌生,其实就是颜色值的更换,实现方式有很多,也各有优缺点 一、可供选择的换肤 对于只提供几种主题方案,让用户来选择的,一般就简单粗暴的写多套主题 一个全局class控制样式切换,直接更改全局class <bodyclass='dark'></body> 复制 使用js去修改link的href <linkid='link_theme'href="skin.css"rel="stylesheet"type="text/css"/> <script> document.getElementById('link_theme').href='skin-dark.css' </script> 复制 二、动态色值换肤的实现 全局替换颜色值 可以参看Element-UI的换肤实现,就是先把样式中颜色全部替换后在塞到<style>标签里面 使用less的modifyVars动态修改 modifyVars方法是是基于less在浏览器中的编译来实现。所以在引入less文件的时候需要通过link方

  • mysql是如何实现mvcc的

    mvcc的概念 mvcc即多版本并发控制,是一种并发控制的策略,能让数据库在高并发下做到安全高效的读写,提升数据库的并发性能; 是一种用来解决并发下读写冲突的无锁解决方案,为事务分配单向增长时间戳,为每次修改保存一个版本,版本号与时间戳关联; 复制 可解决的问题 1、在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能 2、解决脏读、幻读、不可重复读等事务隔离问题,但是不能解决更新丢失问题 复制 前置概念 当前读 读取数据的最新版本,读取时需保证其他并发事务不能修改当前记录,会对读取的记录加锁;如insert,update,delete,forupdate等语句会走当前读 复制 快照读 读的可能并不是最新数据,可能是历史数据;要求事务隔离级别不能是串行,串行级别下快照读会转为当前读; 复制 mvcc实现的三大要素 图示: 隐式字段 数据库的每行记录除了记录显示的数据外,还会有一些隐藏字段,mvcc用到了其中三个,如下: 1.DBTRXID最后修改该条记录的事务id, 2.DBROLLPTR回滚指针,用于定位undolog中的历史记录

  • Android中加解密算法大全

    Base64编码 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,本质上是一种将二进制数据转成文本数据的方案,对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)计算其十进制值,根据该值在A--Z,a--z,0--9,+,/这64个字符中找到对应的字符,最终得到一个文本字符串。 严格来讲,Base64只能算是一个编码算法,并不是安全领域的加密算法。 标准Base64编码解码无需额外信息即完全可逆,即使你自己自定义字符集设计一种类Base64的编码方式用于数据加密,在多数场景下也较容易破解。 复制 Base64编码基本规则如下几点 标准Base64只有64个字符:英文大小写(A-Z、a-z)、数字(0-9)、加号(+)、斜杠(/)和用作后缀的等号(=); Base64是把3个字节变成4个可打印字符,所以Base64编码后的字符串一定能被4整除(不算用作后缀的等号) 等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,Base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个0就加上几个等号。显然添加等号

  • 我的博文目录整理

    从2014年8月开始在博客园写博客,至今已经积累了82篇,集中在机器学习、NLP、数据结构与算法、大数据、编程语言等方面。在此做个总结,以后还会陆续更新…… 1.机器学习 【十大经典数据挖掘算法】系列: C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN NaïveBayes CART 2.NLP 中文分词 中文分词工具thulac4j重磅发布. 【中文分词】理论篇: 【中文分词】简单高效的MMSeg. 【中文分词】隐马尔可夫模型HMM. 【中文分词】二阶隐马尔可夫模型2-HMM. 【中文分词】最大熵马尔可夫模型MEMM. 【中文分词】条件随机场CRF. 【中文分词】结构化感知器SP. 【中文分词】实践篇: 开源中文分词工具探析(一):ICTCLAS(NLPIR) 开源中文分词工具探析(二):Jieba 开源中文分词工具探析(三):Ansj 开源中文分词工具探析(四):THULAC 开源中文分词工具探析(五):FNLP 开源中文分词工具探析(六):StanfordCoreNLP 3.数据结构与算法 数据结构篇: Trie树的

  • 如何添加使用echats地图悬浮显示内容

    /初始化绘制全国地图配置 varoption={ backgroundColor:'#000', title:{ text:'Echarts3中国地图农村金融', subtext:'三级科技下乡', link:'http://www.cnblogs.com/sxz2008/', left:'center', textStyle:{ color:'#fff', fontSize:16, fontWeight:'normal', fontFamily:"MicrosoftYaHei" }, subtextStyle:{ color:'#ccc', fontSize:13, fontWeight:'normal', fontFamily:"MicrosoftYaHei" } }, tooltip:{//显示悬浮窗口 trigger:'item',//使用这个函数返回悬浮内容 formatter:function(params){ //定义一个res变量来保存最终返回的字符结果,并且先把地区名称放到里面 //varres='随机数字'+'<br/>'; varres=params.

  • 面试题汇总

    1为什么会说ELK ELK是elastic公司 www.elastic.co简称(ESTC) 提供的一套完整的日志收集以及展示的解决方案 2Nginx你一般都做什么啊 处理静态文件 负载均衡和容错(反向代理加速(无缓存)) 3Nginx也可以写页面 Nginx有自己的web端同样类似有web端的软件还有APache Tomcat 4Ansible你管理过多少台 管理过30台 5Ansible判断文件存在 File模块创建文件,执行以后返回值如果是绿色就说明文件存在 或者可以用shell语句判断和when模块配合在一起如果有的话可以返回一下来看到效果 6Ansible部署过什么 刚上手的时候部署过lnmplamp一些简单的安装,用的最常用的是zabbix-agent的部署,之后呢就是做一些优化打tag标签,handlersnotify设置一个自动调用,也就跟触发效果 7什么是动静分离 动态文件和静态文件分开处理一般是nginx处理静态,tomcat处理动态 有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jp

  • spring boot @Value 报错

    结论:  检查你编译后,target文件下的配置文件是存在,不存在会出现错误。 一般配置信息加载报错,要注意检查配置文件格式是否对,是否有引入。   我出现@Value报错的情况比较特殊。我在控制器的代码里正常使用。启动时报错注入错误。 @RestController @Data publicclassHelloController{ @Resource privateUserServiceImpluserServiceImpl; @Resource privateUserMongoRepositoryuserMongoRepository; @Value("${com.neo.title}")//这里加载配置 privateStringtitle; @GetMapping("/") publicMap<String,String>index(@RequestParam(name="name",defaultValue="world")Stringpara){ Map<String,String>ret=newHashMap<&

  • linux内核修炼之道

    华清远见·任桥伟  人民邮电2010 内核不学,岂能理解?今天开始正式学习内核原理  linux发行版本Mint.  cat /etc/issue    # sudolsb_release-a cat/etc/lsb-release cat/proc/version  uname-a  -r仅内核版本  'Ipresumeso   一个cat也有这么多用处. 简略版: cat主要有三大功能:1.一次显示整个文件。$cat filename2.从键盘创建一个文件。$cat > filename    只能创建新文件,不能编辑已有文件.3.将几个文件合并为一个文件:$cat file1 file2>file 参数:-n或--number由1开始对所有输出的行数编号-b或--number-nonblank和-n相似,只不过对于空白行不编号-s或--

  • day4-叶卓睿

    T1CF607ECrossSum 有n条直线,这些直线有若干的交点,求这些交点到一给定点的距离的前m小的和。 n<=5e4,m<=3e7; 先二分一个半径,以给定点为圆心,r为半径作出一个圆,使得这个圆里恰好包住m个点, 之后统计答案即可。 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<string> #include<cstdio> #include<vector> #include<queue> #include<cmath> #include<set> #include<map> usingnamespacestd; typedeflonglongLL; constintN=2e5+10; constlongdoubleeps=1e-8; inlineintread() { registerintx=0,f=0;re

  • kubernetes Pod驱逐迁移drain用法

    example 设置node不可调度 $kubectlcordon172.16.21.26 $kubectldrainfoo--force $kubectldrainfoo--grace-period=900 $kubectldrain172.16.21.26--delete-local-data--ignore-daemonsets--force 复制 参数说明: –delete-local-data:即使pod使用了emptyDir也删除 –ignore-daemonsets:忽略deamonset控制器的pod,如果不忽略,deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,会成为死循环; –force:不加force参数只会删除该NODE上由ReplicationController,ReplicaSet,DaemonSet,StatefulSetorJob创建的Pod,加了后还会删除’裸奔的pod’(没有绑定到任何replicationcontroller) --pod-selector=""Labelselectortofilterpodsont

  • java中流关闭及带资源的try语句(try-with-resource)作用

    一、IO流关闭顺序 代码示例: publicstaticvoidsaveBase64(Stringdata,Stringpath,Longname){ OutputStreamWriterops=null; BufferedWriterbw=null; Filefile; try{ file=newFile(path,name+".txt"); ops=newOutputStreamWriter(newFileOutputStream(file),StandardCharsets.UTF_8); bw=newBufferedWriter(ops); bw.append("data:image/jpg;base64,"+data); }catch(Exceptione){ LOG.error(e.getMessage(),e); e.printStackTrace(); }finally{ try{if(bw!=null){ bw.flush(); bw.close(); } }catch(Exceptione){ LOG.error(e.getMessage(),e); e.prin

  • vc6.0调试

    调试快捷键: 逐过程调试—F10        逐语句调试—F11跳到光标处—Ctrl+F10   跳出本循环—Shift+F11   设定断点—F9    删除所有断点—Ctrl+Shift+F9            开始编译F7    重新编译–Ctrl+F7                    开始调试--F5     停止调试—Shift+F5    重新

  • Vue3+Ts+ElementPlus:首次进入页面,table不显示数据

    问题:第一次打开页面,第一次点击模块的时候不显示任何数据,需要切换一下模块回来.才会显示内容 原理 不重要 解决办法 网上主流办法是,3种刷新,巴拉巴拉.我实验了.我都不好使 我解决的办法是 1.首先:定位你的获取数据方法 这个是我的. 你也应该也有这么一个方法 constdataList=store.getters[`companyInfoModule/getCompanyInfoList`];   2.把这个方法使用computed包裹 letdataList=computed(()=>{  returnstore.getters[`companyInfoModule/getCompanyInfoList`]; });      3.然后再把datalist放到table标签中,就可以了

  • LG4287双倍回文(Manacher)

    LG4287双倍回文 解题思路 据说本体有很多乱搞方法,但是可以用\(O(n)\)得manacher解决。 我们按照正常的manacher做,我们要验证\(i\)这个位置是否可以为右半回文串的中心位置。由于右半回文串长度为偶数,所以中心位置只可能为#字符。我们找到位置\(i\)关于\(mid\)的对称点\(j\)。如果以\(i\)为中心的最长回文串和以\(j\)为中心的最长回文串有交集,那么\([j,i]\)这一段子串去掉#就可以形成一个所求的字符串。 我们注意到,还有一些限制条件,例如\(mid\)是#字符。所以我们可以考虑只对为#的字符跑manacher。 时间复杂度为\(O(n)\)。实测跑得飞快。 代码 //Don'tactlikealoser. //Thiscodeiswrittenbyhuayucaiji //Youcanonlyusethecodeforstudyingorfindingmistakes //Or,you'llbepunishedbySakyamuni!!! #include<bits/stdc++.h> usingnamespacestd;

  • 块存储、文件存储、对象存储的区别

    参考文章链接: 一篇文章让你理解Ceph的三种存储接口(块设备、文件系统、对象存储):https://blog.csdn.net/wangmingshuaiguo/article/details/92628036 Ceph介绍及原理架构分享:https://www.jianshu.com/p/cc3ece850433 RedHatCeph存储—《深入理解Ceph架构》:http://ceph.org.cn/2018/06/29/red-hat-ceph%E5%AD%98%E5%82%A8-%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3ceph%E6%9E%B6%E6%9E%84%E3%80%8B/ cephIO切割成对象和对象名的组成(块存储):https://blog.csdn.net/a1454927420/article/details/78134554 三种存储类型比较-文件、块、对象存储:https://blog.csdn.net/sinat_27186785/article/details/52032431  

相关推荐

推荐阅读