前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CAT链路追踪从入门到实战(看这一篇就够了)

CAT链路追踪从入门到实战(看这一篇就够了)

作者头像
小熊学Java
发布于 2023-07-16 06:40:20
发布于 2023-07-16 06:40:20
1.8K00
代码可运行
举报
文章被收录于专栏:全栈学习之路全栈学习之路
运行总次数:0
代码可运行

1、CAT介绍

1、为什么要学习?

从单体架构到微服务架构的演变, 一个业务请求往往会流转多个服务, 大型互联网产品服务架构尤为复杂,腾讯的抢红包服务, 阿里的交易支付服务, 可能就流转成百上千个服务节点, 面对众多服务, 如何监控管理?服务请求一旦出现问题, 如何快速定位问题?如何保障服务的高可用, 做到全面的监控与预警?如何分析统计服务的运行状况?看下链路监控产品如何解决这些问题。

2、什么是CAT?

  • CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。
  • CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
  • CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是48分钟40秒,基本上看到48分钟38秒数据,整体报表的统计粒度是分钟级;第二个优势,监控数据是全量统计,客户端预计算;链路数据是采样计算。

优势:

  • 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。
  • 全量数据:全量采集指标数据,便于深度分析故障案例。
  • 高可用:故障的还原与问题定位,需要高可用监控来支撑。
  • 故障容忍:故障不影响业务正常运转、对业务透明。
  • 高吞吐:海量监控数据的收集,需要高吞吐能力做保证。
  • 可扩展:支持分布式、跨 IDC 部署,横向扩展的监控系统。
  • 报表丰富:帮助管理人员从各个角度了解系统的整体状况。

2、CAT报表

  • 报错统计报表
  • 业务统计报表
  • LOGVIEW统计
  • 可视化LOGVIEW
  • 应用类型报表

报表名称

报表用途

Transaction实时报表

一段代码的运行时间/次数/分布、比如URL/Cache/SQL执行次数和响应时间

Event实时报表

事件产生的次数/分布,比如出现一个异常

Problem实时报表

根据Transaction/Event数据分析出来的系统出现的异常,包括访问较慢的程序等

Heartbeat实时报表

JVM内部一些状态信息,Load/Memory/GC/Thread等

Metric实时报表

业务指标采集监控报表

Matrix实时报表

一个请求调用分布统计(一次请求中调用多少次SQL/RPC/Cache等),可评估应用设计的合理性

...

...

3、Google Dapper论文

4、Dapper Deployment

5、链路监控工作机制

7、CAT架构设计

整体设计 简单即是最好原则设计, 主要分为三个模块cat-client,cat-consumer,cat-home。

  • cat-client 提供给业务以及中间层埋点的底层sdk。
  • cat-consumer 用于实时分析从客户端的提供的数据。
  • cat-home 作为提供给用户的展示的控制端。

客户端设计

客户端设计是CAT系统设计中最为核心的一个环节,客户端要求是做到API简单、高可靠性能、无论在任何场景下客户端都不能影响各业务服务的性能(监控只是公司核心业务流程一个旁路环节)。

服务端设计 服务端单机cat-consumer的整体架构:

当某个报表处理器处理来不及时候,比如Transaction报表处理比较慢,可以通过配置支持开启多个Transaction处理线程,并发消费消息。

8、安装与使用(单机版)

1、环境准备

  1. JDK1.8+
  2. Tomcat8+
  3. MySQL5.7+
2、CAT启动配置

PS:不建议在Windows下部署, 设计上对window支持不好, 容易出各种问题。

下载CAT源码, 如GIT方式过慢, 可用Download Zip 方式打包下载

构建CAT服务war包 可以导入IDEA工程进行编译, 或者直接用MAVEN进行编译,这里编译的目录是:cat-home 将MAVEN加入到系统PATH, 执行mvn命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 mvn clean install -Dmaven.test.skip=true 

创建数据库

先创建CAT数据库, 采用utf8mb4字符集, 再导入{CAT_SRC}/script/目录下的CatApplication.sql脚本。

