MySQL整体逻辑架构

MySQL 整体逻辑架构

非原创-记录下

包括

  • MySQL整体逻辑架构
  • 查询执行流程
  • SQL解析顺序

MySQL整体逻辑架构(MySQL`s Logical Architecture)

![MySQL`s Logical Architecture](./images/mysql/logic1.jpg)


Ambari 插件开发笔记

Ambari插件开发

Apache Ambari项目旨在通过开发用于配置,管理和监控Apache Hadoop集群的软件,使Hadoop管理更简单。Ambari提供了一个直观的,易于使用的Hadoop管理Web UI,由其RESTful API支持。但有时候有一些自定义非官方的需求,这时就需要基于ambari做二次开发了。

Ambari是支持服务扩展的,只需要,编写自定义服务相关配置、脚本,然后扔到它的资源目录,重启服务器就可以了。听起来很简单。它的服务组织结构是分Stack / Service /Component 3层的 。

开发的一个java 服务插件定义目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[daxiang@ark1 common-services]$ pwd
/var/lib/ambari-server/resources/common-services
[daxiang@ark1 common-services]$ tree ARK_DATA_API/
ARK_DATA_API/
└── 0.0.1
├── alerts.json
├── configuration
│   ├── ark-data-api-env.xml
│   └── ark-data-api-server.xml
├── metainfo.xml
└── package
├── archive.zip
├── scripts
│   ├── ark_app_api.py
│   ├── params.py
│   └── status_params.py
└── templates
└── application.properties.j2

5 directories, 9 files

Ambari 简介和安装笔记

ambari 介绍

Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目

就 Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,但是这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等),而并不仅是特指 Hadoop。用一句话来说,Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。

接下来进行一次简单的安装,算是一次安装笔记

  1. 下载准备好ambari 和hdp 系列安装包的本地yum源
  2. 安装ambari
  3. 如何通过ambari安装HDP等服务

自动化部署 - 定制化RPM包构建

linux 上一些软件包的安装,往往需要很多手工介入的安装步骤,不利于进行大规模集群部署,而且免不了对一些软件需要定制化改造的需求,需要源码安装。如果需要一台台地去编译安装,那么运维就不用出机房了

文章以mysql打包构建为例,实现 基于源码构建定制化rpm包 和基于 二进制安装包构建rpm包 两种方式的的打包

打包好了,将该rpm包发布到构建的本地yum源,集群中所有机器一个yum install 命令就可以搞定了。如何在本地搭建yum源,可以见上一篇文章:自动化部署 - 构建YUM本地源


自动化部署 - 构建YUM本地源

yum 本地源 构建

