首页 文章 精选 留言 我的

精选列表

搜索[环境],共10000篇文章
优秀的个人博客,低调大师

【TiDB实战】离线安装部署TiDB,单机模拟集群环境

什么是TiDB TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。 TiDB数据库在国产数据库3月份排行榜中,依旧是排行榜首: 五大核心特性 一键水平扩容或者缩容 得益于 TiDB 存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。 金融级高可用 数据采用多副本存储,数据副本通过 Multi-Raft 协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略满足不同容灾级别的要求。 实时 HTAP 提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。 云原生的分布式数据库 专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。 兼容 MySQL 5.7 协议和 MySQL 生态 兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。 四大核心应用场景 对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高的金融行业属性的场景 众所周知,金融行业对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高。传统的解决方案是同城两个机房提供服务、异地一个机房提供数据容灾能力但不提供服务,此解决方案存在以下缺点:资源利用率低、维护成本高、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) 无法真实达到企业所期望的值。TiDB 采用多副本 + Multi-Raft 协议的方式将数据调度到不同的机房、机架、机器,当部分机器出现故障时系统可自动进行切换,确保系统的 RTO <= 30s 及 RPO = 0。 对存储容量、可扩展性、并发要求较高的海量数据及高并发的 OLTP 场景 随着业务的高速发展,数据呈现爆炸性的增长,传统的单机数据库无法满足因数据爆炸性的增长对数据库的容量要求,可行方案是采用分库分表的中间件产品或者 NewSQL 数据库替代、采用高端的存储设备等,其中性价比最大的是 NewSQL 数据库,例如:TiDB。TiDB 采用计算、存储分离的架构,可对计算、存储分别进行扩容和缩容,计算最大支持 512 节点,每个节点最大支持 1000 并发,集群容量最大支持 PB 级别。 Real-time HTAP 场景 随着 5G、物联网、人工智能的高速发展,企业所生产的数据会越来越多,其规模可能达到数百 TB 甚至 PB 级别,传统的解决方案是通过 OLTP 型数据库处理在线联机交易业务,通过 ETL 工具将数据同步到 OLAP 型数据库进行数据分析,这种处理方案存在存储成本高、实时性差等多方面的问题。TiDB 在 4.0 版本中引入列存储引擎 TiFlash 结合行存储引擎 TiKV 构建真正的 HTAP 数据库,在增加少量存储成本的情况下,可以同一个系统中做联机交易处理、实时数据分析,极大地节省企业的成本。 数据汇聚、二次加工处理的场景 当前绝大部分企业的业务数据都分散在不同的系统中,没有一个统一的汇总,随着业务的发展,企业的决策层需要了解整个公司的业务状况以便及时做出决策,故需要将分散在各个系统的数据汇聚在同一个系统并进行二次加工处理生成 T+0 或 T+1 的报表。传统常见的解决方案是采用 ETL + Hadoop 来完成,但 Hadoop 体系太复杂,运维、存储成本太高无法满足用户的需求。与 Hadoop 相比,TiDB 就简单得多,业务通过 ETL 工具或者 TiDB 的同步工具将数据同步到 TiDB,在 TiDB 中可通过 SQL 直接生成报表。 1、下载离线安装包 下载地址 进入官方下载地址,选择社区版下载,以及选择对应的版本好,我这里选择的是最新版4.0.11下载。 https://pingcap.com/download-cn/community/ 2、安装准备 2.1创建普通用户 #创建用户 #adduser tidb #设置密码 #passwd tidb 2.2配置免密码登录 编辑/etc/sudoers文件 vim /etc/sudoers 在文件末尾添加 tidb ALL=(ALL) NOPASSWD:ALL 2.3创建tidb用户ssh key 切换用户 su - tidb 执行命令,一直按回车键就行 ssh-keygen -t rsa 3、安装部署 3.1 文件上传到服务器 切换到tidb用户,新建以下两个目录 mkdir tidb-deploy mkdir tidb-data 第一步下载的离线包,上传到这个用户的根目录解压: # tar -zxvf tidb-community-server-${version}-linux-amd64.tar.gz 执行instal文件 sh tidb-community-server-${version}-linux-amd64/local_install.sh 根据完成后提示中的第一点,执行如下命令,具体命令根据提示中的来: source /home/tidb/.bash_profile 至此,TiDB安装所需的TiUP组件已经安装完成,下面进行安装。 3.2配置初始化参数文件 集群初始化配置文件需要手动编写,在tidb用户根目录创建 YAML 格式配置文件,下面是我的配置文件 topology.yaml: global: user: "tidb" ssh_port: 22 deploy_dir: "/home/tidb/tidb-deploy" data_dir: "/home/tidb/tidb-data" monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 server_configs: tidb: log.slow-threshold: 300 tikv: readpool.storage.use-unified-pool: false readpool.coprocessor.use-unified-pool: true pd: replication.enable-placement-rules: true replication.location-labels: ["host"] tiflash: logger.level: "info" pd_servers: - host: 192.168.16.56 tidb_servers: - host: 192.168.16.56 tikv_servers: - host: 192.168.16.56 port: 20160 status_port: 20180 config: server.labels: { host: "logic-host-1" } - host: 192.168.16.56 port: 20161 status_port: 20181 config: server.labels: { host: "logic-host-2" } - host: 192.168.16.56 port: 20162 status_port: 20182 config: server.labels: { host: "logic-host-3" } tiflash_servers: - host: 192.168.16.56 monitoring_servers: - host: 192.168.16.56 grafana_servers: - host: 192.168.16.56 3.3部署集群 部署命令 tiup cluster deploy tidb-test v4.0.11 ./topology.yaml --user tidb -p 参数说明: 通过 TiUP cluster 部署的集群名称为 tidb-test 部署版本为 v4.0.0,其他版本可以执行 tiup list tidb 获取 初始化配置文件为 topology.yaml --user tidb:通过 tidb 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。 [-i] 及 [-p]:非必选项,如果已经配置免密登陆目标机,则不需填写。否则选择其一即可,[-i] 为可登录到部署机 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码 如无意外,会出现successfully的提示信息。 3.4启动集群 启动命令 tiup cluster start tidb-test 如无意外,会出现successfully的提示信息。 检查集群状态,命令:tiup cluster display tidb-test Starting component `cluster`: /home/ubuntu/.tiup/components/cluster/v1.3.2/tiup-cluster display tidb-test Cluster type: tidb Cluster name: tidb-test Cluster version: v4.0.11 SSH type: builtin Dashboard URL: http://192.168.16.56:2379/dashboard ID Role Host Ports OS/Arch Status Data Dir Deploy Dir -- ---- ---- ----- ------- ------ -------- ---------- 192.168.16.56:3000 grafana 192.168.16.56 3000 linux/x86_64 Up - /home/ubuntu/tidb/tidb-deploy/grafana-3000 192.168.16.56:2379 pd 192.168.16.56 2379/2380 linux/x86_64 Up|L|UI /home/ubuntu/tidb/tidb-data/pd-2379 /home/ubuntu/tidb/tidb-deploy/pd-2379 192.168.16.56:9090 prometheus 192.168.16.56 9090 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/prometheus-9090 /home/ubuntu/tidb/tidb-deploy/prometheus-9090 192.168.16.56:4000 tidb 192.168.16.56 4000/10080 linux/x86_64 Up - /home/ubuntu/tidb/tidb-deploy/tidb-4000 192.168.16.56:9000 tiflash 192.168.16.56 9000/8123/3930/20170/20292/8234 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tiflash-9000 /home/ubuntu/tidb/tidb-deploy/tiflash-9000 192.168.16.56:20160 tikv 192.168.16.56 20160/20180 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tikv-20160 /home/ubuntu/tidb/tidb-deploy/tikv-20160 192.168.16.56:20161 tikv 192.168.16.56 20161/20181 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tikv-20161 /home/ubuntu/tidb/tidb-deploy/tikv-20161 192.168.16.56:20162 tikv 192.168.16.56 20162/20182 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tikv-20162 /home/ubuntu/tidb/tidb-deploy/tikv-20162 Total nodes: 8 以上输出的结果中,可以看到tidb的端口号是4000,pd运维端口是2379。我们通过Navicat这种工具连接数据库是使用4000端口,默认密码为空。 3.5 关键组件 几个关键组件信息: Pd:元数据及控制调度组件 Tikv:存储组件 Tidb:数据库实例组件 Tiflash:闪存组件 Tidb虽然和mysql类似,但是它厉害在分布式,如果要使用mysql,数据库变大后,要思考虑分库分表、使用mycat等数据路由工具,Tidb设计从底层一开始分布式,类似hdfs的存储架构,将分布式做成一种原生的架构。 3.6 tiup cluster 命令说明 部署集群 部署集群的命令为 tiup cluster deploy,一般用法为: tiup cluster deploy <cluster-name> <version> <topology.yaml> [flags] 查看集群列表 集群部署成功后,可以通过 tiup cluster list 命令在集群列表中查看该集群 3. 启动集群 集群部署成功后,可以执行以下命令启动该集群。如果忘记了部署的集群的名字,可以使用 tiup cluster list 命令查看 tiup cluster start prod-cluster 检查集群状态 如果想查看集群中每个组件的运行状态,逐一登录到各个机器上查看显然很低效。因此,TiUP 提供了 tiup cluster display 命令,用法如下: tiup cluster display prod-cluster 其他详细的命令与运维操作,可以在官网文档中查看 TiUP组件文档 4、连接测试 因为TiDB内核是MySQL,所以直接用Navicat工具选择连接MySQL就行: 使用Navicat登录进去后,可以看到目前最新版本的TiDB的MySQL内核是:5.7.25 5、访问控制面板 5.1主页: 5.2看集群每个节点的状态 5.3一段时间(指定)SQL语句分析 5.4慢查询 监控控制面板这个工具还是挺好用,其他的就不一一截图了,主要的功能包含有: 集群信息 SQL语句分析 慢查询 流量可视化 集群诊断 日志搜索 高级调试 实时性能分析 给运维人员和开发人员使用都非常的友好。 ------------------------------END-------------------------------------------- 欢迎大家关注个人公众号,日常技术分享,涉及Java、前端、分布式。

