分布式部署

分布式存储ceph部署(2)

坚强是说给别人听的谎言 提交于 2020-02-29 11:11:54
一、部署准备: 准备5台机器(linux系统为centos7.6版本),当然也可以至少3台机器并充当部署节点和客户端,可以与ceph节点共用: 1台部署节点(配一块硬盘,运行ceph-depoly) 3台ceph节点(配两块硬盘,第一块为系统盘并运行mon,第二块作为osd数据盘) 1台客户端(可以使用ceph提供的文件系统,块存储,对象存储) (1)所有ceph集群节点(包括客户端)设置静态域名解析; 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.253.135 controller 192.168.253.194 compute 192.168.253.15 storage 192.168.253.10 dlp (2)所有集群节点(包括客户端)创建cent用户,并设置密码,后执行如下命令: useradd cent && echo "123" | passwd --stdin cent echo -e 'Defaults:cent !requiretty\ncent ALL = (root) NOPASSWD:ALL

分布式事物理解

我的未来我决定 提交于 2020-02-29 08:43:35
1 XA/JTA 协议 这种分布式事物都要求数据库提拱支持,也就是常说的XA。 XA一般有二阶断提交和三阶断提交两种。 JTA是JAVA是针对XA开发的一套接口,目前有一些开源软件有JTA进行实现。比如:atomiko。 第一步:向两个数据执行SQL语句 第二步:JTA执行预提交 第三步: 预提交都成功就执行commit,只要有一个失败就执行rollback。 为什么会有三阶断? 降低失败的概率:因为同时commit,如果因为网络问题,或者tomcat本身挂掉了,那么三阶断的commit就不会执行,当然要会有一个问题,三阶断的commit也失败了怎么办?所以说它的最终一致性不是100%,只能99.999%,对于公司够用了。剩下的可以允许人工处理。 2 TCC 代表 tcc-transaction。 tcc是针对服务,不针对数据库。目的一样,最终D一致性。TCC的try阶断相当于一个软状态。对于库存,相当于冻结状态。TCC的要求是每个要参与分布式的服务都需要实现一个TCC的接口,提供try,confirm,cancel方法。也有一个事物协调器,类似JTA。由它来执行confirm,cancel方法。是不是与JTA很像。 3 AT 典型代表seata。 这种分布式事物对数据库,服务都没有额外要求。但是它要单独部署一个事物协调器。它主要是解决微服务之间的分布式事物

ZooKeeper的典型应用场景

☆樱花仙子☆ 提交于 2020-02-28 21:12:12
ZooKeeper是一个高可用的分布式数据管理与协调框架 ZAB算法的实现,很好的保证了分布式系统数据一致性 数据发布/订阅 数据发布/订阅系统,即所谓 配置中心 发布者发布数据到ZooKeeper的一系列节点上,供订阅者订阅,达到动态更新数据的目的 实现数据的集中式管理和动态更新 发布/订阅系统一般有 推(Push) 和 拉(Pull) 两种模式 推(Push): 服务端主动将数据推送给客户端 拉(Pull): 客户端主动去服务端拉取最新数据,一般客户端采取定时轮询的策略 ZooKeeper才去的是 推拉结合的策略 客户端向服务端注册需要关注的节点,服务端数据发生变化的时候向客户端 推送watcher事件通知 , 客户端再主动去服务端拉取数据 负载均衡 常见的计算机网络技术,对多台计算机、CPU、磁盘驱动器等分配负载; 达到优化资源使用、最小化响应时间、最大化吞吐率、避免过载的目的 分为软负载和硬负载;ZooKeeper属于软件负载 比较典型的是DNS 服务: DNS是(Domain Name System)域名系统的缩写 可以看做是一个超大规模的分布式映射表(域名-->IP),方便人们通过域名访问互联网站点 实际开发中通常采用本地host 绑定来实现域名解析 基于ZooKeeper实现的动态域名解析方案(DDNS :Dynamic DNS): 域名解析由每个应用自己解决;