创建目录,因为cat需要/data的全部权限,运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 mkdir /data/appdatas/cat/
 chmod -R 777 /data/appdatas/cat/

将打包好的war包传入tomcat的webapp下

创建客户端的配置/data/appdatas/cat/client.xml (客户端使用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <?xml version="1.0" encoding="utf-8"?>
 <config mode="client">
     <servers>
         <server ip="127.0.0.1" port="2280" http-port="8080"/>
     </servers>
 </config>

创建服务端的配置/data/appdatas/cat/datasources.xml (服务端使用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <?xml version="1.0" encoding="utf-8"?>  
 <data-sources>
 <data-source id="cat">
     <maximum-pool-size>3</maximum-pool-size>
     <connection-timeout>1s</connection-timeout>
     <idle-timeout>10m</idle-timeout>
     <statement-cache-size>1000</statement-cache-size>
     <properties>
         <driver>com.mysql.jdbc.Driver</driver>
         <url><![CDATA[jdbc:mysql://127.0.0.1:3306/cat]]></url>  <!-- 请替换为真实数据库URL及Port  -->
         <user>root</user>  <!-- 请替换为真实数据库用户名  -->
         <password>123456</password>  <!-- 请替换为真实数据库密码  -->
         <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
     </properties>
 </data-source>
 </data-sources>

Tomcat配置,修改tomcat conf 目录下 server.xml, 检查好端口没有被其他程序占用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <Connector port="8080" protocol="HTTP/1.1"
         URIEncoding="utf-8"    connectionTimeout="20000"
             redirectPort="8443" />  <!-- 增加  URIEncoding="utf-8"  -->  

如需内存不足,需作调整

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 CATALINA_OPTS="-Xms1024m -Xmx2048m -Xss1024K  -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"

启动

进入tomcat bin目录下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 bash startup.sh

访问cat客户端

  • 打开控制台地址: http://ip:8080/cat/s/config?op=routerConfigUpdate
  • 默认用户名:admin 默认密码:admin
  • 正常可以看到后台:

9、CAT集群版

具体可参考官方文档: CAT集群部署

10、微服务整合CAT案例

1、服务设计

设计四个服务:网关服务、订单服务、账户服务和库存服务, 三层调用关系监控

2、工程结构
  • cat-demo: 父级工程
  • cat-demo-account: 账户服务工程
  • cat-demo-gateway: 网关服务工程
  • cat-demo-order: 订单服务工程
  • cat-demo-stock: 库存服务工程
3、创建父工程

命名为cat-demo

pom依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <dependencies>
     <!-- spring boot 依赖 -->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <!-- Nacos服务注册发现依赖 -->
     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
     <!-- Spring Boot 监控组件依赖 -->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
     <!-- CAT 组件依赖-->
     <dependency>
         <groupId>com.dianping.cat</groupId>
         <artifactId>cat-client</artifactId>
         <version>3.0.1</version>
     </dependency>
 </dependencies>
4、创建cat-gateway: 网关服务工程

父级为cat-demo,命名为cat-gateway

启动类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 @SpringBootApplication
 @EnableDiscoveryClient
 @ComponentScan(basePackages = {"com.xiaobear"})
 @RestController
 public class CatGateWayApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(CatGateWayApplication.class, args);
     }
 
     @Resource
     private RestTemplate restTemplate;
 
     /**
      * 指向订单服务的接口
      */
     @Value("${service2.address:localhost:8082}")
     private String serviceAddress;
 
     /**
      * 模拟正常的请求
      * @return
      * @throws Exception
      */
     @RequestMapping("/gateway")
     public String gateway() throws Exception {
         Thread.sleep(100);
         String response = restTemplate.getForObject("http://" + serviceAddress + "/order", String.class);
         return "gateway response ==> " + response;
     }
 
     /**
      * 模拟一个请求异常
      * @return
      * @throws Exception
      */
     @RequestMapping("/timeout")
     public String timeout() throws Exception {
         Transaction t = Cat.newTransaction(CatConstants.TYPE_URL, "timeout");
         try {
             Thread.sleep(100);
             String response = restTemplate.getForObject("http://" + serviceAddress + "/timeout", String.class);
             return response;
         }catch(Exception e) {
             Cat.getProducer().logError(e);
             t.setStatus(e);
             throw e;
         }finally {
             t.complete();
         }
 
     }
 
     @Bean
     RestTemplate restTemplate() {
         RestTemplate restTemplate = new RestTemplate();
         // 保存和传递调用链上下文
         restTemplate.setInterceptors(Collections.singletonList(new CatRestInterceptor()));
         return restTemplate;
     }
 }

yml配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 server:
   port: 8081
 spring:
   application:
     name: cat-gateway
   cloud:
     nacos:
       discovery:
         ip: 127.0.0.1:8848
 
 #暴露端口
 management:
   endpoint:
     web:
       exposure:
         include:*

工具类

  • CatContext: 存放调用链上下文信息,这里需要注意的是cat的依赖包为3.0的,新版本4的没有一些接口Cat.Context public class CatContext implements Cat.Context { private Map<String, String> properties = new HashMap<>(); @Override public void addProperty(String s, String s1) { properties.put(s, s1); } @Override public String getProperty(String s) { return properties.get(s); } }
  • CatServletFilter:过滤器,过滤访问的一些路径 public class CatServletFilter implements Filter { private String[] urlPatterns = new String[0]; /** *过滤初始化 * @param filterConfig * @throws ServletException */ @Override public void init(FilterConfig filterConfig) throws ServletException { String parameter = filterConfig.getInitParameter("CatHttpModuleUrlPatterns"); if (null != parameter){ parameter = parameter.trim(); urlPatterns = parameter.split(","); for (int i = 0; i < urlPatterns.length; i++) { urlPatterns[i] = urlPatterns[i].trim(); } } } /** * 请求过滤处理 * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; String url = request.getRequestURL().toString(); for (String urlPattern : urlPatterns) { if (url.startsWith(urlPattern)) { url = urlPattern; } } //存放消息的上下文对象 CatContext catContext = new CatContext(); catContext.addProperty(Cat.Context.CHILD, request.getHeader(CatHttpConstants.CAT_HTTP_HEADER_CHILD_MESSAGE_ID)); catContext.addProperty(Cat.Context.PARENT, request.getHeader(CatHttpConstants.CAT_HTTP_HEADER_PARENT_MESSAGE_ID)); catContext.addProperty(Cat.Context.ROOT, request.getHeader(CatHttpConstants.CAT_HTTP_HEADER_ROOT_MESSAGE_ID)); Cat.logRemoteCallServer(catContext); Transaction t = Cat.newTransaction(com.dianping.cat.CatConstants.TYPE_URL, url); try { //日志记录 Cat.logEvent("service.method",request.getMethod(), Message.SUCCESS, request.getRequestURL().toString()); Cat.logEvent("Service.client", request.getRemoteHost()); filterChain.doFilter(servletRequest, servletResponse); //设置事务状态为 SUCCESS t.setStatus(Transaction.SUCCESS); }catch (Exception e){ //设置事务状态,打印日志 t.setStatus(e); Cat.logError(e); throw e; }finally { //事务完成 t.complete(); } } }
  • CatFilterConfigure:过滤器配置类 @Configuration public class CatFilterConfigure { @Bean public FilterRegistrationBean catFilter(){ FilterRegistrationBean registration = new FilterRegistrationBean(); CatServletFilter filter = new CatServletFilter(); registration.setFilter(filter); registration.addUrlPatterns("/*"); registration.setName("cat-filter"); registration.setOrder(1); return registration; } }
  • CatRestInterceptor:Cat拦截器 记录 TID、PID、SID @Component public class CatRestInterceptor implements ClientHttpRequestInterceptor { @Override public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] bytes, ClientHttpRequestExecution clientHttpRequestExecution) throws IOException { Transaction t = Cat.newTransaction(CatConstants.TYPE_CALL, httpRequest.getURI().toString()); try { HttpHeaders headers = httpRequest.getHeaders(); // 保存和传递CAT调用链上下文 Cat.Context ctx = new CatContext(); Cat.logRemoteCallClient(ctx); headers.add(CatHttpConstants.CAT_HTTP_HEADER_ROOT_MESSAGE_ID, ctx.getProperty(Cat.Context.ROOT)); headers.add(CatHttpConstants.CAT_HTTP_HEADER_PARENT_MESSAGE_ID, ctx.getProperty(Cat.Context.PARENT)); headers.add(CatHttpConstants.CAT_HTTP_HEADER_CHILD_MESSAGE_ID, ctx.getProperty(Cat.Context.CHILD)); // 继续执行请求 ClientHttpResponse response = clientHttpRequestExecution.execute(httpRequest, bytes); t.setStatus(Transaction.SUCCESS); return response; } catch (Exception e) { Cat.getProducer().logError(e); t.setStatus(e); throw e; } finally { t.complete(); } } }
  • CatHttpConstants:cat常量 public class CatHttpConstants { public static final String CAT_HTTP_HEADER_CHILD_MESSAGE_ID = "X-CAT-CHILD-ID"; public static final String CAT_HTTP_HEADER_PARENT_MESSAGE_ID= "X-CAT-PARENT-ID"; public static final String CAT_HTTP_HEADER_ROOT_MESSAGE_ID = "X-CAT-ROOT-ID"; }
  • resources资源目录, 路径META-INF下, 必须创建app.properties, 内部只要配置app.name属性。 app.name: cat-gateway
5、创建cat-account: 网关服务工程

父级为cat-demo,命名为cat-account

启动类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 @SpringBootApplication
 @EnableDiscoveryClient
 @RestController
 @ComponentScan("com.xiaobear")
 public class CatAccountApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(CatAccountApplication.class, args);
     }
 
     /**
      * 提供账户服务接口
      * @return
      * @throws Exception
      */
     @RequestMapping("/account")
     public String account() throws Exception {
         Thread.sleep(150);
         return "account success";
     }
 }

其他均跟网关服务类似,不同点:

  • 端口号为:8082
  • 少了CatRestInterceptor:Cat拦截器 记录 TID、PID、SID
6、创建cat-order: 网关服务工程

父级为cat-demo,命名为cat-order

启动类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 @SpringBootApplication
 @EnableDiscoveryClient
 @RestController
 @ComponentScan("com.xiaobear")
 @Slf4j
 public class CatOrderApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(CatOrderApplication.class, args);
     }
 
     @Autowired
     RestTemplate restTemplate;
     /**
      * Account账户服务
      */
     @Value("${service3.address:localhost:8083}")
     String serviceAddress3;
     /**
      * stock库存服务
      */
     @Value("${service4.address:localhost:8084}")
     String serviceAddress4;
 
     /**
      * 异常测试端口
      */
     private static final int MOCK_PORT = 8765;
 
 
     /**
      * 提供下单接口
      * @return
      * @throws InterruptedException
      */
     @RequestMapping("/order")
     public String service2MethodInController() throws InterruptedException {
         Thread.sleep(200);
         // 调用账户服务以及库存服务
         String service3 = restTemplate.getForObject("http://" + serviceAddress3 + "/account", String.class);
         String service4 = restTemplate.getForObject("http://" + serviceAddress4 + "/stock", String.class);
         //打印返回结果
         return String.format("Calling order service[order success] ==> Calling Account Service [%s]  ==> Calling Customer Service [%s]", service3, service4);
     }
 
     /**
      * 模拟异常超时接口
      * @return
      * @throws InterruptedException
      */
     @RequestMapping("/readtimeout")
     public String connectionTimeout() throws InterruptedException {
         Transaction t = Cat.newTransaction(CatConstants.TYPE_CALL, "connectionTimeout");
         //睡眠500ms
         Thread.sleep(500);
         try {
             log.info("Calling a missing service");
             //远程调用异常端口
             restTemplate.getForObject("http://localhost:" + MOCK_PORT + "/readtimeout", String.class);
             return "Should blow up";
         } catch(Exception e) {
             t.setStatus(e);
             Cat.getProducer().logError(e);
             throw e;
         } finally {
             t.complete();
         }
     }
 
     @Bean
     RestTemplate restTemplate() {
         SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory();
         clientHttpRequestFactory.setConnectTimeout(2000);
         clientHttpRequestFactory.setReadTimeout(3000);
         RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory);
 
         // 保存和传递调用链上下文
         restTemplate.setInterceptors(Collections.singletonList(new CatRestInterceptor()));
 
         restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
             @Override public boolean hasError(ClientHttpResponse response)
                     throws IOException {
                 try {
                     return super.hasError(response);
                 } catch (Exception e) {
                     return true;
                 }
             }
 
             @Override public void handleError(ClientHttpResponse response)
                     throws IOException {
                 try {
                     super.handleError(response);
                 } catch (Exception e) {
                     log.error("Exception [" + e.getMessage() + "] occurred while trying to send the request", e);
                     throw e;
                 }
             }
         });
         return restTemplate;
     }
 }