学会打rpm包后(见如何利用rpm-maven-plugin打包前后端项目,那么接着就是在本地集群构建yum源了

文章包含两个部分:一是自动脚本构建 yum源,二是分发yum源配置,使得整个集群yum安装从本地源拉取

相比较而言,本地YUM源服务器最大优点在局域网的快速网络连接和稳定性。有了局域网中的YUM源服务器,即便在Internet连接中断的情况下,也不会影响其他YUM客户端的软件升级和安装

构建本地yum源适用于以下场景:

  • 客户现场没有网络环境
  • 外网环境不佳
  • 减轻带宽压力
  • 本地化自动部署

本地源配置的三种方式

  • 一是直接使用CentOS光盘作为本地yum源,优点是简单便捷,缺点是光盘软件包可能不完整(centos 7 Everything 总共才6.57G);
  • 二是同步CentOS官方源到本地(相当于创建了一个公共镜像),优点是最靠谱,缺点是占空间费流量;
  • 三是创建完全自定义的本地源,优点是灵活性最大,缺点是只是作为其他源的补充。

因为有本地化部署的需求,且客户现场没有网络环境,所以稍微了解和构建下 CentOS光盘和 自定义本地源两种方式,最后通过构建脚本自动构建yum本地源,且通过分发脚本将yum源配置同步到集群的各台机器


自动化部署 - 集群配置SSH免密自动化脚本

原理 从服务器A登录到服务器B,借用网上的一张图片


图片来源

具体的操作:
A上面生成私钥公钥对,拷贝公钥内容追加写入到B的授权文件/root/.ssh/authorized_keys

上面的是单机操作,如果应对到几台/几十台的集群配置,手动去配置,那么需要配置n x 3次,这酸爽,手动表情[哭笑不得]

以下通过一个shell脚本,自动生成各台机器的id_rsa密钥对,并将所有机器的公钥写入到文件中,再自动将该文件内容分发到所有服务器并且将文件内容追加写入到authorized_keys文件


自动化部署 - 如何利用rpm-maven-plugin打包前后端项目

Maven打包成RPM

RPM全称是 Red Hat Package Manager(Red Hat包管理器)。几乎所有的 Linux 发行版本都使用这种形式的软件包管理安装、更新和卸载软件。

在devops链条上,常见的部署方式是通过持续集成工具如jenkins/CI 构建和发布jar包到服务端制定目录。不过随着越来越多的应用趋向于paas 平台,本地化自动部署的需求越来越多,在软件包的安装过程中各种自动控制命令的集成也越来越复杂,jenkins等部署方式已经无法满足需求,这时候将软件包和集成脚本一起打包成rpm包的形式,也是一种另外的思路。对于最终用户来说,使用 RPM所提供的功能来维护系统是比较容易和轻松的。安装、卸载和升级RPM软件包只需一条命令就能搞定。
后续还可以构建yum本地源,通过ambari等其他集成工具,进行对软件包的安装、管理、监控、卸载、升级全生命周期的管控

利用rpm-maven-plugin插件实现rpm构建,以便于RPM软件仓库管理。
包含四个部分:

  • 基本单项目 打包成rpm
  • 多module 项目打包成rpm
  • 纯前端项目 打包成rpm
  • rpm script 应用-通过自动创建软连接实现rpm包自动升级

备注:

rpm-maven-plugin 需要在linux 机器上才能正常运行,运行机器需要

1
yum install rpm-build

基于RBAC的Rest抽象资源权限控制设计及实现

基于spring boot的一个小项目,前后端分离,采用REST风格的接口设计,在做权限设计时觉得以前的权限控制实现比较繁琐,一个Action就对应一条Permission。所以想着接口可以走REST风格,权限为什么不可以呢?比如称作READ风格的权限控制(Representational Authorization Design)……

REST早已不是新鲜事物,基于REST的权限控制网上也是有现成的,基于RESTful API 怎么设计用户权限控制?写得很棒,所以基于这篇文章的设计思路做了个实现(java)。本文的前半段,主要是引用文章阐述设计思路,后半部分主要为程序code实现。

其中后端自定义一个过滤器做权限过滤,用到了spring util包下的AntPathMatcher做权限规则匹配;前端也就一个directive就搞定了。技术上并没有引用什么技术框架,关键还是抽象思维且将设计思路转化为程序上code。

传统的权限配置 vs 权限被抽象成资源和状态

1
2
3
4
5
/getUsersGroups?id=1
/getUsersExpress
/getUsersLables?eventId=xxx
/createUsers?name=xxx&age=18
/updateEvent?id=xx

vs

1
2
3
GET /users/**  表示 对 users 资源 及events 附属的资源 有获取/浏览的权限
POST /users 表示 对 users 资源 有新增的权限
PUT /users/* 表示 对 users 有 修改的权限

spring boot 动态数据源配置 & 运行时新增数据源

spring boot 动态数据源配置 & 运行时新增数据源

场景:

  1. 同一系统支持不同业务场景,需要用到不同的数据库。
  2. 各个用户/应用之间数据完全隔离(不同的用户/应用,不同的数据库),而一个程序需要支持不同的用户/应用。例如 一些paas服务需要支持不同的业务场景,但是不同项目之间数据、账号、权限、token等业务数据都是完全隔离的,仅共享机器资源。

一、spring boot 动态数据源配置

方案:在一个确切的地方存储 数据源的配置信息(我是将这些信息存储在一个 配置数据库表中,而这个配置数据库是确切的,作为主数据源配置)。启动spring时,会初始化这个配置数据源,然后将其他动态数据源信息取出来初始化好datasource 注册到spring 容器。

原理:主要是实现AbstractRoutingDataSource的抽象类,然后将该类注册到spring容器,其中关键点是:

  1. 配置AbstractRoutingDataSource类的默认数据源Object defaultTargetDataSource 和其他数据源Map<Object, Object> targetDataSources。targetDataSources就是我们动态配置的数据源,key-value 接口,后面根据key 查找 datasource
  2. 实现determineCurrentLookupKey()方法,该方法决定了当前操作选择哪个数据源
  3. 注册到spring 容器

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×