zookeeper实现分布式任务调度系统

喜你入骨 提交于 2020-02-28 20:48:07
目前项目采用nginx+tomcat来做负载均衡,缺少一个分布式任务调度配置。任务调度在整个系统中是单点故障。为了解决这个问题,研究了一下zookeeper和redis。大家一致的解决方案是用分布式锁。通过zookeeper或者redis来构建一个锁实现。所有系统节点都能获取到这个锁的状态,作为一个共享锁,为系统调度提供分布式部署。 因为我的系统架构是spring架构。为了减少代码对系统的侵入,扩展spring的任务调度。将分布式任务调度机制写入自定义任务调度中。 <task:scheduled-tasks scheduler="zkScheduleManager"> <task:scheduled ref="taskObj" method="print" fixed-rate="5000"/> </task:scheduled-tasks> zkScheduleManager继承spring的 org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; 在各个调度方法中写入分布式任务调度机制。 代码量比较大,下边说一下思路,后续把代码补上。 zookeeper维护server task两个文件夹。server存放连接的节点,task存放注册的任务 为了防止羊群效应每个服务器上维护一个EPHEMERAL

关于数据库分布式架构的一些想法。

余生颓废 提交于 2020-02-28 20:42:49
最近一段时间在研究数据库的分布式部署,但是并不是所有的数据库本身都支持分布式,那么怎么办呢。 本人自己没有用过分布式的数据库,根据自己的想到一种简单分布式的架构,来进行分布式的部署。 现在先上图, 大概的想法是在数据库外面多加一次 分布式引擎和引擎数据库,来实现对多个数据库的管理, 首先我们来说一下此种方案的 可行性 ,它是基于原来数据库的基础上在搭建平行的数据库来分摊压力,而分布式引擎的作用则是处理主程序对数据库的请求,并返回请求的结果的, 此种方案的难点和核心点在于分库,依据什么来分库会影响到最终搭建成的系统的运行效率,一个好的依据可以把原来的压力平均分摊给各个数据库( 最好情况 ),而一个差的依据会导致压力集中到分布式引擎,导致压力剧增,运行效率和承受压力比原来还大, 在下以为分库的依据有以下几点需要注意的地方, 1.分开的数据库数据要平均,尽量每个数据库的数据量是相近的。 2. 面向客户的数据尽量是连续,即主程序一次查询出来面向客户的数据是从1个或者2个数据库就能查询出来的,也不是是1个表的数据只存在其中的一个数据库中,而是面向客户的数据只是查询分页的20条至50条直接,要尽量保证这些数据是在1个数据库就能全取出来的。 3.有业务关联性的数据最好都放在一个数据库中,比如这是一个管理系统,那么本系统的流程中的所有相关数据最好是放在一个库中。 4

简单了解分布式系统

别等时光非礼了梦想. 提交于 2020-02-28 12:05:04
随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本文主要简单介绍了分布式系统的概念、分布式系统的特点、常用的分布式方案以及分布式和集群的区别等。 一、集中式系统 在学习分布式之前,先了解一下与之相对应的集中式系统是什么样的。 集中式系统用一句话概括就是:一个主机带多个终端。终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行。现在的银行系统,大部分都是这种集中式的系统,此外,在大型企业、科研单位、军队、政府等也有分布。集中式系统,主要流行于上个世纪。 集中式系统的最大的特点就是部署结构非常简单,底层一般采用从IBM、HP等厂商购买到的昂贵的大型主机。因此无需考虑如何对服务进行多节点的部署,也就不用考虑各节点之间的分布式协作问题。但是,由于采用单机部署。很可能带来系统大而复杂、难于维护、发生单点故障(单个点发生故障的时候会波及到整个系统或者网络,从而导致整个系统或者网络的瘫痪)、扩展性差等问题。 二、分布式系统(distributed system) 在《分布式系统概念与设计》一书中,对分布式系统做了如下定义: 分布式系统是一个硬件或软件组件分布在不同的网络计算机上