其他均跟网关服务类似,不同点:

  • 端口号为:8083
7、创建cat-stock: 网关服务工程

父级为cat-demo,命名为cat-stock

启动类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 @SpringBootApplication
 @EnableDiscoveryClient
 @ComponentScan("com.xiaobear")
 @RestController
 public class CatStockApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(CatStockApplication.class, args);
     }
 
     /**
      * 提供库存接口
      * @return
      * @throws Exception
      */
     @RequestMapping("/stock")
     public String stock() throws Exception {
         Thread.sleep(200);
         return "stock success";
     }
 }

其他均跟网关服务类似,不同点:

  • 端口号为:8084
  • 少了CatRestInterceptor:Cat拦截器 记录 TID、PID、SID
8、启动验证
  1. Nacos控制台 四个服务正常启动注册。注意:这里打包时候Nacos指向地址为宿主机的HOST地址
  1. 访问Gateway服务, 本示例是部署在Linux机器上, 地址: http://ip:8081/gateway 所有服务均正常返回结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 gateway service ==> Calling order service[order success] ==> Calling Account Service [account success] ==> Calling Customer Service [stock success]
 
  1. CAT控制台

CAT的LOGVIEW按层级完整的记录了四个服务的请求信息, 1至4分别对应Gateway、Order、Account和Stock服务。