优秀的个人博客,低调大师

编码风格:Mvc模式下SSM环境,代码分层管理

本文源码:GitHub·点这里 || GitEE·点这里 一、分层策略 MVC模式与代码分层策略,MVC全名是ModelViewController即模型-视图-控制器,作为一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,这是一种开发模式,但并不是实际开发中代码的分层模式,通常SSM框架的后端代码分层如下: controller控制层:定义服务端接口,入参出参,和一些入参校验; service业务服务层:组装业务逻辑,业务校验,构建控制层需要的参数模型; dao数据交互层:提供服务层需要的数据查询方法,处理数据交互条件相关的逻辑; mapper持久层:基于mybatis框架需要的原生支持,目前很常用的持久层组件; 二、控制层 1、Rest接口风格 基于资源访问和处理的逻辑,使用不同风格的注解。例如资源新增,更新,查询,删除。 /** * 新增 */ @PostMapping("/insert") public Integer insert (@RequestBody BaseInfo baseInfo){ return baseInfoService.insert(baseInfo); } /** * 更新 */ @PutMapping("/update/{id}") public String update(@PathVariable(value = "id") Integer id, @RequestBody BaseInfo baseInfo) { if (id<1){ return "error"; } baseInfo.setId(id); return "update="+baseInfoService.update(baseInfo); } /** * 主键查询 */ @GetMapping("/detail/{id}") public InfoModel detail(@PathVariable(value = "id") Integer id) { return baseInfoService.detail(id) ; } /** * 主键删除 */ @DeleteMapping("/delete/{id}") public String delete(@PathVariable(value = "id") Integer id) { baseInfoService.delete(id) ; return "SUS" ; } 2、接口复用度 不建议接口高度复用,例如增删改查都各自对接接口即可,基本原则,不同的客户端端操作,对于独立的接口。 /** * 列表加载 */ @GetMapping("/list") public List<BaseInfo> list() { return baseInfoService.list(new BaseInfoExample()) ; } /** * 列表搜索 */ @PostMapping("/search") public List<BaseInfo> search (@RequestParam("userName") String userName, @RequestParam("phone") String phone) { return baseInfoService.search(userName,phone) ; } 例如常见的list接口,list通常都有会按条件加载的search机制,而且搜索的判断条件很复杂,建议分为两个接口,从实际考虑,大部分场景下都是只使用list接口,很少使用search搜索。 3、入参出参 校验客户端必须条件,例如某某条件必填必选等,如果有问题,快速阻断请求链路,做到程序入口控制层拦截返回。 @PutMapping("/update/{id}") public String update(@PathVariable(value = "id") Integer id, @RequestBody BaseInfo baseInfo) { if (id<1){ return "error"; } baseInfo.setId(id); return "update="+baseInfoService.update(baseInfo); } 参数在三个以下,可以直接陈列入参,参数在三个或三个以上可以使用实体类统一封装。 @PostMapping("/search") public List<BaseInfo> search (@RequestParam("userName") String userName, @RequestParam("phone") String phone) { return baseInfoService.search(userName,phone) ; } 4、参数处理 出参格式处理度基本原则,服务器作为公共资源,避免非必要操作,例如客户端可自行判断返回值是否为空,null等,或者一些常见格式处理,利用客户端适当分担服务器压力。 三、业务服务层 1、业务校验 例如传入订单号,经过数据库层查询,没有订单数据,这里称为业务性质的异常,代码本身没有问题,但是业务逻辑无法正常执行。 public InfoModel detail(Integer id){ BaseInfo baseInfo = baseInfoDao.selectByPrimaryKey(id) ; if (baseInfo != null){ DetailInfoEntity detailInfoEntity = detailInfoDao.getById(id); if (detailInfoEntity == null){ LOG.info("id="+id+"数据缺失 DetailInfo"); } return buildModel(baseInfo,detailInfoEntity) ; } LOG.info("id="+id+"数据完全缺失"); return null ; } 2、组装业务逻辑 通常情况下服务层作为逻辑做复杂的一块,用来拼接业务核心步骤,可以通过业务逻辑判定,一步一步执行程序,避免在程序入口做大量可能用到的对象创建和需求数据查询。 public int insert (BaseInfo record){ record.setCreateTime(new Date()); int insertFlag = baseInfoDao.insert(record); if (insertFlag > 0){ DetailInfoEntity detailInfoEntity = new DetailInfoEntity(); detailInfoEntity.setUserId(record.getId()); detailInfoEntity.setCreateTime(record.getCreateTime()); if(detailInfoDao.save(detailInfoEntity)){ return insertFlag ; } } return insertFlag; } 3、数据模型构建 通常情况业务层是偏复杂的,如果想关快速理解业务层,可以对复杂的业务方法,在提供一个返参构建的方法,用来处理服务层要向控制层回传的参数,这样可以让重度的服务层方法变的清晰。 private InfoModel buildModel (BaseInfo baseInfo,DetailInfoEntity detailInfo){ InfoModel infoModel = new InfoModel() ; infoModel.setBaseInfo(baseInfo); infoModel.setDetailInfoEntity(detailInfo); return infoModel ; } 四、数据交互层 1、逆向工程 这里以使用mybatis框架或者mybatis-plus框架作为参考。如果是mybatis框架,建议逆向工程的模板代码不做自定义的修改,如果需要自定义方法,在mapper和xml层面再自定义一个扩展文件,用来存放自定义的方法和SQL逻辑,这样避免表结构变动大引发的强烈不适。 当然现在大部分都会mybatis-plus作为持久层组件,可以避免上述问题。 2、数据交互 针对业务层的需要,提供相应的数据查询方法,只处理与数据库交互的逻辑,避免出现业务逻辑,尤其在分布式架构下,不同服务的数据查询和组装,不应该出现在该层。 public interface BaseInfoDao { int insert(BaseInfo record); List<BaseInfo> selectByExample(BaseInfoExample example); int updateByPrimaryKey(BaseInfo record); BaseInfo selectByPrimaryKey(Integer id); int deleteByPrimaryKey(Integer id); BaseInfo getById (Integer id) ; } 五、源代码地址 GitHub·地址 https://github.com/cicadasmile/data-manage-parent GitEE·地址 https://gitee.com/cicadasmile/data-manage-parent

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册