分布式集群架构学习笔记

为君一笑 提交于 2020-02-28 03:09:21
分布式和集群 分布式和集群是不⼀样的,分布式⼀定是集群,但是集群不⼀定是分布式(因为集群就是多个实例⼀起 ⼯作,分布式将⼀个系统拆分之后那就是多个实例;集群并不⼀定是分布式,因为复制型的集群不是拆 分⽽是复制) 第⼀部分 ⼀致性Hash算法 Hash算法,⽐如说在安全加密领域MD5、SHA等加密算法,在数据存储和查找⽅⾯有Hash表等, 以上 都应⽤到了Hash算法。 为什么需要使⽤Hash? Hash算法较多的应⽤在数据存储和查找领域,最经典的就是Hash表,它的查询效率⾮常之⾼,其中的 哈希算法如果设计的⽐较ok的话,那么Hash表的数据查询时间复杂度可以接近于O(1),示例 需求:提供⼀组数据 1,5,7,6,3,4,8,对这组数据进⾏存储,然后随便给定⼀个数n,请你判断n是否存在 于刚才的数据集中? list:List[1,5,7,6,3,4,8] // 通过循环判断来实现 for(int element: list) { if(element == n) { 如果相等,说明n存在于数据集中 } } 以上这种⽅法叫做顺序查找法 :这种⽅式我们是通过循环来完成,⽐较原始,效率也不⾼ ⼆分查找:排序之后折半查找,相对于顺序查找法会提⾼⼀些效率,但是效率也并不是特别好 我能否不循环!不⼆分!⽽是通过⼀次查询就把数据n从数据集中查询出来???可以! 定义⼀个数组,数组⻓度

Zookeeper知识梳理

丶灬走出姿态 提交于 2020-02-27 13:23:31
转载自: https://hadyang.github.io/interview/docs/architecture/distributed/zk/ 分布式应用 分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说, 对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成 。 通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为 集群 ,而在集群中运行的每台机器被称为 节点 。 分布式应用的优点 可靠性:单个或几个系统的故障不会使整个系统出现故障。 可扩展性:可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。 透明性:隐藏系统的复杂性,并将其显示为单个实体/应用程序。 分布式应用的挑战 竞争条件:两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。 死锁:两个或多个操作等待彼此无限期完成。 不一致:数据的部分失败。 ZooKeeper基础 Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据

服务端高并发分布式架构演进之路

蹲街弑〆低调 提交于 2020-02-27 02:28:17
1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。 特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径 2. 基本概念 在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍: 分布式 系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上 高可用 系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性 集群 一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能够自动的接替它继续提供服务,这时候说明集群具有高可用性 负载均衡 请求发送到系统时,通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的 正向代理和反向代理 系统内部要访问外部网络时

开源分布式中间件 DBLE 快速入门指南

强颜欢笑 提交于 2020-02-26 23:00:22
GitHub:https://github.com/actiontech/dble 官方中文文档:https://actiontech.github.io/dble-docs-cn/ 一、环境准备 DBLE项目资料 安装JDK环境 二、安装DBLE 三、配置DBLE 应用场景一:数据拆分 应用场景二:读写分离 四、总结 环境准备 DBLE 项目资料 DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus” ;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持; DBLE官方网站: https://opensource.actionsky.com 可以详细了解DBLE的背景和应用场景,本文不涉及到的细节都可在官方文档获得更细节都信息;对于刚了解到同学,可以以本文为快速入门基础 DBLE 官方项目: https://github.com/actiontech/dble 如对源码有兴趣或者需要定制的功能的可以通过源码编译安装 DBLE 下载地址: https://github.com/actiontech/dble/releases DBLE 官方社区交流群 :669663113 安装 JDK 环境 DBLE 是使用 java 开发的,所以启动 DBLE 需要先在机器上安装 java 版本 1.8 或以上,并且确保 JAVA_HOME