LOGVIEW主要包含请求时间, 服务地址, 请求客户端等主要信息, 也支持图形方式呈现:

CAT 还有很多指标统计与报表展示, 能有效帮助我们监控管理整体微服务调用链路状态,更多大家可自行去研究哦。

如果觉得内容不错的话,希望大家可以帮忙点赞转发一波,这是对我最大的鼓励,感谢🙏🏻

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小熊学Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
centos中KVM虚拟化
1.确认 CPU 已经支持虚拟化,intel 的 CPU 虚拟化技术叫 vmx,AMD 的 CPU 叫 svm
@凌晨
2020/05/28
7680
CentOS 7.5 安装KVM虚拟机(Linux) 原
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。 它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。 KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。 而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。 广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
拓荒者
2019/05/25
7.2K0
Linux系统——KVM虚拟机安装与管理
kvm是linux内核的一种技术,有着很高的兼容性,性能也非常好,相对物理机而言它就是一个进程,日常管理维护与扩展非常方便,因此,今天来介绍下KVM虚拟机的安装与一些日常管理操作
民工哥
2020/09/16
5.6K0
Linux系统——KVM虚拟机安装与管理
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统
笔记内容:CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统 笔记日期:2018-03-07
端碗吹水
2020/09/23
4K0
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统
KVM 简介
KVM(Kernel-based Virtual Machine) ,基于内核的虚拟机,配合QEMU(处理器虚拟软件),需要CPU支持虚拟化技术(并且在BIOS里打开虚拟化选项),效率可达到物理机的80%以上。此外,它对SMP的支持很好。
为为为什么
2022/08/06
1.8K0
kvm 安装 windows 虚拟机
将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled
用户8824291
2022/02/25
2.5K0
Cent os 7之KVM虚拟化基础管理
至此,命令行创建虚拟机就完成了,接下来使用手动更改配置文件的方式,克隆test1,生成新的虚拟机test2(在我博文前面的那个博文链接中有专用于克隆的命令工具的使用方法,这里只是为了来了解虚拟机的配置文件) 二、手动更改配置文件的方式,克隆web01,生成新的虚拟机web02
小手冰凉
2020/07/29
7570
Cent os 7之KVM虚拟化基础管理
KVM简介,安装及常见使用详解
查看状态操作结果,如Active: active (running),说明运行情况良好
用户8851537
2021/07/21
3.5K0
openstack镜像制作详解
注释:如果输出的信息中有vmx,说明intel处理器支持完全虚拟化。如果显示svm,说明是AMD的处理器支持虚拟化。
yaohong
2019/09/11
4.5K0
openstack镜像制作详解
kvm虚拟机日常操作命令梳理
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理。废话不多说,下面列出kvm日常管理中的命令 1)查看KVM虚拟机配置文件及运行状态 KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/ autostart目录是配置kvm虚拟机开机自启动目录。 virsh命令帮助 # virsh -help 或直接virsh命令和,再执行子命令。如下所示。 # virsh 欢迎使用 virsh,虚拟化的交互式终端。 输入:'help' 来获得命令的帮助信息 'quit' 退出 virsh #
洗尽了浮华
2018/01/22
10.4K0
KVM 虚拟化技术
1.1 前言 1.1.1 什么是虚拟化? 在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器
惨绿少年
2018/03/30
6.1K0
centos7.3部署KVM虚拟化
如果什么都没有,说明没有加载,上面显示表明已加载KVM,如果没有加载则执行以下命令加载KVM
好派笔记
2021/09/15
5820
部署 KVM 虚拟化平台
KVM自Linux 2.6.20版本后就直接整合到Linux内核,它依托CPU虚拟化指令集实现高性能的虚拟化支持。它与Linux内核高度整合,因此在性能、安全性、兼容性、稳定性上都有很好的表现。 在KVM环境中运行的每个虚拟化操作系统都将表现为单个独立的系统进程。因此它可以很方便地与Linux系统中的安全模块进行整合(SELinux),可以灵活的实现硬件资源的管理和分配,KVM虚拟化的架构图如下:
小手冰凉
2019/09/10
1.4K0
部署 KVM 虚拟化平台
KVM_虚拟化技术
KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007 年 2 月发布的 Linux 2.6.20 内核第一次包含了 KVM 。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。
yaohong
2019/09/11
1.7K0
kvm部署过程记录
根据提示一步一步进行安装,其他的也类似,注意:! 表示必须要设置的 所有带有 ! 的都设置完毕后,就可以输入 b 继续安装了
dogfei
2020/07/31
5610
Centos7.4安装kvm虚拟机(使用virt-manager管理)
之前介绍了使用WebVirtMgr或Openstack来部署及管理kvm虚拟机,下面简单介绍centos7.4下使用virt-manager部署及管理kvm虚拟机的做法:
拓荒者
2019/05/25
2.6K0
裸金属服务器kvm虚拟化安装win10
和普通的 VPS 相比,裸金属服务器属于物理服务器,我的数据和其他用户数据做到了物理隔离,同时服务器本身是支持二次虚拟化的。
宋天伦
2020/07/16
7.4K0
KVM虚拟化部署
intel: 最新linux内核的Intel处理器(含VT虚拟化技术) vmx nx lm
星哥玩云
2022/09/15
1.7K0
KVM虚拟化部署
Centos6.3安装KVM
一、安装kvm 1 在安装CentOS6.3时可以选择安装好kvm 2 如果未安装好kvm,请按照下列方式安装 [创建本地yum源] 挂载iso文件 mount -o loop -t iso9660 CentOS-6.3-x86_64-bin-DVD1.iso /mnt 设置本地yum源 在/etc/yum.repos.d/创建   “任意文件名.repo"    文件   vi 刚才新建的文件名编辑 【localyum】任意名称 ,不能有空格。 name= local yum  任意名称 baseurl=file:////mnt/Packages      这个路径是自定的。Server为光盘中的Server目录 ,Packages与Server放在同一目录下。即/software目录下 enabled=1   代表   生效     0为不生效 gpgcheck=1   检查gpgkey  1 生效   0不生效 gpgkey=file:///software    安装光盘里有这个文件        不指定  安装时,可能提示没有注册 保存退出 执行命令 yum clean all (1) kvm需要有 CPU 的支持(Intel VT 或 AMD SVM) [root@moniter ~]#egrep '^flags.*(vmx|svm)' /proc/cpuinfo 如果有返回值说明cpu支持虚拟化 (2) 安装kvm libvirted yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager libvirt libvirt-python python-virtinst (3) 启动libvirted service messagebus start service haldaemon start service libvirtd start chkconfig messagebus on chkconfig haldaemon on chkconfig libvirtd on (4)检查kvm是否安装成功 [root@jiayuan ~]# virsh -c qemu:///system list  Id    名称                         状态 ----------------------------------------------------  1     redhat6.3                      running (5)kvm模块 [root@myKVM ~]# lsmod | grep kvm kvm_intel              52570  0 kvm                  314739  1 kvm_intel 二、配置网桥 vi /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTPROTO=static BROADCAST=10.207.20.255 IPADDR=10.207.20.200 NETMASK=255.255.255.0 NETWORK=10.207.20.0 ONBOOT=yes b、 vi /etc/sysconfig/network-scripts/ifcfg-eth0 # Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet DEVICE=eth0 BOOTPROTO=none ONBOOT=yes BRIDGE=br0 c、 重起网络服务生效 service network restart d、 echo 1 > /proc/sys/net/ipv4/ip_forward  #虚拟机上网 e、 检查桥接网络 [root@moniter ~]# brctl show bridge name     bridge id               STP enabled     interfaces br0             8000.842b2b74e1b6       no              eth0 virbr0          8000.000000000000       yes br0是我们配置的桥接网卡,virbr0是系统脚本自动配置的NAT网卡 三、安装vnc 注意:CentOS6.3 VNC的命名rpm为tiggervnc-server (1) yum install tiggervnc-server (2) vi /etc/sysconfig/vncservers #加一行     VNCSERVERS="
DevinGeng
2019/04/09
1.2K0
CentOS 7.2下KVM安装及初步使用
KVM是Kernel-based Virtual Machine的简称,是一个开源的虚拟化模块,今天我将在CentOS7的操作系统上安装KVM,以下是我的安装步骤。
拓荒者
2019/05/25
1.7K0
相关推荐
centos中KVM虚拟化
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 1、CAT介绍
    • 1、为什么要学习?
    • 2、什么是CAT?
  • 2、CAT报表
  • 3、Google Dapper论文
  • 4、Dapper Deployment
  • 5、链路监控工作机制
  • 7、CAT架构设计
  • 8、安装与使用(单机版)
    • 1、环境准备
    • 2、CAT启动配置
  • 9、CAT集群版
  • 10、微服务整合CAT案例
    • 1、服务设计
    • 2、工程结构
    • 3、创建父工程
    • 4、创建cat-gateway: 网关服务工程
    • 5、创建cat-account: 网关服务工程
    • 6、创建cat-order: 网关服务工程
    • 7、创建cat-stock: 网关服务工程
    • 8、启动验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档