[{"content":"dig 与nslookup 常用的 DNS 查询工具\n","permalink":"http://klxq666.fun/posts/blog/network/network-cs-copy/","summary":"dig 与nslookup 常用的 DNS 查询工具","title":"常用的dns查询工具"},{"content":" 面试官最想听的 Nginx 优化答案：直接上生产级配置！ 引言 nginx的优化配置， 向优秀的人学习！\n1. 如何优化 Nginx 的并发处理能力？ Nginx 在高并发环境下表现优异，主要得益于它的事件驱动架构。为了进一步优化并发处理能力，可以调整以下配置：\nworker_processes：设置 worker_processes 为与系统 CPU 核心数相同的数量，以充分利用多核 CPU。\nworker_processes 4; # 根据服务器的 CPU 核心数进行调整 worker_connections：每个 worker 进程可以处理的最大连接数，增加此值可以提升并发能力。\nworker_connections 1024; # 每个工作进程最多处理 1024 个连接 events：启用 epoll（Linux）或 kqueue（Mac）等高效的事件驱动模型，以提升 I/O 处理效率。\nevents { use epoll; # 适用于 Linux 系统 worker_connections 1024; } 这些设置可以帮助 Nginx 更高效地处理并发连接，提升系统的整体吞吐量。\n2. 如何通过缓存优化 Nginx 性能？ Nginx 具有强大的缓存功能，可以通过缓存机制大幅度减少后端服务器的负载，降低响应时间。\nHTTP 缓存：可以通过配置 proxy_cache 来缓存响应，避免每次请求都转发到后端服务。\nhttp { proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g; server { listen 80; location / { proxy_cache my_cache; proxy_pass http://backend; proxy_cache_valid 200 1h; # 对于 200 状态码的响应，缓存 1 小时 proxy_cache_use_stale error timeout updating; # 错误或超时情况下使用陈旧缓存 } } } 静态文件缓存：静态资源（如图片、CSS、JavaScript 等）适合缓存，可以通过设置缓存头来减少带宽消耗。\nserver { location /images/ { expires 30d; # 设置缓存过期时间为 30 天 add_header Cache-Control \u0026#34;public\u0026#34;; } } 缓存不仅能提升 Nginx 的性能，还能降低后端服务的压力，尤其适用于静态内容。\n3. 如何优化 Nginx 的响应时间和带宽利用率？ 开启 Gzip 压缩：Nginx 支持 Gzip 压缩，能够显著减小传输内容的大小，提高带宽利用率，并减少响应时间。\nhttp { gzip on; gzip_min_length 1024; # 启用 Gzip 压缩，且只对大于 1KB 的内容生效 gzip_types text/plain text/css application/javascript application/json; } TCP_NOPUSH 和 TCP_NODELAY：在高延迟环境下，可以通过启用 TCP 优化选项来提高性能，减少等待数据包的时间。\nserver { listen 80; tcp_nopush on; # 优化网络传输 tcp_nodelay on; # 降低延迟 } 优化传输协议：启用 HTTP/2 协议，它具有多路复用、头部压缩和请求优先级等特性，能显著提升网页加载速度。\nserver { listen 443 ssl http2; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/certificate.key; } 4. 如何减少 Nginx 配置中的瓶颈？ Nginx 配置的瓶颈通常出现在以下几个方面：\nNginx 配置文件结构：确保配置文件的结构清晰，避免过多的 location 和 server 块，从而减少 Nginx 解析配置的复杂度。 避免过多的正则表达式：正则匹配会消耗较多的 CPU 资源，尽量避免在 location 块中使用复杂的正则表达式，或者将其替换为路径匹配。 合并 server 和 location 配置：尽量避免重复配置相同的内容，合理利用 include 来复用通用配置，减少冗余。 减小负载均衡策略的复杂性：负载均衡时，如果有多个后端服务器，尽量简化负载均衡算法，使用简单的轮询算法，避免复杂的健康检查和权重设置。 5. 如何配置 Nginx 的日志以减少 I/O 开销？ Nginx 的日志功能在生产环境中非常重要，但过多的日志写入会导致 I/O 开销，影响性能。\n禁用访问日志：在高流量情况下，如果不需要访问日志，可以通过设置 access_log off; 来禁用访问日志。\nserver { listen 80; access_log off; location / { proxy_pass http://backend; } } 日志缓冲：使用 log_format 指令定义自定义日志格式，并且利用 access_log 的缓冲机制来减少磁盘 I/O。可以设置 buffer 和 flush 参数来控制日志的刷新频率。\nhttp { log_format main \u0026#39;$remote_addr - $remote_user [$time_local] \u0026#34;$request\u0026#34; \u0026#39; \u0026#39;$status $body_bytes_sent \u0026#34;$http_referer\u0026#34; \u0026#39; \u0026#39;\u0026#34;$http_user_agent\u0026#34; \u0026#34;$http_x_forwarded_for\u0026#34;\u0026#39;; access_log /var/log/nginx/access.log main buffer=32k flush=5m; } 6. 如何优化 Nginx 配置以防止 DDoS 攻击？ 通过以下配置，Nginx 可以有效地防止恶意流量和 DDoS 攻击：\n限制请求速率：使用 limit_req 模块限制每个 IP 地址的请求速率。\nhttp { limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s; server { listen 80; location / { limit_req zone=req_limit burst=20 nodelay; proxy_pass http://backend; } } } 限制每个客户端的最大连接数：通过 limit_conn 模块限制每个客户端的最大并发连接数。\nhttp { limit_conn_zone $binary_remote_addr zone=conn_limit:10m; server { listen 80; location / { limit_conn conn_limit 1; # 每个客户端最多 1 个并发连接 proxy_pass http://backend; } } } 增加连接超时：设置适当的连接超时和读取超时，防止长时间未处理的连接占用过多资源。\nhttp { client_body_timeout 10s; client_header_timeout 10s; send_timeout 10s; } 7. 如何优化 Nginx 的 SSL/TLS 性能？ Nginx 在处理 HTTPS 时需要高效地配置 SSL/TLS，以减少加密解密的性能开销：\n启用 SSL/TLS 会话缓存：通过缓存 SSL/TLS 会话来减少握手时间。\nssl_session_cache shared:SSL:10m; ssl_session_timeout 1h; 使用现代加密算法：配置安全的加密套件，并禁用过时的协议。\nssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers \u0026#39;HIGH:!aNULL:!MD5\u0026#39;; 启用 OCSP Stapling：通过启用 OCSP Stapling 来提高 SSL/TLS 握手的速度。\nssl_stapling on; ssl_stapling_verify on; 8. 如何排查 Nginx 性能瓶颈？ 监控 Nginx 状态：通过启用 Nginx 状态页面，实时监控 Nginx 的性能。\nserver { listen 8080; location /status { stub_status on; access_log off; allow 127.0.0.1; deny all; } } 日志分析：检查错误日志、访问日志，尤其关注高延迟或 5xx 错误，找出可能的性能瓶颈。\n系统资源监控：通过监控 CPU、内存、网络带宽和磁盘 I/O 等系统资源，定位 Nginx 服务器的瓶颈所在。\n9. Nginx 如何实现高并发？ 描述 master-worker 架构与 epoll 事件模型的协同工作原理：\nMaster 进程：负责读取配置、绑定端口、管理 Worker 进程（平滑重启、热加载）。 Worker 进程：实际处理请求，采用非阻塞 + epoll 多路复用机制。 Epoll 模型：基于事件驱动，仅遍历活跃连接，复杂度 O(1)，支持百万级并发。 配置优化项： worker_processes auto; # 匹配 CPU 核心数 worker_connections 10240; # 单个 Worker 最大连接数 use epoll; # 明确指定事件模型 10. 以下配置存在什么问题？如何优化？ location /api/ { proxy_pass http://backend; proxy_set_header Host $host; } 解析与优化：\n问题：未传递客户端真实 IP，丢失关键信息。 修复方案： proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; # 启用长连接 proxy_set_header Connection \u0026#34;\u0026#34;; 11. 如何通过 Slab 分配器优化 Nginx 内存碎片？ 内存分配公式：\n总内存需求 = worker_processes × (worker_connections × 请求缓冲区 + 响应缓冲区) 优化配置：\nslab_size 1m; slab_page_size 4k; client_body_buffer_size 16k; client_header_buffer_size 4k; large_client_header_buffers 8 32k; connection_pool_size 4096; request_pool_size 4k; 监控指标：\nnginx -V 2\u0026gt;\u0026amp;1 | grep -o \u0026#39;with-debug\u0026#39; \u0026amp;\u0026amp; kill -USR1 $(cat /run/nginx.pid) tail -f /var/log/nginx/error.log | grep slab 12. 如何设计 Nginx 缓存策略防止高并发下的缓存穿透？ proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:1024m inactive=7d use_temp_path=off; location / { proxy_cache mycache; proxy_cache_lock on; # 防击穿：同一请求仅一个回源 proxy_cache_key \u0026#34;$scheme$request_method$host$request_uri\u0026#34;; proxy_cache_valid 200 302 10m; proxy_cache_use_stale error timeout updating; proxy_cache_background_update on; # 后台更新缓存 } 13. 如何利用 Nginx + Lua 实现动态限频？ 完整代码逻辑：\nlua_shared_dict limit_counter 10m; server { location / { access_by_lua_block { local limit_counter = ngx.shared.limit_counter local key = ngx.var.binary_remote_addr local req, _ = limit_counter:get(key) if req then if req \u0026gt; 100 then # 每秒 100 次阈值 ngx.exit(503) else limit_counter:incr(key, 1) end else limit_counter:set(key, 1, 1) # 过期时间 1 秒 end } } } 14. 如何通过 Nginx 拦截 SQL 注入和 XSS 攻击？ 正则表达式和配置片段：\nset $block 0; if ($request_method !~ ^(GET|POST)$ ) { set $block 1; } if ($query_string ~* \u0026#34;union.*select.*from\u0026#34;) { set $block 1; } # SQL 注入检测 if ($args ~* \u0026#34;\u0026lt;script.*\u0026gt;\u0026#34;) { set $block 1; } # XSS 检测 location / { if ($block = 1) { return 444; # 静默丢弃攻击请求 } # 其他业务逻辑 } 15. 如何构建 Nginx 全维度监控指标？ Prometheus + Grafana 方案：\nnginx.conf 开启 Stub Status：\nlocation /nginx_status { stub_status; allow 127.0.0.1; deny all; } Prometheus 配置：\njob_name: \u0026#39;nginx\u0026#39; static_configs: Grafana 看板：包含 QPS、连接数、4xx/5xx 错误率、Upstream 响应时间分布。\n16. 如何实现 Nginx 的零停机热升级？ 完整操作流程及回滚方案：\n备份旧版本二进制文件：\ncp /usr/sbin/nginx /usr/sbin/nginx.old 编译新版本（需保留原 configure 参数）：\n./configure --with-http_v2_module --with-stream=dynamic... make \u0026amp;\u0026amp; make install 向主进程发送 USR2 信号启动新进程：\nkill -USR2 $(cat /run/nginx.pid) 逐步关闭旧 Worker 进程：\nkill -WINCH $(cat /run/nginx.pid.oldbin) 强制回滚（若新版本异常）：\nmv /usr/sbin/nginx.old /usr/sbin/nginx kill -HUP $(cat /run/nginx.pid.oldbin) 17. 如何基于 Nginx + GeoIP 实现跨国流量调度？ DNS 与 Nginx 联动方案：\ngeoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $backend { default us.web.service; # 默认美国集群 CN cn.web.service; # 中国用户 JP jp.web.service; # 日本用户 } server { location / { resolver 8.8.8.8 valid=30s; # 动态 DNS 解析 proxy_pass http://$backend; proxy_next_upstream error timeout http_500; } } 18. 在 Kubernetes + Serverless 架构中，Nginx Ingress 如何实现自动弹性伸缩？ 水平扩展：基于 HPA 监控 CPU/内存自动扩缩 Pod 数量。 智能路由：通过 Nginx Ingress Annotation 实现金丝雀发布： nginx.ingress.kubernetes.io/canary: \u0026#34;true\u0026#34; nginx.ingress.kubernetes.io/canary-weight: \u0026#34;20\u0026#34; 冷启动优化：预加载 Nginx 配置到内存池，减少首次请求延迟。 19. 如何将 HTTP/1.1 升级为 HTTP/2 并优化性能？ 关键配置项：\nhttp { # 开启 HTTP/2 listen 443 ssl http2; # 优化连接复用 keepalive_timeout 300s; keepalive_requests 10000; # 头部压缩优化 gzip on; gzip_min_length 1k; gzip_comp_level 3; gzip_types text/plain application/json; # 调整缓冲区应对大 Header http2_max_field_size 16k; http2_max_header_size 64k; # 动态调整窗口大小 http2_body_preread_size 128k; http2_streams_index_size 1024; } 性能指标：\n连接复用率提升 40%+ 首字节时间（TTFB）降低 30% 头部传输体积减少 50% 20. 设计防御大规模 CC 攻击的分布式限流方案，需支持动态规则更新 分布式限流（Redis 集群）：\nlimit_req_zone $binary_remote_addr zone=global_limit:10m rate=100r/s; limit_req zone=global_limit burst=200 delay=10; 动态规则 API：\nlocation /api/limit_rules { # 接受 JSON 格式规则更新 proxy_pass http://rule_engine; # 实时加载新规则 nginx -s reload \u0026amp;\u0026amp; lua_shared_dict limit_rules 10m; } Lua 动态过滤：\naccess_by_lua_block { local rules = ngx.shared.limit_rules local ip = ngx.var.remote_addr if rules:get(ip) == \u0026#34;block\u0026#34; then ngx.exit(444) end } 防御指标：\n单 IP QPS 限制精度 ±5% 规则更新延迟 \u0026lt; 500ms 10Gbps 攻击流量过滤率 99.9% 21. 在 Kubernetes 中如何优化 Nginx Ingress Controller 性能？ 水平自动扩缩：\nautoscaling: enabled: true minReplicas: 3 maxReplicas: 100 metrics: - type: Pods pods: metric: name: nginx_connections_active target: type: AverageValue averageValue: 1000 内核参数调优（DaemonSet）：\nsysctls: - name: net.core.somaxconn value: \u0026#34;65535\u0026#34; - name: net 参考视频链接：\nhttps://mp.weixin.qq.com/s/ZAaJFxaEYlcWc4fwDmAdhw\n","permalink":"http://klxq666.fun/posts/blog/nginx_optimize/","summary":"面试官最想听的 Nginx 优化答案：直接上生产级配置！ 引言 nginx的优化配置， 向优秀的人学习！ 1. 如何优化 Nginx 的并发处理能力？ Nginx 在高并发环境下表现优异，主要得益于它的事件驱动架构。为了进一步优化并发处理能力，可以调整以下配置： worker_processes：设置 worker_processes 为与系统 CPU 核心数相同的数量","title":"Nginx 优化--生产级配置"},{"content":"1.CrystalDiskInfo 通过读取S.M.A.R.T了解硬盘健康状况。打开它，您就可以迅速读到本机硬盘的详细信息，包括接口、转速、温度、使用时间等。CrystalDiskInfo还会根据S.M.A.R.T的评分做出评估，当硬盘快要损坏时还会发出警报，支持简体中文。购买硬盘时，可以通过它来查看接口；也可以通过它查看通电时间、通电次数检测是否为二手硬盘。\n2.CrystalDiskMark 是一款免费的、测试你的硬盘或者存储设备的小巧工具。它可以测试硬盘的连续读写和随机读写速度，简单易于操作的界面让你随时可以测试你的存储设备测试存储设备大小和测试数字都可以选择还可测试可读和可写的速度。\n3.DiskGenius DiskGenius是一款集数据恢复软件、硬盘分区工具、系统备份软件、坏道检测等功能于一身的超级工具软件\n参考链接： https://mp.weixin.qq.com/s/GQyJ6w7SlVXawYvZ7c3IYw\n","permalink":"http://klxq666.fun/posts/webnas/windows_cipan/","summary":"1.CrystalDiskInfo 通过读取S.M.A.R.T了解硬盘健康状况。打开它，您就可以迅速读到本机硬盘的详细信息，包括接口、转速、温度、使用时间等。CrystalDiskInfo还会根据S.M.A.R.T的评分做出评估，当硬盘快要损坏时还会发出警报，支持简体中文。购买硬盘时，可以通过它来查看接口；也可以","title":"硬盘检查的工具"},{"content":"1.简单介绍 MobaXterm是一款功能强大的远程计算机管理软件，它集成了多种工具和功能，方便用户在不同计算机之间进行远程连接和管理操作。\nMobaXterm分为免费开源版和收费专业版，免费版适用于个人使用，而专业版提供了更多的功能和更高的性能 这款软件特别适合需要频繁进行远程连接和管理的专业技术人员，如网络工程师、系统管理员、开发者和技术支持人员。\n以下是MobaXterm的一些主要特点和功能：\n1.1 多种远程连接协议： MobaXterm支持SSH、RDP、VNC、X11转发等多种远程连接协议，用户可以通过单一界面管理多个远程会话。 Unix命令集成： 它提供了Unix命令集(GNU/Cygwin)工具箱，支持bash、ls、cat、sed、grep、awk、rsync等多种Unix命令 1.2 图形界面的SFTP文件传输： 连接SSH终端后，MobaXterm支持SFTP传输文件，具有图形化的文件浏览器，方便文件的上传下载。 1.3 丰富的插件支持： MobaXterm具有强大的扩展能力，可以集成插件来运行Gcc、Perl、Curl、Tcl/Tk/Expect等程序 1.4 内建X服务器： MobaXterm内建了一个X服务器，可以直接执行远程端的X窗口程序，无需额外配置。 1.5 直接支持VNC/RDP/Xdmcp远程桌面： 除了SSH，MobaXterm还支持VNC、RDP、Xdmcp等远程桌面协议，无需多种客户端，一个软件即可满足所有需求。 1.6 友好的用户界面： MobaXterm的操作界面十分友好，支持更换不同主题，提供直观和友好的操作体验。 1.7 多标签和多终端分屏： MobaXterm内置多标签页、横向纵向2分屏和田字形4分屏，用于一个窗口内管理多个连接 1.8 内建文本编辑器： MobaXterm自带文本编辑器，支持多种编程语言的语法高亮和自动完成功能，方便用户编辑和管理远程文件。 2.官方下载（只有英文版） https://mobaxterm.mobatek.net/\n3. GitHub基友汉化版，仅汉化程序，未做任何更改： https://github.com/RipplePiam/MobaXterm-Chinese-Simplified\n参考链接：\nhttps://www.cnblogs.com/airoot/p/18377234\n","permalink":"http://klxq666.fun/posts/blog/mobaxterm/","summary":"1.简单介绍 MobaXterm是一款功能强大的远程计算机管理软件，它集成了多种工具和功能，方便用户在不同计算机之间进行远程连接和管理操作。 MobaXterm分为免费开源版和收费专业版，免费版适用于个人使用，而专业版提供了更多的功能和更高的性能 这款软件特别适合需要频繁进行远程连接和","title":"MobaXterm"},{"content":"1. 介绍 负载均衡是一种在多个服务器之间分配工作负载的技术，通过分发请求来确保没有一台服务器因过载而导致性能下降或服务不可用。 它的主要目的是提高应用程序的可用性和可靠性，从而提供更好的用户体验。\n\u0026mdash;\u0026mdash;\u0026mdash;相关的算法 2. 常见负载均衡技术 在负载均衡领域，LVS、Nginx和HAProxy各有特色：\n特征 LVS Nginx HAProxy 工作层次 4层（传输层） 7层 （应用层） 4和7层 性能 高并发能力强 中等 高 功能 简单纯粹 多样 中等 配置 复杂 简单 中等 协议支持 TCP、UDP HTTP、HTTPS、SMTP、POP3、IMAP ！ - TCP、HTTP、HTTPS 3. LVS特性分析 3.1 工作原理 LVS是一种高效且灵活的负载均衡解决方案，其工作原理基于三种主要模式：NAT、DR和TUN。每种模式都有其独特的优势和适用场景，能够满足不同类型的负载均衡需求。\nNAT模式 NAT模式是最直观的一种实现方式。在这种模式下，LVS作为中央调度器，接收客户端的请求，然后将请求转发给后端的真实服务器。值得注意的是，NAT模式下， 所有请求和响应都需要经过LVS ，这可能导致在高并发场景下成为性能瓶颈。\nDR模式 相比之下，DR模式在性能上有显著优势。DR模式利用二层网络技术实现了更加高效的负载均衡。在这种模式下，LVS和后端服务器共享同一个虚拟IP地址(VIP)，但只有LVS响应ARP请求。当LVS接收到请求后，它会修改请求包的MAC地址，将其转发给选定的后端服务器。后端服务器处理请求后，直接将响应发送回客户端， 绕过了LVS 。这种方法大大减轻了LVS的负担，使其能够处理更多的并发请求。\nTUN模式 TUN模式则结合了NAT和DR的优点。它使用IP隧道技术，在原有请求包的基础上添加一层IP头部，实现跨网段的负载均衡。TUN模式允许LVS和后端服务器位于不同的物理网络中，为地理分布式的负载均衡提供了可能性。然而，TUN模式需要所有服务器支持IP隧道协议，这可能限制了其在某些环境中的应用。\nLVS的工作原理体现了其在负载均衡领域的创新性和适应性。通过灵活运用这三种模式，LVS能够在不同的网络环境中实现高效的负载均衡，满足多样化的业务需求。特别是在大规模分布式系统中，LVS的DR和TUN模式能够有效克服传统NAT模式的局限性，提供更高的性能和更大的灵活性。\n3.2 性能优势 LVS在高并发和低延迟方面展现出卓越的性能，这主要归功于其独特的架构设计和工作模式。作为一个专门用于构建高性能服务器集群的解决方案，LVS特别擅长处理大规模并发请求，同时保持极低的延迟。\nLVS的性能优势主要体现在以下几个方面：\n内核级别实现 ：LVS的核心代码运行在操作系统内核空间，这意味着它能够以非常高的效率执行请求分发操作。这种设计使得LVS能够快速处理大量并发请求，同时保持极低的系统开销。\nDR模式的高效性 ：在DR(Direct Routing)模式下，LVS展现出了尤为出色的性能。由于请求和响应可以直接在后端服务器和客户端之间传输，LVS只需负责请求分发，而不参与后续的数据传输过程。这种设计极大地提高了系统的整体吞吐量，同时显著降低了延迟。实测数据显示，在DR模式下，LVS能够轻松处理每秒数万甚至数十万的请求，同时保持微秒级别的响应时间。\n灵活的负载均衡算法 ：LVS支持多种负载均衡算法，包括但不限于：\n轮询(Round Robin) ：将请求按顺序轮流分配给后端服务器。 最少连接(Least Connections) ：将新的请求分配给当前连接数最少的服务器。 加权轮询(Weighted Round Robin) ：根据服务器的处理能力，给予不同的权重值。 这种灵活性使得LVS能够根据不同的应用场景和服务器配置，选择最适合的算法来优化系统的整体性能。\n可扩展性强 ：LVS的一个显著特点是易于扩展。当业务量增长时，管理员可以简单地向集群中添加新的服务器，而无需对现有系统架构进行重大修改。这种平滑的扩展能力使得LVS能够很好地适应各种规模的高并发场景，从小型网站到大型数据中心都能找到合适的应用。 通过这些特性，LVS成功地在高并发和低延迟这两个看似矛盾的要求之间找到了平衡点，为各种复杂的网络环境提供了高效、可靠的负载均衡解决方案。\n3.3 应用场景 LVS作为一种强大的负载均衡解决方案，在多个行业和场景中都发挥着关键作用。其高度的灵活性和可扩展性使其能够适应各种复杂的需求，尤其是在大型网站和数据中心等领域表现突出。\nLVS的主要应用场景包括：\n大型门户网站 ：这类网站通常面临巨大的并发访问压力，LVS的DR模式能够有效分散请求，提高响应速度。例如，假设一个新闻门户每天吸引数百万独立访客，LVS可以通过将请求智能分发到多个后端服务器，确保每个用户都能获得流畅的浏览体验。\n电子商务平台 ：在促销活动期间，电商平台可能瞬间涌入海量订单。LVS的WLC算法可以根据服务器负载情况动态分配请求，有效应对突发流量高峰。假如双11期间，某电商网站的订单量激增10倍，LVS可以帮助平台平稳度过高峰期，保证交易顺利进行。\n云计算数据中心 ：LVS的TUN模式特别适合跨地域的负载均衡需求。通过IP隧道技术，LVS可以在不同地理位置的数据中心间实现高效的流量分发。例如，一家跨国公司在亚洲和美洲设有数据中心，LVS可以帮助他们实现全球范围内的流量优化，确保用户无论身在何处都能获得最佳的服务体验。\nCDN(Content Delivery Network) ：LVS的地理感知功能可以将内容请求导向最近的边缘节点，大幅减少延迟。假如一家视频流媒体服务商在全球范围内部署了CDN节点，LVS可以帮助他们实现内容的快速分发，确保用户观看高清视频时的流畅体验。\nAPI网关 ：随着微服务架构的普及，LVS作为API网关的负载均衡器，可以有效地管理和分发大量的API调用请求。例如，一个金融服务平台可能有数百个微服务，LVS可以帮助他们实现API请求的智能路由和负载均衡，提高整体系统的稳定性和响应速度。\n通过这些应用场景，我们可以看到LVS在处理高并发、大流量和复杂网络环境下的出色表现。无论是传统的Web服务，还是新兴的技术趋势，LVS都能够提供可靠、高效的负载均衡解决方案。\n4. Nginx特性分析 4.1 功能多样性 Nginx作为一款功能强大的Web服务器和反向代理工具，其功能多样性是其在负载均衡领域脱颖而出的关键特征之一。这种多样性不仅体现在Nginx能够胜任多种角色，还反映在其能够满足不同层次的需求，从简单的静态文件服务到复杂的微服务架构管理。\nNginx的功能多样性主要表现在以下几个方面：\n反向代理 ：Nginx可以作为反向代理服务器，接收客户端的请求，并将请求转发到后端的真实服务器上。这种设计不仅可以隐藏后端服务器的IP地址，还可以实现负载均衡和缓存加速等功能。\n负载均衡 ：Nginx内置了多种负载均衡算法，如轮询、最少连接和IP哈希等。这些算法可以根据不同的场景需求，将请求合理地分发到后端服务器群中，提高系统的整体处理能力和可用性。\n缓存加速 ：Nginx支持HTTP缓存功能，可以将静态资源或动态页面缓存在本地，减少后端服务器的负载，提高响应速度。通过设置合适的缓存策略，可以显著改善用户体验，同时减轻后端服务器的压力。\nSSL/TLS终止 ：Nginx可以作为SSL/TLS终止点，接收HTTPS请求并进行加密解密，然后将明文请求转发给后端服务器。这种设计可以减轻后端服务器的负担，提高系统的整体性能和安全性。\n安全过滤 ：Nginx可以通过配置实现安全过滤功能，如防止恶意请求、DDoS攻击和SQL注入等。通过设置访问控制规则和限制请求频率，可以有效提高系统的安全性。\n模块化设计 ：Nginx采用了模块化的设计理念，允许用户根据需要选择和安装所需的模块。这种设计不仅提高了系统的灵活性，还使得Nginx能够适应各种复杂的网络环境和业务需求。\nAPI网关 ：在微服务架构中，Nginx可以作为API网关，实现API请求的路由和负载均衡。通过配置location匹配规则和upstream后端服务器池，Nginx可以将不同的API请求分发到相应的后端服务，实现高效的API管理。\n动静分离 ：Nginx可以轻松实现动静分离，将静态资源和动态内容分开处理。这种设计不仅可以提高系统的响应速度，还能更好地利用硬件资源，提高整体的性能和可扩展性。\n通过这些多样化的功能，Nginx不仅能够满足基本的Web服务器需求，还能胜任复杂的负载均衡和反向代理任务。这种多功能性使得Nginx成为了现代Web架构中不可或缺的一部分，能够适应各种规模和类型的网络应用。\n4.2 配置灵活性 Nginx以其高度的配置灵活性而闻名，这种灵活性在URL重写和内容缓存等方面得到了充分体现。这种灵活性使得Nginx能够适应各种复杂的网络环境和业务需求，成为负载均衡和反向代理领域的佼佼者。\nNginx的配置灵活性主要体现在以下几个方面：\nURL重写 Nginx的URL重写功能允许管理员精确控制请求的流向。通过使用正则表达式，Nginx可以将复杂的URL模式映射到新的目标。例如，可以将所有以\u0026quot;/old/\u0026ldquo;开头的请求重写为\u0026rdquo;/new/\u0026quot;：\nlocation /old/ { rewrite ^/old/(.*)$ /new/$1 last; } 这种重写不仅可以用于网站重构时的无缝过渡，还可以实现SEO优化或安全性的提升。\n内容缓存 Nginx的内容缓存机制提供了精细的控制粒度。管理员可以为不同类型的内容设置不同的缓存策略：\nlocation /images/ { proxy_cache images_cache; proxy_cache_valid 200 302 1h; proxy_cache_valid 404 1m; } 这段配置表明，对于/images/目录下的内容，Nginx会将其缓存在名为images_cache的缓存区域中。成功的响应（状态码200或302）会被缓存1小时，而404错误则仅缓存1分钟。这种差异化处理可以显著提高静态资源的响应速度，同时避免因缓存过期造成的无效请求。\n模块化设计 Nginx的模块化设计进一步增强了其配置的灵活性。管理员可以选择性地启用或禁用特定模块，以适应不同的部署环境和需求。例如，可以通过加载http_gzip_module模块来启用gzip压缩功能：\nload_module modules/ngx_http_gzip_module.so; 这种模块化的方法不仅提高了Nginx的性能，还使得系统维护变得更加容易。\n通过这些特性，Nginx展现了其在配置灵活性方面的卓越表现，使其能够满足各种复杂的网络需求，从简单的Web服务器到复杂的负载均衡和反向代理场景。\n4.3 模块化架构 Nginx的模块化架构是其设计哲学的核心，这种设计不仅提高了系统的可扩展性，还增强了定制化能力。这种模块化设计使得Nginx能够成为一个高度灵活的负载均衡解决方案，能够满足各种复杂的需求。\nNginx的模块化架构主要体现在以下几个方面：\n模块类型划分 ：Nginx将模块划分为六种类型：核心模块、配置模块、事件模块、HTTP模块、mail模块和stream模块。这种分类使得各个功能域相互独立，便于管理和维护。\n模块接口标准化 ：Nginx定义了一套统一的模块接口，使得新模块的开发变得简单易行。每个模块都遵循相同的接口规范，包括初始化、配置解析和请求处理等生命周期方法。这种标准化不仅简化了模块开发流程，还有助于提高整个系统的稳定性。\n动态加载机制 ：Nginx支持动态加载模块，无需重新编译整个程序就能扩展功能。这种灵活性使得Nginx能够轻松适应不断变化的需求，同时也降低了升级和维护的成本。\n模块间的协作 ：虽然各模块相对独立，但它们之间可以通过预定义的接口进行通信和协作。例如，HTTP模块可以调用负载均衡模块来分发请求，而负载均衡模块又可以利用事件模块来监控后端服务器的状态。这种松耦合的设计既保证了模块的独立性，又实现了功能的有效集成。\n模块化配置 ：Nginx的配置文件也采用了模块化的方式组织。管理员可以将不同功能的配置项分组到不同的文件中，然后通过include指令合并到主配置文件中。这种做法不仅提高了配置的可读性和可维护性，还使得配置变更变得更加灵活。\n通过这种模块化设计，Nginx成功地在保持核心功能轻量级的同时，提供了丰富的扩展能力。这种设计思想使得Nginx能够成为一个强大而灵活的负载均衡解决方案，能够满足从简单Web服务器到复杂微服务架构的各种需求。\n5. HAProxy特性分析 5.1 协议支持 HAProxy在协议支持方面展现出了卓越的灵活性和功能性，尤其在第4层和第7层负载均衡之间取得了良好的平衡。这种双重能力使得HAProxy能够适应各种复杂的网络环境和业务需求，成为负载均衡领域的佼佼者。\nHAProxy的协议支持主要体现在以下几个方面：\n第4层负载均衡 ：HAProxy在这一层面上主要基于IP和端口进行流量分发。这种模式特别适合处理大规模的TCP连接，尤其在处理高并发请求时表现出色。HAProxy的4层负载均衡功能使其能够轻松应对各种网络协议，如HTTP、FTP、SMTP等。\n第7层负载均衡 ：HAProxy在这里展现出了更强的智能化和精细化控制能力。通过分析HTTP请求的URL、Cookie等信息，HAProxy能够做出更精准的流量分发决策。这种能力使得HAProxy特别适合处理复杂的Web应用，特别是需要会话保持或内容分发的应用场景。\n会话保持 ：HAProxy的会话保持功能是其一大亮点。通过分析HTTP请求中的Cookie或其他标识信息，HAProxy能够确保来自同一用户的请求被定向到同一台后端服务器。这对于需要保持用户状态的应用（如购物车功能）至关重要。\nSSL卸载 ：HAProxy还支持SSL卸载功能，这意味着它可以在负载均衡器层面处理HTTPS请求的加密解密工作，从而减轻后端服务器的负担。这不仅提高了系统的整体性能，还增强了安全性。\n高级路由规则 ：HAProxy的ACL（Access Control List）功能允许管理员设置复杂的路由规则。通过这些规则，HAProxy可以根据请求的来源、内容等多维度信息进行智能分发，实现了高度定制化的负载均衡策略。\n通过这些特性，HAProxy成功地在第4层和第7层负载均衡之间找到了平衡点，既能处理大规模的网络流量，又能满足复杂应用的需求。这种灵活性使得HAProxy成为许多企业和开发者首选的负载均衡解决方案。\n5.2 会话保持 HAProxy的会话保持机制是其在负载均衡领域的一大亮点，尤其适用于需要持续会话状态的Web应用。这种机制确保了来自同一用户的请求始终被定向到同一台后端服务器，从而保证了会话的一致性和连续性。\nHAProxy实现会话保持的主要方式包括：\n基于cookie的会话保持 ：HAProxy通过分析HTTP请求中的cookie信息来识别和跟踪会话。当一个新的请求到来时，HAProxy会检查请求中的cookie，如果存在，就会根据cookie的值将请求定向到相应的后端服务器。如果没有找到匹配的cookie，HAProxy会选择一台可用的服务器处理请求，并在响应中插入一个新的cookie，以便后续请求能够被正确路由。\n基于源IP的会话保持 ：这种方式通过将客户端的IP地址与其会话关联起来，实现会话保持。然而，这种方法在实际应用中可能存在一些限制，特别是考虑到NAT设备的广泛使用，可能导致多个用户共享同一个公网IP地址的情况。\n基于URL参数的会话保持 ：这种方法通过在URL中添加特定的参数来实现会话保持。然而，这种方法也有其缺点，主要是当URL发生变化时，可能会导致会话保持失效。\n在实际应用中，基于cookie的会话保持方式因其灵活性和可靠性而被广泛应用。HAProxy提供了多种cookie处理选项，如insert、rewrite和prefix，以适应不同的应用场景需求。例如，使用insert模式时，HAProxy会在响应中插入一个新的cookie，其中包含了后端服务器的标识符。这样，当客户端再次发起请求时，HAProxy可以根据这个cookie将请求定向到正确的服务器。\n会话保持在某些特定的应用场景中尤为重要，如：\n电子商务平台 ：确保用户在浏览商品、添加到购物车和最终完成购买的过程中，始终保持在同一台服务器上，以保证购物车内容的一致性。 银行系统 ：在涉及资金转账或账务查询等敏感操作时，会话保持可以确保用户的所有相关请求都在同一台服务器上处理，提高交易的安全性和可靠性。 在线教育平台 ：在直播课程或互动教学过程中，会话保持可以确保学生与教师之间的实时交互始终保持在同一服务器上，避免因负载均衡而导致的教学中断或数据不一致。 通过这些特性，HAProxy成功地解决了负载均衡与会话保持之间的矛盾，为各种需要持续会话状态的应用提供了强有力的支持。\n5.3 监控和统计 HAProxy的监控和统计功能是其在负载均衡领域的一大亮点，为运维人员提供了全面而深入的洞察力。这些功能不仅有助于实时监控系统状态，还为优化负载均衡策略提供了宝贵的依据。\nHAProxy的监控功能主要包括以下几个方面：\n内置统计页面 ：HAProxy提供了一个功能丰富的内置统计页面，可通过简单的配置启用。这个页面展示了几乎实时的系统运行状态和性能指标，覆盖了前端、后端和服务器等多个维度。例如，管理员可以通过以下配置启用统计页面： frontend stats bind *:8404 stats enable stats uri /stats stats refresh 10s 这个配置将在8404端口开放一个统计页面，每10秒自动刷新一次。\n详细的指标体系 ：统计页面提供了丰富的指标数据，包括但不限于： 会话速率 ：当前每秒创建的会话数，反映了系统的即时负载情况。 最大会话速率 ：历史最高会话创建速率，有助于评估系统的峰值负载。 请求速率 ：当前每秒处理的请求数，直接反映了系统的处理能力。 最大请求速率 ：历史最高的请求处理速率，可用于评估系统的极限处理能力。 这些指标为运维人员提供了系统性能的实时快照，有助于及时发现潜在的性能瓶颈。\n高级监控功能 ：除了基本的统计信息外，HAProxy还提供了高级的监控功能。例如，管理员可以通过设置ACL（访问控制列表）来限制对统计页面的访问，增加系统的安全性。同时，HAProxy还支持通过stats admin指令远程管理后端服务器，如将服务器置于维护模式或从流量中排除，大大提升了运维的灵活性和效率。\n与其他监控工具的集成 ：HAProxy的统计信息可以通过stats socket导出，方便与Prometheus、Grafana等第三方监控工具集成。这种集成不仅提供了图形化的监控界面，还支持设置告警阈值，实现自动化监控和预警。\n通过这些功能，HAProxy为运维人员提供了全方位的系统监控视图，使他们能够快速定位问题、优化负载均衡策略，并在系统出现异常时及时采取行动，从而保障系统的稳定运行和性能优化。\n6. 三者对比与选择 在负载均衡领域，LVS、Nginx和HAProxy各自展现出独特的性能优势。本节将从并发处理能力、响应时间和资源利用率等关键指标出发，深入探讨这三种负载均衡器的性能差异。\nLVS凭借其内核级实现和DR模式的独特设计，在高并发场景下表现卓越。实测数据显示，LVS在DR模式下能够轻松处理每秒数万至数十万的请求，同时保持微秒级别的响应时间。这种惊人的性能主要得益于LVS的内核级实现，最大限度地减少了系统开销，确保了高效的请求分发。\n相比之下，Nginx虽然在处理静态内容和高并发方面表现出色，但其性能仍不及LVS。Nginx的并发处理能力通常在几千到几万次请求/秒范围内，这虽然足以满足大多数Web应用的需求，但在极端高并发场景下可能略显不足。Nginx的优势在于其优秀的资源利用率，特别是在处理静态内容时，能够以较低的内存占用提供高效的缓存和加速服务。\nHAProxy在性能方面介于LVS和Nginx之间。它在处理高并发HTTP请求时表现出色，能够达到接近LVS的水平，同时提供更丰富的功能和配置选项。HAProxy的优势在于其灵活的负载均衡算法和会话保持机制，这使得它在处理复杂Web应用时更具优势。\n从响应时间角度来看，LVS由于其内核级实现，通常能提供最低的延迟。Nginx和HAProxy虽然在应用层工作，但由于采用了高效的事件驱动模型，也能保持较低的响应时间。然而，在处理复杂的HTTP请求时，尤其是涉及到会话保持和内容分发时，HAProxy可能会略微领先于Nginx。\n在资源利用率方面，LVS由于其轻量级设计，通常能以更低的CPU和内存占用提供服务。Nginx虽然在处理静态内容时表现出色，但在处理动态内容时可能会消耗更多资源。HAProxy在这方面的表现较为平衡，能在提供丰富功能的同时保持较好的资源利用率。\n通过这些性能对比，我们可以看出LVS、Nginx和HAProxy各有优势：\nLVS ：适合处理极高并发的简单请求，特别适用于大型数据中心和CDN场景。 Nginx ：在处理静态内容和中等规模并发方面表现出色，适合用作Web服务器和反向代理。 HAProxy ：在提供高级功能和高并发处理能力之间取得了良好平衡，特别适合需要复杂负载均衡策略和会话保持的应用场景。 选择合适的负载均衡器时，应根据具体的应用需求和技术栈进行全面考量，以确保最佳的性能和可靠性。\n","permalink":"http://klxq666.fun/posts/blog/network/load_balancing/","summary":"1. 介绍 负载均衡是一种在多个服务器之间分配工作负载的技术，通过分发请求来确保没有一台服务器因过载而导致性能下降或服务不可用。 它的主要目的是提高应用程序的可用性和可靠性，从而提供更好的用户体验。 \u0026mdash;\u0026mdash;\u0026mdash;相关的算法 2. 常见负载均衡技术 在负载均衡领域，LV","title":"负载均衡"},{"content":"1. 相关常识 1.1 VPN 交换机 路由器 VPN（Virtual Private Network，虚拟私人网络）是一种常用于增强网络安全和隐私保护的技术。 VPN通过在公共网络（如互联网）上建立一个加密的、安全的隧道来实现私有网络的连接，允许用户在远程位置安全地访问内部网络资源，就好像他们直接连接到内部网络一样。\n交换机主要用于局域网内部的数据传输，而路由器用于连接不同网络并进行数据包的路由选择。\n1.2 NAT NAT（Network Address Translation，网络地址转换）是一种在网络中广泛使用的技术，它允许将私有IP地址转换为公共IP地址，以实现内部网络与外部网络之间的通信。\n同时转换IP 和端口的技术，就是NAPT（Network Address Port Transfer , 网络地址端口转换\n1.3 TCP/IP协议栈 TCP/IP协议栈，也称为互联网协议套件，是一组用于实现网络通信的协议，它们共同工作以确保数据在网络中的传输。TCP/IP协议栈基于四个抽象层次模型构建，每一层都有特定的功能和协议。以下是TCP/IP协议栈的四个层次及其主要协议：\n1.链路层（Link Layer）： 这一层负责在物理媒介上传输原始的比特流。它包括物理层（Physical Layer）和数据链路层（Data Link Layer）。 主要协议：以太网（Ethernet）、无线局域网（WLAN）、点对点协议（PPP）、串行线互联网协议（SLIP）等。 2.网络层（Internet Layer）： 网络层负责从源头到目的地的数据包传输和路由选择。 主要协议：互联网协议（IP）、互联网控制消息协议（ICMP）、地址解析协议（ARP）、逆向地址解析协议（RARP）等。 3.传输层（Transport Layer）： 传输层负责提供端到端的数据传输服务，确保数据的完整性和可靠性。 主要协议：传输控制协议（TCP）和用户数据报协议（UDP）。 4.应用层（Application Layer）： 应用层为应用软件提供网络服务，包括各种高级协议，用于处理特定的应用程序需求。 主要协议：超文本传输协议（HTTP）、文件传输协议（FTP）、电子邮件协议（SMTP）、域名系统（DNS）、远程登录协议（Telnet/SSH）等。 每一层都为上一层提供服务，并且依赖于下一层的功能。数据在从源到目的地的传输过程中，会从应用层开始，逐层向下封装，到达目的主机后，再逐层向上解封装，最终送达目标应用程序。\n数据封装和解封装过程 封装过程： 应用层：应用程序将数据封装成应用层协议的数据单元。 传输层：将应用层数据单元封装成传输层协议的数据单元，TCP协议还会分段，UDP协议则直接封装。 网络层：将传输层数据单元封装成网络层协议的数据单元，如IP报文。 数据链路层：将网络层数据单元封装成数据链路层协议的数据单元，如以太网帧9。 解封装过程：接收方接收到数据后，按照与封装相反的顺序，从链路层开始逐层解封装，最终将数据交给应用层程序处理10。 TCP/IP协议栈的重要性 标准化通信： TCP/IP协议定义了一套标准的通信规则和格式，使得不同厂商生产的设备和软件能够在同一个网络中相互通信。无论是在局域网、广域网还是互联网中，只要遵循TCP/IP协议，设备就能互相识别和交流。 分层架构和模块化设计： TCP/IP协议采用分层架构和模块化设计，每一层负责特定的功能。这种设计使得协议易于理解和实现，同时也方便了故障排查和性能优化。各层之间的独立性还允许开发人员在某一层次上进行改进而不影响其他层次。 端到端通信和可靠传输： TCP协议在传输层提供了端到端的可靠通信。它通过确认机制、重传丢失的数据包、流量控制和拥塞控制等手段，确保数据从发送方准确无误地到达接收方。这对于需要高可靠性的应用（如文件传输、电子邮件）非常重要。 ","permalink":"http://klxq666.fun/posts/blog/network/network-cs/","summary":"1. 相关常识 1.1 VPN 交换机 路由器 VPN（Virtual Private Network，虚拟私人网络）是一种常用于增强网络安全和隐私保护的技术。 VPN通过在公共网络（如互联网）上建立一个加密的、安全的隧道来实现私有网络的连接，允许用户在远程位置安全地访问内部网络资源，就好像他们直接连接到内部网络一样。","title":"网络的基础知识"},{"content":"1. 常用命令 sy 进入系统视图 q 退出当前视图 undo 撤销或反向操作对应命令 shutdown 关闭当前接口 restart 重新启动当前接口 dis 查看相应对象信息 display this 显示当前信息。 display interface 查看接口当前运行状态和接口统计信息 display vlan 显示vlan信息 1.查看交换机的端口使用情况 dis interface brief 2.查看交换机虚拟接口对应ip地址使用情况 dis ip int brief 显示虚拟接口对应的ip地址与使用状态 2. 举例 为一栋楼搭建一个简单的三层交换网络\n三层交换机 配上vlan ，vlan 是一种隔离技术 1.隔离广播 2.隔离故障\n在三层交换机上先添加3个vlan 命令：\n\u0026lt;Huawei\u0026gt;sy 回车，进入配置模式 undo in en 关闭英文提示（可选） [Huawei] vlan 10 [Huawei] vlan 20 [Huawei] vlan 30 然后在指定端口到对应vlan\n[Huawei]interface G0/0/1 port link-type access port default vlan 10 [Huawei]interface G0/0/2 port link-type access port default vlan 20 [Huawei]interface G0/0/1 port link-type access port default vlan 30 vlan的接口类型，常用的有两种 access: 只需要连接1个vlan,用access trunk : 需要连接多个vlan,用trunk\n再把三层交换机，配成用户的网关\n二层交换机与三层交换机的区别 最关键的区别是具有三层功能，什么是三层功能 三层功能，就是帮助不同网段做数据转发的功能，也叫路由功能\n在此实验中，用三层交换机作为pc的网关，分两步\n1.在pc上，填上网关的ip，192.168.1.254 2.在三层交换机上，给vlan 10 配个ip，配192.168.1.254\n这样，这台三层交换机，就能作为vlan 10 下的pc的网关了\n如何给交换机配telnet远程访问管理地址呢？ 1.规范起见，单独规划一个管理vlan,配上ip,配好路由 2.简单操作的话，用默认的vlan 1,或用现有的业务vlan,也行，不推荐\n","permalink":"http://klxq666.fun/posts/blog/network/huawei_switch/","summary":"1. 常用命令 sy 进入系统视图 q 退出当前视图 undo 撤销或反向操作对应命令 shutdown 关闭当前接口 restart 重新启动当前接口 dis 查看相应对象信息 display this 显示当前信息。 display interface 查看接口当前运行状态和接口统计信息 display vlan 显示vlan信息 1.查看交换机的端口使用情况 dis interface brief 2.查看交换机虚拟接口对应ip地址使用情况 dis ip int brief 显示虚拟","title":"华为交换机的基础知识"},{"content":"关于我\n作为 Microsoft、Google、Intel、NVIDIA、Qualcomm、中国电信、阿里巴巴集团、百度、腾讯、京东、哔哩哔哩、招商银行、台湾华硕股份、深圳万普拉斯科技、中国证监局、国家电网、中国铁路局等数十家国内外企业的投资人之一，并且保持着长期稳定的贸易与投资关系，每年助力企业产生数百亿的交易额的同时，为人低调普通！\n有趣的网址\n今日热榜 聚了数十个网站的热点信息 阮一峰的网络日志 阮一峰，科技爱好者周刊。 酷 壳 酷 壳–CoolShell。 ","permalink":"http://klxq666.fun/about/","summary":"关于我 作为 Microsoft、Google、Intel、NVIDIA、Qualcomm、中国电信、阿里巴巴集团、百度、腾讯、京东、哔哩哔哩、招商银行、台湾华硕股份、深圳万普拉斯科技、中国证监局、国家电网、中国铁路局等数十家国内外企业的投资人之一，并且保持着长期稳定的贸易与投资关系","title":"🙋🏻‍♂️与🕸"},{"content":"使用rsync在Windows（服务端）与Linux （客户端）之间的同步 （同一局域网内）\n环境：\n1、cwRsyncServer服务端 系统：Windows7 IP地址：192.168.8.55 2、Rsync客户端 系统：CentOS 6.7 IP地址：192.168.243.158 实现目的：\nRsync客户端每天凌晨5:00自动同步cwRsyncServer服务端G:\\rsyncfile目录中的数据到自己的/opt/rsync目录中\n一、cwRsyncServer服务端配置 1，下载安装 https://www.backupassist.com/rsync/\n除以下三条信息，其他默认即可\nService account：test （新建的一个系统账户-自定义）\nType password：123456（密码自定义）\nConfirm password：123456（密码自定义）\n备注：系统会自动创建一个账户：test来运行cwRsyncServer服务端程序\nInstall （安装）\n2，修改设置 开始-计算机-右键-管理 -服务\n找到RsyncServer选项，双击打开 ，设置启动类型-自动 并启动该服务\n3，创建好要同步的目录并设好配置文件 创建 G:\\rsyncfile 找到cwRsyncServer的配置文件 rsyncd.conf，并修改如下：\nuse chroot = false strict modes = false hosts allow = * log file = rsyncd.log # Module definitions # Remember cygwin naming conventions : c:\\work becomes /cygwin/c/work # [rsyncfile] path = /cygdrive/g/rsyncfile read only = false transfer logging = yes auth users = test secrets file = etc/rsyncd.secrets UID = 0 GID = 0 --解读-- 注意path路径，path = /cygdrive/是固定的，不要改，后面连接的g/rsyncfile， 则是我们刚才所建的目录路径，刚才我是建在G盘的，目录为rsyncfile。 read only = true #客户端只读 list = no #不允许列出文件 hosts allow=192.168.0.141 #允许连接IP，多个IP中间用英文状态下逗号隔，不限制IP填写*即可 auth users =test #允许连接的用户名 secrets file = etc/rsyncd.secrets #存放用户名密码的认证文件路径 进入：G:\\rsyncserver\\ICW\\etc，创建文件：rsyncd.secrets，\n文件里输入test:123456，test是同步帐号，123456是同步密码\n二、Rsync客户端配置 1、安装Rsync客户端软件 yum install rsync -y\n2、测试 Rsync客户端是否与cwRsyncServer服务端通信成功\n（cwRsyncServer服务端防火墙需要开启tcp 873端口）\nyum install telnet #安装telnet测试工具 telnet 192.168.243.158 873 #输入命令后回车，如下图所示，表示通信成功 3、测试数据同步 rsync -vzrtopg --port=873 --progress --delete test@192.168.8.55::rsyncfile /opt/rsync 4、添加计划任务，每天自动执行数据同步脚本 vi /etc/passwd.txt #配置文件，添加以下内容 123456 #密码 :wq! #保存退出 chmod 600 /etc/passwd.txt #设置文件权限，只设置文件所有者具有读取、写入权限即可 vim rsyncbak.sh #编辑，添加以下内容 #!/bin/sh rsync -vzrtopg --port=873 --progress --delete test@192.168.0.110::rsyncfile /tmp/rsync --password-file=/etc/passwd.txt :wq! #保存，退出 chmod +x /shell/rsyncbak.sh #添加脚本直接权限 crontab -e 0 5 * * * sh /shell/rsyncbak.sh \u0026gt; /var/log/rsyncbak.txt 2\u0026gt;\u0026amp;1 设置完成之后，每天凌晨5点，Rsync客户端会自动同步cwRsyncServer服务端G:\\rsyncfile目录数据到自己的/opt/rsync目录中\n至此，CentOS客户端与Windows服务端实现数据同步设设置完成\n参考链接： https://www.cnblogs.com/01-single/p/8652597.html\n","permalink":"http://klxq666.fun/posts/blog/windows_rsync_linux/","summary":"使用rsync在Windows（服务端）与Linux （客户端）之间的同步 （同一局域网内） 环境： 1、cwRsyncServer服务端 系统：Windows7 IP地址：192.168.8.55 2、Rsync客户端 系统：CentOS 6.7 IP地址：192.168.243.158 实现目的： Rs","title":"使用rsync在Windows（服务端）与Linux （客户端）之间的同步"},{"content":"1.本地hugo博客搭建 1.电脑安装hugo 2.新建站点 3.下载主题 4.本地启动博客 在终端直接输入hugo server -D就可以在本地预览了，本地预览网址为 localhost:1313，\n输入hugo就可以生成public文件夹，这个文件夹可以部署到云服务器或者托管到github上，\n注意：输入hugo的生成方式只会往public文件夹里添加内容，但是不会删除外部已经不存在而public里面还存在的文件; 如果用\nhugo -F --cleanDestinationDir 表示每次生成的public都是全新的，会覆盖原来的。\n5.编辑文章 输入hugo new 文章名称.md就会在content目录下生成 “文章名称.md” 名字的文件，所有文章都是放在content这个文件夹里\n如果自己还定义了分类目录，如在content目录的posts目录下有blog、read、tech、life等文章分类，那么在用命令生成文章的时候，如果要把文章生成到指定目录，可以用命令：hugo new posts/tech/文章名称.md，这样就会把文章生成到tech目录下\n生成的文章内部头部配置信息包括一些文章名称，时间之类的信息，可以事先在目录archetypes/default.md下使用模板，这样在用命令hugo new生成文章后会自动加上模板里的配置\n我的模板如下（里面有一些字段是我自己自定义的，不是papermod默认带有的，直接使用该字段可能会无效，请酌情使用）:\n（注意：这是PaperMod主题的配置，通用的请看 官方文档的Front Matter配置 或各个主题自己的配置）\n如果自己还定义了分类目录，如在content目录的posts目录下有blog、read、tech、life等文章分类，那么在用命令生成文章的时候，如果要把文章生成到指定目录，可以用命令：hugo new posts/tech/文章名称.md，这样就会把文章生成到tech目录下\n生成的文章内部头部配置信息包括一些文章名称，时间之类的信息，可以事先在目录archetypes/default.md下使用模板，这样在用命令hugo new生成文章后会自动加上模板里的配置\n我的模板如下（里面有一些字段是我自己自定义的，不是papermod默认带有的，直接使用该字段可能会无效，请酌情使用）:\n（注意：这是PaperMod主题的配置，通用的请看 官方文档的Front Matter配置 或各个主题自己的配置）\n--- title: \u0026#34;{{ replace .Name \u0026#34;-\u0026#34; \u0026#34; \u0026#34; | title }}\u0026#34; #标题 date: {{ .Date }} #创建时间 lastmod: {{ .Date }} #更新时间 author: [\u0026#34;Chenxi\u0026#34;] #作者 categories: - 分类1 - 分类2 tags: - 标签1 - 标签2 description: \u0026#34;\u0026#34; #描述 weight: # 输入1可以顶置文章，用来给文章展示排序，不填就默认按时间排序 slug: \u0026#34;\u0026#34; draft: false # 是否为草稿 comments: true #是否展示评论 showToc: true # 显示目录 TocOpen: true # 自动展开目录 hidemeta: false # 是否隐藏文章的元信息，如发布日期、作者等 disableShare: true # 底部不显示分享栏 showbreadcrumbs: true #顶部显示当前路径 cover: image: \u0026#34;\u0026#34; #图片路径：posts/tech/文章1/picture.png caption: \u0026#34;\u0026#34; #图片底部描述 alt: \u0026#34;\u0026#34; relative: false --- ———————————————— 2.部署到服务器 将目录下的public文件夹打包部署到云服务器即可\n参考链接： https://www.sulvblog.cn/posts/blog/build_hugo/\n","permalink":"http://klxq666.fun/posts/webnas/make_blog/","summary":"1.本地hugo博客搭建 1.电脑安装hugo 2.新建站点 3.下载主题 4.本地启动博客 在终端直接输入hugo server -D就可以在本地预览了，本地预览网址为 localhost:1313， 输入hugo就可以生成public文件夹，这个文件夹可以部署到云服务器或者托管到github上， 注意：输","title":"搭建hugoblog"},{"content":"https://\n","permalink":"http://klxq666.fun/posts/blog/blog/","summary":"https://","title":"Blog"},{"content":"docker 部署ttrss\n1.简介 Tiny Tiny RSS（tt-rss）是一个开源的RSS阅读器，它具有易于使用的用户界面和强大的功能。tt-rss可以运行在各种操作系统上，包括Windows、Mac OS X和Linux。\n2.安装 前提安装好Docker与docker compose\n提前拉取镜像\ndocker pull wangqiru/ttrss:latest \u0026amp;\u0026amp; docker pull wangqiru/mercury-parser-api:latest \u0026amp;\u0026amp; docker pull wangqiru/opencc-api-server:latest \u0026amp;\u0026amp; docker pull postgres:13-alpine cd /data/docker/ttrss;vi docker-compose.yml\n配置docker-compose.yml文件\nversion: \u0026#34;3\u0026#34; services: service.rss: image: wangqiru/ttrss:latest container_name: ttrss ports: - 3838:80 # 按需修改 environment: - SELF_URL_PATH=https://klxq.fun/ # 按需修改 - DB_PASS=ipbuff@QW8F8 # 按需修改。与下面的密码对应 volumes: - ./feed-icons:/var/www/feed-icons/ networks: - public_access - service_only - database_only stdin_open: true tty: true restart: always service.mercury: image: wangqiru/mercury-parser-api:latest container_name: mercury networks: - public_access - service_only restart: always service.opencc: image: wangqiru/opencc-api-server:latest container_name: opencc environment: - NODE_ENV=production networks: - service_only restart: always database.postgres: image: postgres:13-alpine container_name: postgres environment: - POSTGRES_PASSWORD=ipbuff@QW8F8 # 按需修改。与上面的密码对应 volumes: - ./db/:/var/lib/postgresql/data networks: - database_only restart: always networks: public_access: service_only: internal: true database_only: internal: true 启动 docker-compose up -d 查看日志 docker-compose logs -f 改变文件夹的权限 chmod -R 777 /data/docker/ttrss/feed-icons/ 重启 docker-compose restart 会启动四个docker容器 Tiny Tiny RSS 本身，监听端口为 0.0.0.0:3838 → 80，同时暴露给外网 PostgreSQL 数据库服务 Mercury 全文抓取服务 OpenCC 简体、繁体中文转换服务 3. 登录ttrss页面设置 访问地址：http://klxq.fun:3838\n默认账号：admin\n密码：password\n启用外部api\n为了多平台使用\n#启用Fever插件#\n保证多客户端的实时进度同步\n如果你有时在电脑上看RSS，有时有手机上看RSS，推荐你使用支持Fever API的手机APP。 此外，你可以用bitwarden生成一个新的密码并填入Set Password前面的空格中，记得点击Set Password保存。 这个密码主要是在手机客户端通过Fever API订阅时需要用。你也可以设置得简单点，或者干脆设置和帐号一样的密码，看你喜欢。 Fever API的密码与帐号密码是相互独立的。 启用其他插件 配置OpenCC 配置全文阅读插件\n输入service.mercury:3000： 配置繁体转简体\n再次输入service.mercury:3000：\n4. 添加订阅源 互联网资讯\n整合互联网资讯媒体，偏重于前端科技、电子硬件、手机应用。\n36kr：https://rss.aishort.top/?type=36kr\n虎嗅网：https://rss.aishort.top/?type=huxiu\n艾瑞网：https://rss.aishort.top/?type=iresearch\n爱范儿|AppSolution：https://rss.aishort.top/?type=AppSolution\n奇思妙想\n每天吸收些稀奇古怪的知识，期待引发后续的灵机一动。\n果壳网：https://rss.aishort.top/?type=guokr\n知乎想法热榜：https://rss.aishort.top/?type=zhihu\n5. 推荐RSS阅读器 安卓 FeedMe\n这是它的GitHub地址\nhttps://play.google.com/store/apps/details?id=com.seazon.feedme 参考链接：\nhttps://blognas.hwb0307.com/linux/docker/788\nhttps://blog.laoda.de/archives/tinytinyrss/\nhttps://ttrss.henry.wang/zh/\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_ttrss/","summary":"docker 部署ttrss 1.简介 Tiny Tiny RSS（tt-rss）是一个开源的RSS阅读器，它具有易于使用的用户界面和强大的功能。tt-rss可以运行在各种操作系统上，包括Windows、Mac OS X和Linux。 2.安装 前提安装好Docker与docker compose 提前拉取镜像 docker pull wangqiru/ttrss:latest \u0026amp;\u0026amp; docker pull wangqiru/mercury-parser-api:latest \u0026amp;\u0026amp; docker pull wangqiru/opencc-api-server:latest \u0026amp;\u0026amp; docker","title":"docker 部署ttrss"},{"content":"深入分析，查找入侵原因\n一、检查隐藏帐户及弱口令 1.检查服务器系统及应用帐户是否存在 弱口令：\n检查说明：检查管理员帐户、数据库帐户、MySQL 帐户、tomcat 帐户、网站后台管理员帐户等密码设置是否较为简单，简单的密码很容易被黑客破解。 解决方法：以管理员权限登录系统或应用程序后台，修改为复杂的密码。 风险性：高。\n2.使用last命令查看下服务器近期登录的帐户记录，确认是否有可疑 IP 登录过机器： 检查说明：攻击者或者恶意软件往往会往系统中注入隐藏的系统帐户实施提权或其他破坏性的攻击。 解决方法：检查发现有可疑用户时，可使用命令usermod -L 用户名禁用用户或者使用命令userdel -r 用户名删除用户。 风险性：高。\n3.通过less /var/log/secure|grep ‘Accepted’命令，查看是否有可疑 IP 成功登录机器： 检查说明：攻击者或者恶意软件往往会往系统中注入隐藏的系统帐户实施提权或其他破坏性的攻击。 解决方法： 使用命令usermod -L 用户名禁用用户或者使用命令userdel -r 用户名删除用户。 风险性：高。\n4.检查系统是否采用 默认管理端口： 检查系统所用的管理端口（SSH、FTP、MySQL、Redis 等）是否为默认端口，这些默认端口往往被容易自动化的工具进行爆破成功。 解决方法： 在服务器内编辑/etc/ssh/sshd_config文件中的 Port 22，将22修改为非默认端口，修改之后需要重启 ssh 服务。\n当对端口进行修改时，需同时在 云服务器控制台 上修改对应主机的安全组配置，在其入站规则中，放行对应端口，详情请参见 添加安全组规则。 运行/etc/init.d/sshd restart（CentOS）或 /etc/init.d/ssh restart（Debian / Ubuntu）命令重启是配置生效。 3. 修改 FTP、MySQL、Redis 等的程序配置文件的默认监听端口21、3306、6379为其他端口。 限制远程登录的 IP，编辑/etc/hosts.deny 、/etc/hosts.allow两个文件来限制 IP。 风险性：高。 检查/etc/passwd文件，看是否有非授权帐户登录： 检查说明：攻击者或者恶意软件往往会往系统中注入隐藏的系统帐户实施提权或其他破坏性的攻击。 解决方法： 使用命令usermod -L 用户名禁用用户或者使用命令userdel -r 用户名删除用户。 风险性：中。\n二、检查恶意进程及非法端口 1.运行netstat –antlp查看下服务器是否有未被授权的端口被监听，查看下对应的 pid。\n检查服务器是否存在恶意进程,恶意进程往往会开启监听端口，与外部控制机器进行连接。 解决方法： 若发先有非授权进程，运行ls -l /proc/$PID/exe或file /proc/$PID/exe （$PID 为对应的 pid 号），查看下 pid 所对应的进程文件路径。 如果为恶意进程，删除下对应的文件即可。 风险性：高。\n2.使用ps -ef和top命令查看是否有异常进程 检查说明：运行以上命令，当发现有名称不断变化的非授权进程占用大量系统 CPU 或内存资源时，则可能为恶意程序。 解决方法：确认该进程为恶意进程后，可以使用kill -9 进程名命令结束进程，或使用防火墙限制进程外联。 风险性：高。\n三、检查恶意程序和可疑启动项 1.使用chkconfig –list和cat /etc/rc.local命令查看下开机启动项中是否有异常的启动服务。 检查说明：恶意程序往往会添加在系统的启动项，在用户关机重启后再次运行。 解决方法：如发现有恶意进程，可使用chkconfig 服务名 off命令关闭，同时检查/etc/rc.local中是否有异常项目，如有请注释掉。 风险性：高。\n2.进入 cron 文件目录，查看是否存在非法定时任务脚本。 检查说明：查看/etc/crontab，/etc/cron.d，/etc/cron.daily，cron.hourly/，cron.monthly，cron.weekly/是否存在可疑脚本或程序。 解决方法：如发现有不认识的计划任务，可定位脚本确认是否正常业务脚本，如果非正常业务脚本，可直接注释掉任务内容或删除脚本。 风险性：高。\n四、检查第三方软件漏洞 1.如果您服务器内有运行 Web、数据库等应用服务，请您限制应用程序帐户对文件系统的写权限，同时尽量使用非 root 帐户运行。 检查说明：使用非 root 帐户运行可以保障在应用程序被攻陷后攻击者无法立即远程控制服务器，减少攻击损失 解决方法： 进入 web 服务根目录或数据库配置目录； 运行chown -R apache:apache /var/www/xxxx、chmod -R 750 file1.txt命令配置网站访问权限。 风险性：中。 参考示例\n2.升级修复应用程序漏洞\n检查说明：机器被入侵，部分原因是系统使用的应用程序软件版本较老，存在较多的漏洞而没有修复，导致可以被入侵利用。 解决方法：比较典型的漏洞例如 ImageMagick、openssl、glibc 等，用户可以根据腾讯云已发布安全通告指导通过 apt-get/yum 等方式进行直接升级修复。 风险性：高。\n五、被入侵后的安全优化建议 1.尽量使用 SSH 密钥进行登录，减少暴力破解的风险。\n2.在服务器内编辑/etc/ssh/sshd_config文件中的 Port 22，将 22 修改为其他非默认端口，修改之后重启 SSH 服务。可使用命令重启 /etc/init.d/sshd restart（CentOS）或 /etc/init.d/ssh restart（Debian/Ubuntu）\n当修改端口时，需同时在 云服务器控制台 上修改对应主机安全组配置，在其入站规则中放行对应端口，详情请参见 添加安全组规则。\n3.如果必须使用 SSH 密码进行管理，选择一个好密码。\n无论应用程序管理后台（网站、中间件、tomcat 等）、远程 SSH、远程桌面、数据库，都建议设置复杂且不一样的密码。 下面是一些好密码的实例（可以使用空格）： 1qtwo-threeMiles3c45jia caser, lanqiu streets 下面是一些弱口令的示例，可能是您在公开的工作中常用的词或者是您生活中常用的词： 公司名+日期（coca-cola2016xxxx） 常用口语（Iamagoodboy）\n4.使用以下命令检查主机有哪些端口开放，关闭非业务端口。\nnetstat -anltp\n5.通过腾讯云-安全组防火墙限制仅允许制定 IP 访问管理或通过编辑/etc/hosts.deny、/etc/hosts.allow两个文件来限制 IP。 6.应用程序尽量不使用 root 权限。 例如 Apache、Redis、MySQL、Nginx 等程序，尽量不要以 root 权限的方式运行。 7.修复系统提权漏洞与运行在 root 权限下的程序漏洞，以免恶意软件通过漏洞提权获得 root 权限传播后门。 及时更新系统或所用应用程序的版本，如 Struts2、Nginx，ImageMagick、Java 等。 关闭应用程序的远程管理功能，如 Redis、NTP 等，如果无远程管理需要，可关闭对外监听端口或配置。 8.定期备份云服务器业务数据。 对重要的业务数据进行异地备份或云备份，避免主机被入侵后无法恢复。 除了您的 home，root 目录外，您还应当备份 /etc 和可用于取证的 /var/log 目录。 9.安装腾讯云主机安全 Agent，在发生攻击后，可以了解自身风险情况。\n参考链接：\nhttps://cloud.tencent.com/document/product/296/9604\n","permalink":"http://klxq666.fun/posts/blog/linux_safe/","summary":"深入分析，查找入侵原因 一、检查隐藏帐户及弱口令 1.检查服务器系统及应用帐户是否存在 弱口令： 检查说明：检查管理员帐户、数据库帐户、MySQL 帐户、tomcat 帐户、网站后台管理员帐户等密码设置是否较为简单，简单的密码很容易被黑客破解。 解决方法：以管理员权限登录系统或应用程序后台，修","title":"Linux 入侵类问题排查思路"},{"content":"1.cp命令 cp 命令，主要用来复制文件和目录，同时借助某些选项，还可以实现 （完完整整）复制整个目录\n选项： -a：相当于 -d、-p、-r 选项的集合，这几个选项我们一一介绍； -d：如果源文件为软链接（对硬链接无效），则复制出的目标文件也为软链接； -i：询问，如果目标文件已经存在，则会询问是否覆盖； -l：把目标文件建立为源文件的硬链接文件，而不是复制源文件； -s：把目标文件建立为源文件的软链接文件，而不是复制源文件； -p：复制后目标文件保留源文件的属性（包括所有者、所属组、权限和时间）； -r：递归复制，用于复制目录； -u：若目标文件比源文件有差异，则使用该选项可以更新目标文件，此选项可用于对文件的升级和备用。 tar 打包压缩时 排除目录下的某个子目录或文件\ntar -zcvf home.tar.gz /home –exclude=/home/afish –exclude=/home/www/2b.php\n2.chage命令 chage用于密码实效管理，用来修改帐号和密码的有效期限\n-l 列出用户及密码的有效期 -h 显示此帮助消息并退出 -d, --lastday LAST_DAY 将上次密码更改的日期设置为LAST_DAY，设置为0时，下次登录强制修改密码 -E, --expiredate EXPIRE_DATE 将帐户到期日期设置为EXPIRE_DATE -I, --inactive INACTIVE 在到期后将密码设置为非活动状态 -m, --mindays MIN_DAYS 将密码更改前的最小天数设置为MIN_DAYS -M, --maxdays MAX_DAYS 将密码更改前的最大天数设置为MAX_DAYS -R, --root CHROOT_DIR chroot into目录 -W, --warndays WARN_DAYS 将到期警告天数设置为WARN_DAYS ","permalink":"http://klxq666.fun/posts/blog/linux_command/","summary":"1.cp命令 cp 命令，主要用来复制文件和目录，同时借助某些选项，还可以实现 （完完整整）复制整个目录 选项： -a：相当于 -d、-p、-r 选项的集合，这几个选项我们一一介绍； -d：如果源文件为软链接（对硬链接无效），则复制出的目标文件也为软链接； -i：询问，如果目标文件已经存在，则会询问","title":"Linux 相关命令"},{"content":"在网络技术中，端口（Port）包括逻辑端口和物理端口两种类型。\n物理端口指的是物理存在的端口，如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口，如RJ-45端口、SC端口等等。\n逻辑端口指逻辑意义上用于区分服务的端口，如TCP/IP协议中的服务端口，端口号的范围从0到65535，比如用于浏览网页服务的80端口，用于FTP服务的21端口等。 由于物理端口和逻辑端口数量较多，为了对端口进行区分，将每个端口进行了编号，这就是端口号\n一. 端口按端口号可以分为3大类 1：公认端口（Well Known Port） 公认端口号从0到1023，它们紧密绑定与一些常见服务，例如FTP服务使用端口21，你在 /etc/services 里面可以看到这种映射关系。\n2：注册端口（Registered Ports) 从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口，这些端口同样用于许多其它目的.\n3: 动态或私有端口（Dynamic and/or Private Ports） 动态端口，即私人端口号（private port numbers），是可用于任意软件与任何其他的软件通信的端口数，使用因特网的传输控制协议，或用户传输协议。动态端口一般从49152到65535\nLinux中有限定端口的使用范围，如果我要为我的程序预留某些端口，那么我需要控制这个端口范围。\n/proc/sys/net/ipv4/ip_local_port_range 定义了本地TCP/UDP的端口范围\n你可以在/etc/sysctl.conf里面定义net.ipv4.ip_local_port_range = 1024 65000\n二、相关的检测工具 nmap telnet lsof 1：nmap工具检测开放端口 nmap localhost #查看主机当前开放的端口 nmap -p 1024-65535 localhost #查看主机端口（1024-65535）中开放的端口 nmap -sU 192.168.8.226 #UDP 扫描：探测目标主机提供哪些 UDP 服务，UDP 扫描的速度会比较慢 nmap -PS 192.168.8.226 #探测目标主机开放的端口 nmap -O 192.168.8.226 #探测目标主机操作系统类型 nmap -A 192.168.8.226 #探测目标主机操作系统类型 nmap --help #更多nmap参数请查询帮助信息 nmap -sP 192.168.8.* 或 nmap -sP 192.168.8.0/24 扫描这个网段机器情况 nmap端口状态open closed 的解答 参考链接：https://www.cnblogs.com/AloneSword/articles/5078716.html 2：netstat 工具检测开放端口 -t 列出 TCP 协议的连接 -u 列出 UDP 协议的连接 -n 选项禁用域名解析功能。 -l 选项列出正在监听的套接字。 -p 选项查看进程信息。 3：lsof 工具检测开放端口 lsof -i 列出所有打开了网络套接字（TCP和UDP）的进程 lsof -i:22 -i:port来显示与指定端口相关的网络信息 lsof -i tcp/udp 只列出打开TCP 或UDP sockets的进程 4： 使用telnet检测端口是否开放 格式： telnet ip prot\ntelnet 192.168.8.226 80\n5：netcat工具检测端口是否开放。 扫瞄某IP的某个端口\nnc -v ip port\n参考链接：\nhttps://blog.csdn.net/zflovecf/article/details/79267769\nhttps://www.cnblogs.com/wzy23/p/11389431.html\n","permalink":"http://klxq666.fun/posts/blog/linux_port_listen/","summary":"在网络技术中，端口（Port）包括逻辑端口和物理端口两种类型。 物理端口指的是物理存在的端口，如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口，如RJ-45端口、SC端口等等。 逻辑端口指逻辑意义上用于区分服务的端口，如TCP/IP协议中的服务端口，端口号的范","title":"Linux系统 端口知识以及相关监听工具"},{"content":"一、概要 本文讲述为在 win10 专业版上用Hyper-V 安装并启动minikube v1.26.1的过程\n二、准备工作 系统是否支持虚拟化技术，请终端或者 cmd 中运行以下命令\nsysteminfo\n如果你看到下面的输出，则表示你的操作系统已经安装了 Hypervisor，你可以跳过安装 Hypervisor 的步骤。\nHyper-V 要求： 已检测到虚拟机监控程序。将不显示 Hyper-V所需的功能。\n否则在控制面板的程序里启用“Hyper-V 管理工具”功能，不需要启用“Hyper-V 平台”，并重启电脑。\n三、安装kubectl 与minikube 在 Windows 上用 Chocolatey 安装 kubectl 和minikube\n开启PowerShell (管理员)\n执行如下命令\nchoco install kubernetes-cli 检查命令 kubectl version --client choco install minikube 检查命令 minikube version 参考链接：\nhttps://minikube.sigs.k8s.io/docs/handbook/kubectl/\nhttps://minikube.sigs.k8s.io/docs/start/\nhttps://kuboard.cn/install/install-kubectl.html#%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%94%B5%E8%84%91%E5%AE%89%E8%A3%85-kubectl\n四、启动 Minikube minikube start --image-mirror-country=\u0026#34;cn\u0026#34; --hyperv-virtual-switch=\u0026#34;123123\u0026#34; --registry-mirror=https://eywbgdoj.mirror.aliyuncs.com --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.23.8 如果启动成功，将输出如下信息：\nminikube 提供了非常多的配置参数，\n常用配置参数如下\n--driver=*** 从1.5.0版本开始，Minikube缺省使用系统优选的驱动来创建Kubernetes本地环境，比如您已经安装过Docker环境，minikube 将使用 docker 驱动 --image-mirror-country：可以指定从中国大陆下载镜像 --cpus=2: 为minikube虚拟机分配CPU核数 --memory=2048mb: 为minikube虚拟机分配内存数 --hyperv-virtual-switch 为minikube虚拟机指定网络适配器 默认为Default Swtch,请根据自我环境调整 --registry-mirror=*** 为了提升拉取Docker Hub镜像的稳定性，可以为 Docker daemon 配置镜像加速，参考阿里云镜像服务 --image-repository Google 容器镜像地址，主要是 Kubernetes 相关的容器，用国内的比较快 --kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本 --iso-url：单机 Kubernetes 的镜像文件 查看集群状态的命令 minikube status\n输出：\nminikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured 安装 minikub Dashboard 可视化管理\nminikube addons list #查看是否启动 minikube addons enable dashboard #启用dashboard插件 minikube dashboard --url #本命令窗口不用关闭，直接再开窗口curl访问看看 或复制url去浏览器打开 也可以用代理启动\nkubectl proxy \u0026ndash;port=端口 \u0026ndash;address=\u0026lsquo;0.0.0.0\u0026rsquo; \u0026ndash;disable-filter=true\n注：上面的命令状态要一直保持不退出才能访问，退出就无法访问了\n指定ip+端口/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/\n官方学习链接：\nhttps://minikube.sigs.k8s.io/docs/\n参考链接：\nhttps://developer.aliyun.com/article/221687\nhttps://blog.csdn.net/qq_38340601/article/details/108437017\nhttp://www.biliyu.com/article/1960.htmlv\n","permalink":"http://klxq666.fun/posts/blog/k8s/win10_minikube/","summary":"一、概要 本文讲述为在 win10 专业版上用Hyper-V 安装并启动minikube v1.26.1的过程 二、准备工作 系统是否支持虚拟化技术，请终端或者 cmd 中运行以下命令 systeminfo 如果你看到下面的输出，则表示你的操作系统已经安装了 Hypervisor，你可以跳过安装 Hypervisor 的步骤。 Hyper-V 要求： 已检测到虚拟机监控程","title":"win10 环境下安装minikube"},{"content":"制作u盘启动盘，重装系统，记录下\n1.下载u盘启动工具 https://www.microsoft.com/zh-cn/software-download/windows10 官方的\nhttps://www.wepe.com.cn/ 微PE\nhttps://www.wepe.com.cn/ubook/installtool.html 微PE指导文档\nhttp://www.winbaicai.com/ 大白菜\nhttps://www.laomaotao.net/ 老毛桃\n2.下载Windows镜像 https://zhuanlan.zhihu.com/p/538812792\nhttps://msdn.itellyou.cn/\n参考视频链接：\nhttps://www.bilibili.com/video/BV14f4y1D7xy/?spm_id_from=333.788.recommend_more_video.-1\u0026amp;vd_source=47e0656689d49b82033428687694518c\nhttps://www.bilibili.com/video/BV1DJ411D79y/?spm_id_from=autoNext\u0026amp;vd_source=47e0656689d49b82033428687694518c\n问题参考链接：\nhttps://www.asus.com.cn/support/FAQ/1044458#A2 安装win10/win11 找不到磁盘驱动器\n","permalink":"http://klxq666.fun/posts/blog/winpe/","summary":"制作u盘启动盘，重装系统，记录下 1.下载u盘启动工具 https://www.microsoft.com/zh-cn/software-download/windows10 官方的 https://www.wepe.com.cn/ 微PE https://www.wepe.com.cn/ubook/installtool.html 微PE指导文档 http://www.winbaicai.com/ 大白菜 https://www.laomaotao.net/ 老毛桃 2.下载Windows镜像 https://zhuanlan.zhihu.com/p/538812792 https://msdn.itellyou.cn/ 参考视频链接： https://www.bilibili.com/video/BV14f4y1D7xy/?spm_id_from=333.788.recommend_more_video.-1\u0026amp;vd_source=47e0656689d49b82033428687694518c https://www.bilibili.com/video/BV1DJ411D79y/?spm_id_from=autoNext\u0026amp;vd_source=47e0656689d49b82033428687694518c 问题参考链接： https://www.asus.com.cn/support/FAQ/1044458#A2 安装win10/win11 找不到磁盘驱动器","title":"一键制作U盘启动盘winpe系统"},{"content":"一、查看当前版本与备份\nnginx -v cp -r /usr/local/nginx /usr/local/nginx-old 获取configure 配置信息\n二、下载新版本 Nginx 最新下载地址： https://nginx.org/en/download.html\n选择当前最新稳定版本 ：1.24.0\nwget https://nginx.org/download/nginx-1.24.0.tar.gz 三、解压与编译安装\ntar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0 ###参照老的configure 配置信息 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --with-stream_ssl_module --with-openssl=/opt/openssl-1.1.1k --conf-path=/usr/local/nginx/nginx.conf make 不要make install 不要make install 不要make install 编译报错\n/bin/sh: line 2: ./config: No such file or directory make[1]: *** [/usr/local/openssl/.openssl/include/openssl/ssl.h] Error 127 make[1]: Leaving directory `/opt/nginx-1.24.0\u0026#39; make: *** [build] Error 2 原因\n出错是因为Nginx在编译时并不能在/usr/local/openssl/.openssl/ 这个目录找到对应的文件\n其实我们打开/usr/local/openssl/这个目录，发现没有.opensslb目录\n因此需要修改Nginx编译的文件，将此路径去掉就可以解决这个问题了\n解决办法\nvim /opt/nginx-1.24.0/auto/lib/openssl/conf 找到这么一段代码： CORE_INCS=\u0026#34;$CORE_INCS $OPENSSL/.openssl/include\u0026#34; CORE_DEPS=\u0026#34;$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h\u0026#34; CORE_LIBS=\u0026#34;$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a\u0026#34; CORE_LIBS=\u0026#34;$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a\u0026#34; CORE_LIBS=\u0026#34;$CORE_LIBS $NGX_LIBDL\u0026#34; 修改成以下代码： CORE_INCS=\u0026#34;$CORE_INCS $OPENSSL/include\u0026#34; CORE_DEPS=\u0026#34;$CORE_DEPS $OPENSSL/include/openssl/ssl.h\u0026#34; CORE_LIBS=\u0026#34;$CORE_LIBS $OPENSSL/lib/libssl.a\u0026#34; CORE_LIBS=\u0026#34;$CORE_LIBS $OPENSSL/lib/libcrypto.a\u0026#34; CORE_LIBS=\u0026#34;$CORE_LIBS $NGX_LIBDL\u0026#34; 保存后， 重新编译Nginx，再make即可 五、备份旧版本\nmv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-1.20.2 六、替换新版本\ncd nginx-1.24.0 cp objs/nginx /usr/local/nginx/sbin/ 七、make upgrade 升级\nmake upgrade 八、检查升级后的版本\nnginx -v 参考链接：\nhttps://blog.csdn.net/lw0328/article/details/127672692\n","permalink":"http://klxq666.fun/posts/blog/nginx_smooth_upgrade/","summary":"一、查看当前版本与备份 nginx -v cp -r /usr/local/nginx /usr/local/nginx-old 获取configure 配置信息 二、下载新版本 Nginx 最新下载地址： https://nginx.org/en/download.html 选择当前最新稳定版本 ：1.24.0 wget https://nginx.org/download/nginx-1.24.0.tar.gz 三、解压与编译安装 tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0 ###参照老的configure 配置信息 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --with-stream_ssl_module --with-openssl=/opt/openssl-1.1.1k --conf-path=/usr/local/nginx/nginx.conf make 不要make install 不要make install 不要make install 编译报错 /bin/sh: line 2: ./config: No","title":"Nginx 平滑升级，从1.20.2升级到1.24.0"},{"content":" 1.物理层 解决两个硬件之间怎么通信的问题，常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准，如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。\n物理层的协议是EIA/TIA-232、EIA/TIA-499、EIA/TIA-568等\n它的主要作用是传输比特流（就是由1、0转化为电流强弱来进行传输，到达目的地后在转化为1、0，也就是我们常说的数模转换与模数转换）。\n物理层的数据叫做比特流。\n2.数据链路层 在计算机网络中由于各种干扰的存在，物理链路是不可靠的。\n数据链路层的协议是以太网、Wi-Fi、HDLC协议、PPP（点对点协议）、SLIP协议等\n数据链路层的主要任务是：通过各种控制协议，将比特组合成字节进而组合成帧，以达到物理层的数据传输。同样，也将来自物理层的位流形式的数据，并封装成帧，传送到网络层。\n数据链路层的数据叫做数据帧。\n3.网络层 计算机网络中如果有多台计算机，怎么找到要发的那台？如果中间有多个节点，怎么选择路径？这就是路由要做的事。\n网络层的协议是IP（互联网协议）、ICMP（互联网控制消息传递协议）、ARP协议等\n网络层的主要任务就是：通过路由选择算法，为报文（该层的数据单位，由上一层数据打包而来）通过通信子网选择最适当的路径。\n网络层的数据叫做数据包。\n4.传输层 当发送大量数据时，很可能会出现丢包的情况，另一台电脑要告诉是否完整接收到全部的包。如果缺了，就告诉丢了哪些包，然后再发一次，直至全部接收为止。\n传输层的协议是TCP（传输控制协议）和UDP（用户数据报协议）\n传输层的主要任务就是：提供两台计算机之间的数据传输服务，确保数据的正确传输。\n传输层的数据叫做段（TCP）或用户数据报（UDP）。\n5.会话层 虽然已经可以实现给正确的计算机，发送正确的封装过后的信息了。但我们总不可能每次都要调用传输层协议去打包，然后再调用IP协议去找路由，所以我们要建立一个自动收发包，自动寻址的功能。于是会话层出现了：它的作用就是建立和管理应用程序之间的通信。\n会话层的协议是ADSP、RPC等\n会话层的主要任务就是：建立、管理、终止会话连接。\n会话层的数据叫做特定的数据包或消息\n6.表示层 表示层负责数据格式的转换，将应用处理的信息转换为适合网络传输的格式，或者将来自下一层的数据转换为上层能处理的格式。\n表示层的协议是ASCII、SSL、TLS等\n表示层的主要任务就是：数据的表示、安全、压缩。\n表示层的数据叫做加密和解密的数据\n7.应用层 应用层是整个OSI模型的最上层，它为计算机用户提供各种网络应用服务。\n应用层是计算机用户，以及各种应用程序和网络之间的接口，其功能是直接向用户提供服务，完成用户希望在网络上完成的各种工作。\n应用层的协议是HTTP（超文本传输协议）、FTP（文件传输协议）、Telnet（终端仿真协议）、SMTP（简单邮件传输协议）、DNS（域名系统协议）等\n应用层的主要任务就是：为应用软件提供网络服务。\n应用层的数据叫做特定的数据包或消息\n8.注意事项 有些协议可以在多个层级使用，而有些协议则只能在特定的层级使用\n网络协议和OSI模型是抽象的概念，实际网络通信过程要复杂得多。\nTCP/IP4层模型、5层模型和OSI七层模型的对比\n参考链接：\nhttps://www.zhihu.com/tardis/zm/art/296670054?source_id=1005\n","permalink":"http://klxq666.fun/posts/blog/network_osi7/","summary":"1.物理层 解决两个硬件之间怎么通信的问题，常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准，如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。 物理层的协议是EIA/TIA-232、EIA/TIA-499、EIA/TIA-568等 它的主要作用是传输比特流（就是","title":"网络七层协议/osi七层模型"},{"content":"参考链接：\nhttps://github.com/Asabeneh/30-Days-Of-Python#readme 30天学Python\nhttps://www.liaoxuefeng.com/wiki/1016959663602400 廖雪峰的Python教程\nhttps://github.com/qinjx/30min_guides/blob/master/shell.md shell入门\nhttps://deerchao.cn/tutorials/regex/regex.htm 正则表达式 入门\n","permalink":"http://klxq666.fun/posts/blog/linux_shell/learning-program/","summary":"参考链接： https://github.com/Asabeneh/30-Days-Of-Python#readme 30天学Python https://www.liaoxuefeng.com/wiki/1016959663602400 廖雪峰的Python教程 https://github.com/qinjx/30min_guides/blob/master/shell.md shell入门 https://deerchao.cn/tutorials/regex/regex.htm 正则表达式 入门","title":"学习编程的一些参考资料"},{"content":"一、Linux Linux 登录慢的解决方案\n1.禁用DNS 解析 /etc/ssh/sshd_config 中将 UseDNS 设置为 no 2.关闭GSSAPI 认证 /etc/ssh/sshd_config 中将 GSSAPIAuthentication 设置为 no 3.用sed 命令修改配置文件 cat /etc/ssh/sshd_config |grep -E \u0026#34;UseDNS|GSSAPIAuthentication\u0026#34; sed -i \u0026#39;s/#UseDNS yes/UseDNS no/\u0026#39; /etc/ssh/sshd_config sed -i \u0026#39;s/GSSAPIAuthentication yes/GSSAPIAuthentication no/\u0026#39; /etc/ssh/sshd_config systemctl restart sshd 二、其他 参考链接: https://juejin.cn/post/7218948376167366713 【nginx 开启gzip压缩】\nhttps://www.cnblogs.com/lvzhenjiang/p/14386197.html 【ansible优化】\n","permalink":"http://klxq666.fun/posts/blog/linux_optimize/","summary":"一、Linux Linux 登录慢的解决方案 1.禁用DNS 解析 /etc/ssh/sshd_config 中将 UseDNS 设置为 no 2.关闭GSSAPI 认证 /etc/ssh/sshd_config 中将 GSSAPIAuthentication 设置为 no 3.用sed 命令修改配置文件 cat /etc/ssh/sshd_config |grep -E \u0026#34;UseDNS|GSSAPIAuthentication\u0026#34; sed -i \u0026#39;s/#UseDNS yes/UseDNS no/\u0026#39; /etc/ssh/sshd_config sed -i \u0026#39;s/GSSAPIAuthentication yes/GSSAPIAuthentication no/\u0026#39; /etc/ssh/sshd_config systemctl restart sshd 二、其他 参考链接: https://juejin.cn/post/7218948376167366713 【nginx 开启gzip压缩】 https://www.cnblogs.com/lvzhenjiang/p/14386197.html 【ansible优化】","title":"Linux 相关优化"},{"content":"docker 部署rancher 并管理k8s集群\n1. rancher简介 rancher 是一套容器管理平台，它可以帮助组织在生产环境中轻松快捷的部署和管理容器。\nRancher 可以轻松地管理各种环境的 Kubernetes，满足 IT 需求并为 DevOps 团队提供支持。\nRancher 目前已经具备全栈化一键部署应用、多种编排调度工具、多租户、多种基础架构的能力，可替换 IaaS 云平台，无论是 AWS、微软 Azure、谷歌、阿里云还是 OpenStack、VMware。这就如同一款浏览器可以运行在iOS、安卓、Windows、OS X 等不同操作系统中一样，让用户得到一致性的用户体验。\n2. docker部署rancher 下面链接是rancher支持的kubernetes版本，请根据你实际安装的版本进行选择\nhttps://www.suse.com/zh-cn/suse-rancher/support-matrix/all-supported-versions/\ndocker run --privileged -d \\ --name rancher \\ --restart=unless-stopped \\ -p 80:80 -p 443:443 \\ -v /data/rancher_data:/var/lib/rancher/ \\ rancher/rancher:vx.x.x 访问 Rancher ：https://xx.xx.xx.xx\n获取密码：\ndocker logs rancher 2\u0026gt;\u0026amp;1 | grep \u0026#34;Bootstrap Password:\u0026#34; 重置密码：\ndocker exec -ti rancher reset-password 3. 导入已存在的k8s集群 4. 创建新的集群 参考链接：\nhttps://zhuanlan.zhihu.com/p/654270156\nhttps://www.jianshu.com/p/870ef7ba8723\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_rancher/","summary":"docker 部署rancher 并管理k8s集群 1. rancher简介 rancher 是一套容器管理平台，它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher 可以轻松地管理各种环境的 Kubernetes，满足 IT 需求并为 DevOps 团队提供支持。 Rancher 目前已经具备全栈化一键部署应用、多种编排调度工具、多租户、多种基础架构","title":"docker 部署rancher并管理k8s集群"},{"content":"全文预览\n01.准备工作： 配置yum源，repo 安装常用工具，同步时间 关闭防火墙，关闭selinux，关闭swap 加载ipvs模块，优化内核 02.在所有机器上安装docker ,配置containerd 中pause的镜像地址 03.在所有机器上安装kubeadm,kubelet,kubectl 04.部署集群master节点 05.让工作节点加入 06.安装CNI网络插件 0.系统要求 1.Linux 内核操作系统\n2.各机器最低配置为2CPu ,2GB\n3.集群机器之间网络互通\n4.每个节点的主机名，mac地址，product_uuid 得唯一\n5.部署时需要能连外网\n查看IP和MAC命令\nip link\nifconfig -a\n查看product_uuid\nsudo cat /sys/class/dmi/id/product_uuid # 查看product_uuid\nsudo cat /sys/class/dmi/id/product_uuid\n1.准备工作 配置yum源，repo\n# yum源 curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo # docker repo curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # kubernetes repo cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # 缓存 yum clean all \u0026amp;\u0026amp; yum makecache 安装常用包，同步时间\nyum -y install tree vim wget bash-completion bash-completion-extras lrzsz net-tools sysstat iotop iftop htop unzip nc nmap telnet bc psmisc httpd-tools ntpdate # 时区修改,如果/etc/localtime有软连接,不是Shanghai,可以直接删除,在软链接 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ntpdate ntp2.aliyun.com # 同步阿里云服务器上的时间. /sbin/hwclock --systohc # 写入到bios系统 关闭防火墙，将selinux关闭，关闭swap\n#关闭防火墙 systemctl stop firewalld \u0026amp;\u0026amp; systemctl disable firewalld #关闭selinux setenforce 0 sed -i \u0026#39;s/enforcing/disabled/\u0026#39; /etc/selinux/config # 临时关闭swap。如果不关闭，kubelet会启动失败 sudo swapoff -a # 永久防止开机自动挂载swap sudo sed -i \u0026#39;/ swap / s/^\\(.*\\)$/#\\1/g\u0026#39; /etc/fstab 加载ipvs模块,优化内核\ncat \u0026gt; /etc/sysconfig/modules/ipvs.modules \u0026lt;\u0026lt; EOF #!/bin/bash modprobe br_netfilter modprobe -- ip_vs modprobe -- ip_vs_sh modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules #验证ipvs模块 lsmod |grep ip_vs # 内核文件 cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward=1 vm.max_map_count=262144 EOF # 生效并验证内核优化 sysctl -p /etc/sysctl.d/k8s.conf 2.安装docker以及配置pause镜像地址 在所有机器执行\n2.1 安装docker\n# yum 安装 yum install docker-ce # 配置 daemon.json cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/docker/daemon.json { \u0026#34;registry-mirrors\u0026#34;: [ \u0026#34;https://registry.hub.docker.com\u0026#34;, \u0026#34;http://hub-mirror.c.163.com\u0026#34;, \u0026#34;https://docker.mirrors.ustc.edu.cn\u0026#34;, \u0026#34;https://registry.docker-cn.com\u0026#34; ] } EOF # 启动docker并设置开机自启 systemctl enable docker \u0026amp;\u0026amp; systemctl start docker 2.2 配置containerd中pause镜像地址\n## 如果没有/etc/containerd/config.toml文件，将默认配置导出到/etc/containerd/config.toml。 containerd config default \u0026gt; /etc/containerd/config.toml ## 修改配置文件/etc/containerd/config.toml， 更改sandbox_image配置 [plugins] [plugins.\u0026#34;io.containerd.grpc.v1.cri\u0026#34;] sandbox_image = \u0026#34;registry.aliyuncs.com/google_containers/pause:3.9\u0026#34; ## PS: 如果生成的/etc/containerd/config.toml中没有如上配置项，可以运行如下命令导出当前所有配置项后再修改文件/etc/containerd/config.toml # containerd config dump \u0026gt; /etc/containerd/config.toml ## 重启containerd systemctl restart containerd 3.安装kubeadm,kubelet,kubectl kubeadm：启动k8s集群的工具\nkubelet: 该组件在集群中的所有机器上运行，并执行启动pod和容器之类的任务。\nkubectl: 与集群通信的工具。可以只在master节点上安装。\n# 安装kubeadm、kubectl、kubelet yum install -y kubectl kubeadm kubelet # 启动kubelet服务 systemctl enable kubelet \u0026amp;\u0026amp; systemctl start kubelet # 查看kubeadm版本 kubeadm version 4.部署集群master节点 在master 节点执行\n4.1 更改配置文件\nkubeadm init命令用于初始化master节点。kubeadm init 的参数可以通过命令行或yaml文件进行配置。本文介绍如何通过yaml文件进行配置。可以通过kubeadm config print init-defaults命令得到一份默认配置，然后对其进行修改。 kubeadm config print init-defaults \u0026gt; kubeadm.yaml 对kubeadm.yaml进行编辑，修改内容如下： 修改advertiseAddress为master IP地址 imageRepository修改为registry.aliyuncs.com/google_containers，防止镜像拉不下来 建议将networking.podSubnet修改为10.244.0.0/16， 和后续安装的flannel CNI 插件的默认配置保持一致。 --- apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.246.133 ## change the IP of apiserver. bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: node taints: null --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers ## change imageRepository to aliyun. kind: ClusterConfiguration kubernetesVersion: 1.28.0 networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 ## add this line to config POD network. Same with CNI config. serviceSubnet: 10.96.0.0/12 scheduler: {} --- 如上配置文件等价于命令行： kubeadm init \\ --apiserver-advertise-address=192.168.200.133 \\ --image-repository registry.aliyuncs.com/google_containers \\ --kubernetes-version v1.28.0 \\ --service-cidr=10.96.0.0/12 \\ --pod-network-cidr=10.244.0.0/16 –apiserver-advertise-address 集群通告地址 –image-repository 由于默认拉取镜像地址http://k8s.gcr.io国内无法访问，这里指定阿里云镜像仓库地址 –kubernetes-version K8s版本，与上面安装的一致 –service-cidr 集群内部虚拟网络，Pod统一访问入口 –pod-network-cidr Pod网络，与下面部署的CNI网络组件yaml中保持一致 .2 提前pull镜像（可选\n## 验证配置文件格式是否正确 [shirley@master k8s_install]$ kubeadm config validate --config kubeadm.yaml ok ## 查看需要下载哪些镜像。需要关注下载的repository地址是否正确。 ## 如上在kubeadm.yaml文件配置了imageRepository：registry.aliyuncs.com/google_containers，因此images会从aliyun的repo下载。 [shirley@master k8s_install]$ kubeadm config images list --config kubeadm.yaml registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0 registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.0 registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.0 registry.aliyuncs.com/google_containers/kube-proxy:v1.28.0 registry.aliyuncs.com/google_containers/pause:3.9 registry.aliyuncs.com/google_containers/etcd:3.5.9-0 registry.aliyuncs.com/google_containers/coredns:v1.10.1 ## pull镜像。pull镜像有点慢，第一个镜像pull成功后才有日志输出。命令运行后发现没有日志不要着急，多等一会。 [shirley@master k8s_install]$ sudo kubeadm config images pull --config kubeadm.yaml [config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0 [config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.0 [config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.0 [config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.28.0 [config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.9 [config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.9-0 [config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.10.1 4.3 kubeadm init初始化\n运行kubeadm init --config kubeadm.yaml， 当看到Your Kubernetes control-plane has initialized successfully!时表示安装成功。 [root@master k8s_install]# kubeadm init --config kubeadm.yaml ... ... Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run \u0026#34;kubectl apply -f [podnetwork].yaml\u0026#34; with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.246.133:6443 --token abcdef.0123456789abcdef \\ --discovery-token-ca-cert-hash sha256:9f7d37c768e658119242dfb49675eaeb3cbdbb7d191526bfa197dd92373b40ab PS：最好将最后一行log需要记下来，worker节点安装会用到。 根据提示，退出root账户后运行命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 4.4 验证\n验证master节点是否部署成功。 ## kubectl 运行正常. STATUS=NotReady是因为CNI插件还没装。 [shirley@master k8s_install]$ kubectl get node NAME STATUS ROLES AGE VERSION node NotReady control-plane 20m v1.28.2 ## 通过crictl命令可以查看到运行的container [shirley@master k8s_install]$ sudo crictl ps -a CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD 955b0c87ad621 ea1030da44aa1 26 minutes ago Running kube-proxy 0 78efbee65dfac kube-proxy-kp9kw f69d8c3246904 73deb9a3f7025 26 minutes ago Running etcd 0 77180bc7ff0a8 etcd-node 3efba65f263d3 f6f496300a2ae 26 minutes ago Running kube-scheduler 0 f89fb4bb60e2e kube-scheduler-node 5dfb28390f30b 4be79c38a4bab 26 minutes ago Running kube-controller-manager 0 b716cb4652e1c kube-controller-manager-node b8cfce31fa842 bb5e0dde9054c 26 minutes ago Running kube-apiserver 0 006db1ce43cfe kube-apiserver-node 5.让工作节点加入 5.1 运行kubeadm join将工作节点加入集群\n在master节点kubeadm init安装完成后，会有如下类似log Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.246.133:6443 --token abcdef.0123456789abcdef \\ --discovery-token-ca-cert-hash sha256:9f7d37c768e658119242dfb49675eaeb3cbdbb7d191526bfa197dd92373b40ab 将上述命令粘贴到工作节点，将工作节点添加到集群 [root@slave ~]# kubeadm join 192.168.246.133:6443 --token abcdef.0123456789abcdef \\ \u0026gt; --discovery-token-ca-cert-hash sha256:9f7d37c768e658119242dfb49675eaeb3cbdbb7d191526bfa197dd92373b40ab [preflight] Running pre-flight checks [WARNING Hostname]: hostname \u0026#34;slave.k8s\u0026#34; could not be reached [WARNING Hostname]: hostname \u0026#34;slave.k8s\u0026#34;: lookup slave.k8s on 192.168.246.2:53: no such host [preflight] Reading configuration from the cluster... [preflight] FYI: You can look at this config file with \u0026#39;kubectl -n kube-system get cm kubeadm-config -o yaml\u0026#39; [kubelet-start] Writing kubelet configuration to file \u0026#34;/var/lib/kubelet/config.yaml\u0026#34; [kubelet-start] Writing kubelet environment file with flags to file \u0026#34;/var/lib/kubelet/kubeadm-flags.env\u0026#34; [kubelet-start] Starting the kubelet [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run \u0026#39;kubectl get nodes\u0026#39; on the control-plane to see this node join the cluster. 5.2 验证\n到master节点运行kubelet get node,可以看到加进来的node [shirley@master k8s_install]$ kubectl get nodes NAME STATUS ROLES AGE VERSION node NotReady control-plane 121m v1.28.2 slave.k8s NotReady \u0026lt;none\u0026gt; 28s v1.28.2 当前STATUS都是NotReady，这是因为还没有安装网络插件CNI 5.3 忘记token怎么办\n如果master节点安装时，没有记录下token，或token超时(默认24小时)，可以运行如下命令重新生成 [shirley@master k8s_install]$ kubeadm token create --print-join-command kubeadm join 192.168.246.133:6443 --token by8q23.65btteq9iud7ypso --discovery-token-ca-cert- 6.安装Flannel网络插件 6.1 下载kube-flannel.yml\n## 1. 下载kube-flannel.yml wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kube-flannel.yaml文件中，需要注意，net-conf.json里的network要和kubeadm.yaml里配置的networking.podSubnet相同\n... ... net-conf.json: | { ### 这里的network和kubeadm.yaml里配置的networking.podSubnet相同 \u0026#34;Network\u0026#34;: \u0026#34;10.244.0.0/16\u0026#34;, \u0026#34;Backend\u0026#34;: { \u0026#34;Type\u0026#34;: \u0026#34;vxlan\u0026#34; } } ... ... 6.2 容器部署flannel\n[root@k8s-master-01 ~]#kubectl apply -f kube-flannel.yml namespace/kube-flannel created clusterrole.rbac.authorization.k8s.io/flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created serviceaccount/flannel created configmap/kube-flannel-cfg created daemonset.apps/kube-flannel-ds created 6.3 验证 运行kubectl -n kube-system get pod -o wide\n每个节点上都运行了kube-proxy [root@k8s-master-01 ~]# kubectl -n kube-system get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES coredns-66f779496c-flbpd 1/1 Running 0 24h 10.244.0.2 node \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; coredns-66f779496c-g4b74 1/1 Running 0 24h 10.244.0.3 node \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; etcd-node 1/1 Running 0 24h 192.168.188.61 node \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; kube-apiserver-node 1/1 Running 0 24h 192.168.188.61 node \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; kube-controller-manager-node 1/1 Running 0 24h 192.168.188.61 node \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; kube-proxy-8rglh 1/1 Running 0 23h 192.168.188.65 k8s-node1 \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; kube-proxy-jjvh9 1/1 Running 0 24h 192.168.188.61 node \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; kube-scheduler-node 1/1 Running 0 24h 192.168.188.61 node \u0026lt;none\u0026gt; \u0026lt;none\u0026gt; # node状态显示为Ready [root@k8s-master-01 ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-node1 Ready \u0026lt;none\u0026gt; 24h v1.28.2 node Ready control-plane 24h v1.28.2 其他说明\n另外，在初始安装的Master节点上也启动了kubelet和kube-proxy，在默认情况下并不参与工作负载的调度。 如果希望Master节点也作为Node角色，则可以运行下面的命令（删除Master节点的：node-role.kubernetes.io/control-plane:NoSchedule），让Master节点也成为一个Node：\nkubectl taint nodes –all node-role.kubernetes.io/control-plane-\n参考链接：\nhttps://zhuanlan.zhihu.com/p/660899097\nhttps://zhuanlan.zhihu.com/p/439991250\n","permalink":"http://klxq666.fun/posts/blog/k8s/centos7_k8sv1.28/","summary":"全文预览 01.准备工作： 配置yum源，repo 安装常用工具，同步时间 关闭防火墙，关闭selinux，关闭swap 加载ipvs模块，优化内核 02.在所有机器上安装docker ,配置containerd 中pause的镜像地址 03.在所有机器上安装kubeadm,kubelet,kub","title":"centos7 通过kubeadm 安装 k8s v1.28 集群"},{"content":"1.操作场景 当数据盘没有创建分区，只在设备上创建了文件系统，您可以参考本节直接扩展文件系统。\n[root@ecs-test ~]# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 43G 1.9G 39G 5% / tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/vdb ext4 10G 1G 9G 10% /mnt/sdc 执行lsblk命令，回显如下：\n[root@ecs-test ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 60G 0 disk /mnt/sdc 表示数据盘“/dev/vdb”没有创建分区，只在设备上创建了文件系统。 本文以“CentOS 7.4 64bit”操作系统为例，数据盘“/dev/vdb”原有容量10GiB，没有分区，只创建了文件系统。现已在控制台将数据盘容量扩大至60GiB，本示例演示如何扩展文件系统，使新增的50G容量可用。\n扩展ext*文件系统\n扩展xfs文件系统\n不同操作系统的操作可能不同，本文仅供参考，具体操作步骤和差异请参考对应操作系统的产品文档。\n2.扩展ext*文件系统 执行以下命令，扩展磁盘分区文件系统的大小。 resize2fs 磁盘名称 命令示例： resize2fs /dev/vdb 回显类似信息如下：\n[root@ecs-test ~]# resize2fs /dev/vdb resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/vdb is mounted on /root/test; on-line resizing required old_desc_blocs = 2, old_desc_blocs = 8 [17744.521535] EXT4-fs (vdb): resizing filesystem from 26214400 to 15728640 blocks [17744.904470] EXT4-fs (vdb): resized filesystem to 15728640 The filesystem on /dev/vdb is now 15728640 blocks long. 执行以下命令，查看扩容结果。 df -TH 回显类似信息如下：\n[root@ecs-test ~]# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 43G 1.9G 39G 5% / tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/vdb ext4 64G 55M 61G 1% /mnt/sdc 3.扩展xfs文件系统 执行以下命令，扩展磁盘分区文件系统的大小。 xfs_growfs 磁盘名称 命令示例： xfs_growfs /dev/vdb 回显类似如下信息： [root@ecs-test ~]# xfs_growfs /dev/vdb meta-data=/dev/vdb isize=512 agcount=4, agsize=655360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, spinodes=0 data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=0 swidth=0 blks naming =version2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2621440 to 15728640. 执行以下命令，查看扩容结果。 df -TH 回显类似信息如下：\n[root@ecs-test ~]# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 40G 2.3G 35G 7% / tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/vdb xfs 60G 34M 60G 1% /mnt/sdc 参考链接：\nhttps://support.huaweicloud.com/evs_faq/evs_faq_0073.html\nhttps://zhuanlan.zhihu.com/p/556523200 【Linux 添加新硬盘和扩容已有硬盘】\n","permalink":"http://klxq666.fun/posts/blog/linux_disk_expansion/","summary":"1.操作场景 当数据盘没有创建分区，只在设备上创建了文件系统，您可以参考本节直接扩展文件系统。 [root@ecs-test ~]# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 43G 1.9G 39G 5% / tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/vdb ext4 10G 1G 9G 10% /mnt/sdc 执行lsblk命令，回显如下： [root@ecs-test ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 60G 0 disk /mnt/sdc 表示数据盘“/dev/","title":"Linux系统扩容数据盘时，如何扩展未分区磁盘文件系统"},{"content":"1.简介 Fail2Ban 是一款入侵防御软件，可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。 Fail2Ban 基于auth 日志文件工作，默认情况下它会扫描所有 auth 日志文件，如 /var/log/auth.log、/var/log/apache/access.log 等，并禁止带有恶意标志的IP，比如密码失败太多，寻找漏洞等等标志。\n通常，Fail2Ban 用于更新防火墙规则，用于在指定的时间内拒绝 IP 地址。 它也会发送邮件通知。 Fail2Ban 为各种服务提供了许多过滤器，如 ssh、apache、nginx、squid、named、mysql、nagios 等。\nFail2Ban 能够降低错误认证尝试的速度，但是它不能消除弱认证带来的风险。 这只是服务器防止暴力攻击的安全手段之一。\n2.安装 对于 CentOS/RHEL，启用 EPEL 库或 RPMForge 库，使用 YUM 命令安装。\nyum install fail2ban # 如果找不到fail2ban包，就执行下面的命令 yum install epel-release 3.配置 默认情况下，Fail2Ban 将所有配置文件保存在 /etc/fail2ban/ 目录中。 主配置文件是 jail.conf，它包含一组预定义的过滤器。 出于安全起见默认配置最好保留。\nFail2Ban 配置文件位于 /etc/fail2ban/jail.conf。\n备份 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # 修改jail.local vi /etc/fail2ban/jail.local [DEFAULT] #此参数为加白的网段、IP，可以是域名、网段或单个IP，空格隔开。 ignoreip = 127.0.0.1/8 ::1 #设置被封锁的时间间隔，如下表示10分钟，可以是秒(s)、分钟(m)、小时(h)、天(d)，不带单位则默认为s，-1表示永久封锁。 bantime = 10m #检测的间隔时间，在间隔时间内，当\u0026gt;=maxtretry设置的失败次数，则触发限制，禁止访问。 findtime = 10m #findtime时间内的最大失败次数 maxretry = 5 [sshd] enabled = true #启用sshd模块 port = 22 #ssh端口 logpath = /var/log/auth.log #日志路径 backend = %(sshd_backend)s #后台管理程序，默认由systemd接管，无需修改 4.启动 systemctl start fail2ban 5.查看fail2ban已启动的模块 fail2ban-client status fail2ban-client status sshd # 查看sshd模块状态 6.fail2ban-client常用命令 fail2ban-client start sshd # 启动sshd模块 fail2ban-client stop sshd # 停止sshd模块 fail2ban-client restart sshd # 重启sshd模块 fail2ban-client reload # 重新加载配置文件 黑名单操作 (注意，黑名单测试时，不要把自己的IP加到黑名单里做测试，否则就连不上机器了) IP加入黑名单：fail2ban-client set sshd banip 192.168.1.8 IP解锁：fail2ban-client set sshd unbanip 192.168.1.8 白名单操作 IP加入白名单：fail2ban-client set sshd addignoreip 192.168.1.8 IP从白名单中移除：fail2ban-client set sshd delignoreip 192.168.1.8 在所有监狱中加入IP白名单：fail2ban-client unban 192.168.1.8 使用unban解除封锁的IP fail2ban-client unban 192.168.1.16 fail2ban-client unban --all #解除所有 参考链接:\nhttps://cloud.tencent.com/developer/article/2137876\nhttps://wdd.js.org/posts/2020/04/ih9pz2/\n","permalink":"http://klxq666.fun/posts/blog/linux_fail2ban/","summary":"1.简介 Fail2Ban 是一款入侵防御软件，可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。 Fail2Ban 基于auth 日志文件工作，默认情况下它会扫描所有 auth 日志文件，如 /var/log/auth.log、/var/log/apache/access.log 等，并禁止带有恶意标志的IP，比如密码失败太多","title":"自动IP拦截工具 Fail2Ban"},{"content":"最近公司打算彰显企业文化，要求所有人的电脑壁纸都保持一致。打工人的壁纸自由也没有了。。。。\n没办法，想想怎么实现呢， 网上一堆都是用Windows server 设置组策略来实现的。\n个人觉得AD域来控制还需要单独搞一台Windows服务器偏复杂了，而且我们也只有一个简单的需求，让大家的电脑在不知不觉中把壁纸换了。其他功能都是多余的，不需要！\n来。。分析下可能需要两步：\n1.首先把壁纸放到所有电脑都能访问的地址 （可以通过共享文件或者其他方式）\n2.在所有的电脑后台起一个定时任务，定时去获取最新壁纸并进行设置更换。（一次部署，永久省心）\n代码如下：\n#在大家每天午睡的时候默默跑任务\n@echo off set bat_url=http://**/bz/bzscript.bat curl -o \u0026#34;C:\\Users\\Public\\Pictures\\bzscript.bat\u0026#34; \u0026#34;%bat_url%\u0026#34; set \u0026#34;TASKNAME=bz_task\u0026#34; SCHTASKS /CREATE /TN %TASKNAME% /sc DAILY /st 13:30 /tr \u0026#34;C:\\Users\\Public\\Pictures\\bzscript.bat\u0026#34; #先拿再换\n@echo off set image_url=http://**/bz/bizhi.jpg curl -o \u0026#34;C:\\Users\\Public\\Pictures\\bizhi.jpg\u0026#34; \u0026#34;%image_url%\u0026#34; rem 设置桌面背景为选取的壁纸 reg add \u0026#34;HKEY_CURRENT_USER\\Control Panel\\Desktop\u0026#34; /v Wallpaper /t REG_SZ /d \u0026#34;C:\\Users\\Public\\Pictures\\bizhi.jpg\u0026#34; /f rem 使用SystemParametersInfo设置桌面背景并立即生效 rundll32.exe user32.dll,UpdatePerUserSystemParameters 搞完收工，在自己电脑与随机找几个同事测试下，没毛病，安排上。。。\n","permalink":"http://klxq666.fun/posts/life/replace_computer_wallpaper/","summary":"最近公司打算彰显企业文化，要求所有人的电脑壁纸都保持一致。打工人的壁纸自由也没有了。。。。 没办法，想想怎么实现呢， 网上一堆都是用Windows server 设置组策略来实现的。 个人觉得AD域来控制还需要单独搞一台Windows服务器偏复杂了，而且我们也只有一个简单的需求，让大家的电脑在不知不","title":"不通过Windows server，怎样让全公司的所有电脑定时替换壁纸?"},{"content":"–访问wj百科或google翻译- 用PowerShell终端启动如下命令\n参考链接：https://github.com/rabbit2123/domain-fronting\n\u0026amp; \u0026#34;C:\\Users\\你的用户\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe\u0026#34; --host-rules=\u0026#34;MAP upload.wikimedia.org upload.wikimedia.org:443, MAP *.wikipedia.org wikivoyage.org:443, MAP wikimedia.org wikivoyage.org:443, MAP *.wikimedia.org wikivoyage.org:443, MAP google.com www.gstatic.cn:45030, MAP youtube.com www.gstatic.cn:45030, MAP *.google.com www.gstatic.cn:45030, MAP *.gstatic.com www.gstatic.cn:45030, MAP *.googleapis.com www.gstatic.cn:45030, MAP *.googleusercontent.com www.gstatic.cn:45030, MAP *.ytimg.com www.gstatic.cn:45030, MAP *.youtube.com www.gstatic.cn:45030, MAP *.ggpht.com www.gstatic.cn:45030, MAP github.com octocaptcha.com:443, MAP gist.github.com octocaptcha.com:443, MAP github.githubassets.com www.yelp.com:443, MAP *.githubusercontent.com www.yelp.com:443, MAP duckduckgo.com duck.com:443, MAP *.duckduckgo.com duck.com:443, MAP twitter.com tweetdeck.com:443, MAP *.twitter.com tweetdeck.com:443, MAP *.twimg.com www.yelp.com:443, MAP pixiv.net fanbox.cc:443, MAP *.pixiv.net fanbox.cc:443, MAP *.pximg.net pximg.net:443, MAP quora.com qr.ae:443, MAP *.quora.com qr.ae:443, MAP flickr.com combo.staticflickr.com:443, MAP *.flickr.com combo.staticflickr.com:443, MAP onedrive.live.com od0.live.com:443, MAP skyapi.onedrive.live.com od0.docs.live.net:443, MAP reddit.com www.yelp.com:443, MAP *.reddit.com www.yelp.com:443, MAP *.redd.it www.yelp.com:443, MAP *.redditmedia.com www.yelp.com:443, MAP *.redditstatic.com www.yelp.com:443, MAP instagram.com igsonar.com:443, MAP *.instagram.com igsonar.com:443, MAP *.cdninstagram.com igsonar.com:443, MAP api.openai.com platform.openai.com:443, MAP pinterest.com www.yelp.com:443, MAP *.pinterest.com www.yelp.com:443, MAP i.pinimg.com www.yelp.com:443, MAP s.pinimg.com www.yelp.com:443, MAP imgur.com www.yelp.com:443, MAP *.imgur.com www.yelp.com:443, MAP store.steampowered.com steamuserimages-a.akamaihd.net:443, MAP steamcommunity.com steamuserimages-a.akamaihd.net:443, MAP community.steamstatic.com steamuserimages-a.akamaihd.net:443\u0026#34; --host-resolver-rules=\u0026#34;MAP upload.wikimedia.org 103.102.166.240, MAP wikivoyage.org 208.80.153.224, MAP www.gstatic.cn 183.91.243.26, MAP www.yelp.com 151.101.40.116, MAP tweetdeck.com 104.244.45.4, MAP od0.docs.live.net 13.105.28.18, MAP igsonar.com 31.13.66.167, MAP platform.openai.com 52.152.96.252\u0026#34; 在Windows桌面创建winp.ps1 文件，并将以上内容写入。\n同时再创建个cmd 文件，写入以下内容\nPowerShell -Command \u0026#34;Set-ExecutionPolicy Unrestricted\u0026#34; \u0026gt;\u0026gt; \u0026#34;%TEMP%\\StartupLog.txt\u0026#34; 2\u0026gt;\u0026amp;1 PowerShell C:\\Users\\你的用户\\Desktop\\winp.ps1 \u0026gt;\u0026gt; \u0026#34;%TEMP%\\StartupLog.txt\u0026#34; 2\u0026gt;\u0026amp;1 并计算机管理中设置开机启动任务。这样就可以愉快的玩耍了！\nwin10 自定义设置软件或bat、cmd 文件开机启动，将快捷方式copy到如下目录\nC:\\Users\\你的用户\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\n参考连接: https://github.com/haoel/haoel.github.io\n","permalink":"http://klxq666.fun/posts/life/life_internet/","summary":"–访问wj百科或google翻译- 用PowerShell终端启动如下命令 参考链接：https://github.com/rabbit2123/domain-fronting \u0026amp; \u0026#34;C:\\Users\\你的用户\\AppData\\Local\\Google\\Chrome\\Applic","title":"关于上网的趣事"},{"content":"参考链接：\nhttps://cloud.tencent.com/developer/article/2128739#\n","permalink":"http://klxq666.fun/posts/blog/linux_ssl/","summary":"参考链接： https://cloud.tencent.com/developer/article/2128739#","title":"检测到弱密码，并非所有密码套件均支持完全前向保密"},{"content":"aspberry Pi(中文名为“树莓派”,简写为RPi，(或者RasPi / RPI) 是为学习计算机编程教育而设计)，只有信用卡大小的微型电脑，其系统基于Linux。\n下面是树莓派的简单装系统的小白教材\n一、 准备工作 1.一张8G以上的SD卡（树莓派3使用micro SD卡），最好是高速卡，推荐Class4以上的卡，因为卡的速度直接影响树莓派的运行速度\n2.树莓派系统下载：\n系统下载地址：https://www.raspberrypi.org/downloads/raspbian/\n选择with desktop版本，下载Torrent文件使用迅雷或是其他种子下载工具下载。\n3.Windows下安装镜像的工具：Win32DiskImager\n(见 参考资料https://sourceforge.net/projects/win32diskimager/) 也可以用其他的刻录软件安装\n二、 安装系统 1.解压下载的系统镜像压缩文件，得到img镜像文件\n2.将SD卡使用卡托或者读卡器后，连上电脑\n3.解压并运行Win32DiskImager工具\n4.在软件中选择系统镜像的img文件，“Device”下选择SD卡的盘符，然后点击“Write”\n然后就开始安装系统了，根据你的SD卡的速度，安装过程有快有慢\n5.安装结束后会弹出完成对话框，说明安装就完成了，如果不成功，请关闭防火墙一类的软件，重新插入SD卡进行安装\n请注意安装完，Windows系统下看到SD卡的剩余容量只剩几十MB了，这是正常现象，因为linux下的分区Windows下是看不到的！\n大家可以使用分区软件查看SD卡，就能看到linux下的分区\n其中Ext3区属于linux的文件系统，就和Windows的文件系统NTFS、FAT32、FAT16一样\nSwap区为linux的虚拟内存区，主要在物理内存不够用的时候，做缓存用\n三、 启动树莓派系统 1.先将安装好系统的SD卡插入树莓派\n2.5V/700mA以上的usb接口电源，推荐用1.5A以上的\n3.USB接口的键盘鼠标一套\n4.HDMI线，用于接显示器，或者HDMI转VGA的，HDMI转DVI的，主要看你的显示器接口\n四、 开机 1.按照上面的步骤上电后显示器会有文字\n如果显示器没有显示，可能hdmi线或者转接头有问题，请检查\n2.正常会停在用户和密码登陆界面（系统是debian），请输入用户名：pi，密码：raspberry\n如果你发现键盘按键没有反应，说明兼容问题，请换键盘试试，\n3.正确输入用户和密码后，就出现以下界面，说明树莓派已经正常启动了\n4.键盘输入“startx”启动图形界面，到此为止你的树莓派就正常启动完成了！\n开始愉快的玩耍吧！！！\n参考链接： https://sourceforge.net/projects/win32diskimager/\n","permalink":"http://klxq666.fun/posts/blog/raspberry_pi/","summary":"aspberry Pi(中文名为“树莓派”,简写为RPi，(或者RasPi / RPI) 是为学习计算机编程教育而设计)，只有信用卡大小的微型电脑，其系统基于Linux。 下面是树莓派的简单装系统的小白教材 一、 准备工作 1.一张8G以上的SD卡（树莓派3使用micro SD卡），最好是高速卡，推荐Class4以上","title":"树莓派的小白教程"},{"content":" 1.去官网下载最新的Python2.7的安装包 2.编译安装，并同时处理好老的2.6的指向问题 3.安装pip 一、 下载以及编译 建议使用 wget\n自己到官网找自己想要的2.7以上版本 官网地址：www.python.org/ftp/python\nwget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz\n解压进入目录 cd Python-2.7.15 编译安装，可加配置信息 ，也可指定目录\n./configure --prefix=/usr/local/Python27 make \u0026amp;\u0026amp; make install 跑完一步可输入 echo $? 检查如果返回0，这继续下一步，否则检查报错并处理 二、替换老的Python2.6链接 先备份\nmv /usr/bin/python /usr/bin/python2.6\nln -s /usr/local/Python27/bin/python2.7 /usr/bin/python\n再修复yum问题， vi /usr/bin/yum 把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.6\n就是把旧版本python作为yum的执行环境，保存退出后yum安装即可正常运行。\n三、安装pip 安装pip需要 setuptools模块\nsetuptools模块安装到新版python2.7目录lib/site-packages/下 下载setuptools官网地址：https://pypi.python.org/pypi/setuptools 好像只有setuptools-38.6.0-py2.py3-none-any.whl (md5)和setuptools-38.6.0.zip (md5)两种包 官方推荐使用.whl包，但还不知道怎么安装， 直接下载zip包(2018年3月16号下载) cd /opt/ wget https://pypi.python.org/packages/95/b9/7c61dcfa6953271f567a8db96f110cd8cf75e13a84c1d293649d584d2d39/setuptools-38.6.0.zip 解压zip包 unzip setuptools-38.6.0.zip 进入解压目录 cd setuptools-38.6.0 使用新版本的python安装 python setup.py install 如果这里报错，Compression requires the (missing) zlib module。就是缺少zlib模块 先安装缺少的模块 yum install zlib yum install zlib-devel 将python2.7.15 再重新进行编译安装\ncd /opt/Python-2.7.15 ./configure --prefix=/usr/local/Python27 make \u0026amp;\u0026amp; make install 再进入到setuptools-38.6.0目录 cd /opt/setuptools-38.6.0 再次安装，应该不会再报错了 python setup.py install pip模块的安装 同上，官网地址https://pypi.python.org/pypi/pip ，下载压缩包 wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz tar -zxvf pip-9.0.1.tar.gz cd pip-9.0.1 由于pip安装包依赖于setuptools模块，所以可以直接安装 python setup.py install 最后检查pip版本\npip -version\n参考引用链接：\nhttps://www.cnblogs.com/gne-hwz/p/8586430.html\n","permalink":"http://klxq666.fun/posts/blog/centos6_upgrade_python/","summary":"1.去官网下载最新的Python2.7的安装包 2.编译安装，并同时处理好老的2.6的指向问题 3.安装pip 一、 下载以及编译 建议使用 wget 自己到官网找自己想要的2.7以上版本 官网地址：www.python.org/ftp/python wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz 解压进入目录 cd Python-2.7.15 编译安装，可加配置信息 ，也可指定","title":"centos6 下Python2.6升级到2.7"},{"content":"1.先启动一次，把配置文件copy出来# 创建并运行容器，容器命名为nginx docker run –name nginx -p 80:80 -d nginx\n创建目录存放\nmkdir /usr/local/docker-nginx\n从容器中copy 配置\ndocker cp nginx:/etc/nginx/nginx.conf /usr/local/docker-nginx/\ndocker cp nginx:/etc/nginx/conf.d/ /usr/local/docker-nginx/\ndocker cp nginx:/usr/share/nginx/html/ /usr/local/docker-nginx/\n2.干掉之前的容器，正式启动 docker stop nginx\ndocker rm nginx\n参数解释\n-p 映射端口，格式为“宿主机端口:容器端口 -v 挂载文件 -e TZ=Asia/Shanghai 设置时区 -privileoed=true 让容器中的root用户拥有直下的root权限\n–network host 让容器使用宿主机的IP和端口 –name 容器名字，以后可以使用这个名字启动或者信止容器 -restart=alwavs docker启动时自动启动容器 -d 指定要启动的镜像名\ndocker run -p 80:80 \\ -v /usr/local/docker-nginx/nginx.conf:/etc/nginx/nginx.conf \\ -v /usr/local/docker-nginx/logs:/var/log/nginx \\ -v /usr/local/docker-nginx/html:/usr/share/nginx/html \\ -v /usr/local/docker-nginx/conf.d:/etc/nginx/conf.d \\ -v /data/web:/data/web \\ -v /etc/localtime:/etc/localtime \\ --name nginx \\ --network host \\ --privileged=true \\ --restart=always \\ -d nginx 可以将以下脚本放在/usr/local/docker-nginx/目录下\nreload.sh\ndocker exec nginx nginx -t docker exec nginx nginx -s reload stop.sh\ndocker stop nginx docker rm nginx startup.sh\ndocker run -p 80:80 \\ -v /usr/local/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/docker-nginx/logs:/var/log/nginx \\ -v /usr/local/docker-nginx/html:/usr/share/nginx/html \\ -v /usr/local/docker-nginx/conf.d:/etc/nginx/conf.d \\ -v /data/web:/data/web \\ -v /etc/localtime:/etc/localtime \\ --name nginx \\ --network host \\ --privileged=true \\ --restart=always \\ -d nginx #修改Nginx配置后，可以不用重启容器，进行加载\ndocker exec 容器id nginx -t\ndocker exec 容器id nginx -s reload\n参考链接：\nhttps://blog.csdn.net/red_sky_blue/article/details/124278600\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_nginx/","summary":"1.先启动一次，把配置文件copy出来# 创建并运行容器，容器命名为nginx docker run –name nginx -p 80:80 -d nginx 创建目录存放 mkdir /usr/local/docker-nginx 从容器中copy 配置 docker cp nginx:/etc/nginx/nginx.conf /usr/local/docker-nginx/ docker cp nginx:/etc/nginx/conf.d/ /usr/local/docker-nginx/ docker cp nginx:/usr/share/nginx/html/ /usr/local/docker-nginx/ 2.干掉之前的容器，正式启动 docker stop nginx docker rm nginx 参数解释 -p 映射端口，格式为“宿主机端口:容器端口 -v 挂载文件 -e TZ=Asia/Shanghai 设置时区 -privileoed=true 让容器中","title":"docker 部署Nginx"},{"content":"一、简介 mayfly-go 一个web版linux、数据库、redis、mongo统一管理操作平台\n二、建库，刷脚本 在MySQL机器上创建mayfly_go 库，并刷sql脚本\nsql信息： https://gitee.com/dromara/mayfly-go/blob/master/server/resources/script/sql/mayfly-go.sql create database mayfly_go use mayfly_go; source /opt/mayfly-go/server/resources/script/sql/mayfly-go.sql; 三、docker部署mayfly-go 通过-e容器环境变量设置启动依赖相关参数 注意修改对应参数\ndocker run -d --name mayfly-go -p 18888:8888 \\ -e MAYFLY_JWT_KEY=53445c86e8189b6c646ed7d0d319015144423e72 \\ -e MAYFLY_AES_KEY=7bc5418eefd50402ef39107274891fbe \\ -e MAYFLY_DB_HOST=localhost:3306 \\ -e MAYFLY_DB_USER=root \\ -e MAYFLY_DB_PASS=123456 \\ -e MAYFLY_DB_NAME=mayfly-go \\ -v /usr/local/mayfly-go/mayfly-go.log:/mayfly/mayfly-go.log \\ -v /usr/local/mayfly-go/rec:/mayfly/rec ccr.ccs.tencentyun.com/mayfly/mayfly-go:{version(替换为对应版本号)} 四、nginx配置转发信息 upstream mayfly-go { server 172.17.0.1:18888; } server { keepalive_requests 120; #单连接请求上限次数。 listen 80; #监听端口 server_name xxx.net; #监听地址 proxy_set_header X-Real_IP $remote_addr; proxy_set_header Host $host; proxy_set_header X_Forward_For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; #需要配置支持websocket proxy_set_header Connection \u0026#39;upgrade\u0026#39;; #需要配置支持websocket location / { #请求的url过滤，正则匹配，~为区分大小写，~*为不区分大小写。 proxy_pass http://mayfly-go; #请求转向mayfly-go 定义的服务器列表 } } 参考链接：\nhttps://www.yuque.com/may-fly/mayfly-go/gge2yu8dv4khz5wl\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_mayfly-go/","summary":"一、简介 mayfly-go 一个web版linux、数据库、redis、mongo统一管理操作平台 二、建库，刷脚本 在MySQL机器上创建mayfly_go 库，并刷sql脚本 sql信息： https://gitee.com/dromara/mayfly-go/blob/master/server/resources/script/sql/mayfly-go.sql create database mayfly_go use mayfly_go; source /opt/mayfly-go/server/resources/script/sql/mayfly-go.sql; 三、docker部署mayfly-go 通过-e容器环境变量设置启动依赖相关参数 注意修改对应参数 docker run","title":"docker 部署 mayfly-go"},{"content":"1.简单介绍 Yearning是一个轻量级的Web端的MySQL SQL语句审核平台，提供查询审计，SQL审核，SQL回滚，自定义工作流等多种功能。Yearning的前端是基于Vue.js构建的，它还提供SQL语法高亮、自动补全和智能提示、可视化等。\nYearning自身包含了一套通常适用的审核规范，基本上能满足日常需要，同时规范了日常开发需求所涉及到的SQL变动，在Yearning平台的辅助下，日常的SQL变动也更加贴近SQL使用的规范化、标准化的要求，同时100%基于GO语言研发的Yearning也可以通过自定义二次开发(遵循AGPL协议)增加一些符合自己审核策略。\nYearning的安装十分简单，它只依赖一个mysql数据库用于存储工单的数据。官方提供了安装手册用于在linux上安装Yearning。除此之外，Yearning还支持容器化部署，安装包内置了Dockerfile，方便快捷。同时Yearning还支持二次开发，二次开发的同学可以自己构建发布。\nGitHub地址： https://github.com/cookieY/Yearning/tree/next\n帮助指南：https://next.yearning.io/guide/install.html\n2.本地环境 mysql版本：8.0.33\ndocker版本： 24.0.6\ndocker compose 版本： v2.21.0\n3.搭建与运行 1.在本地MySQL中创建yearning库与账号\ncreate database yearning; CREATE USER \u0026#39;yearning\u0026#39;@\u0026#39;yearning所在机器ip\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;; GRANT ALL ON yearning.* TO \u0026#39;yearning\u0026#39;@\u0026#39;yearning所在机器ip\u0026#39;; FLUSH PRIVILEGES; 2.去GitHub上下载zip包 并docker-compose\n版本GitHub下载地址： https://github.com/cookieY/Yearning/releases\n本次选择当前最新包\nwget https://github.com/cookieY/Yearning/releases/download/v3.1.6.3/Yearning-v3.1.6.3-linux-amd64.zip\n解压进去docker目录下，修改docker-compose.yml 文件\nversion: \u0026#39;3\u0026#39; services: yearning: image: chaiyd/yearning:latest environment: MYSQL_USER: yearning MYSQL_PASSWORD: Abc@123 MYSQL_ADDR: 192.168.2.3 MYSQL_DB: yearning SECRET_KEY: dbcjqaiupqjsuwax IS_DOCKER: is_docker ports: - 28000:8000 # 首次使用请先初始化 command: /bin/bash -c \u0026#34;./Yearning install \u0026amp;\u0026amp; ./Yearning run\u0026#34; restart: always # 默认账号：admin，默认密码：Yearning_admin 因为我使用的本地的MySQL，就把yml里的创建MySQL的配置删除了\ndocker compose up -d\n启动，访问地址： docker所在机器的ip:28000\n默认账号密码为 admin/Yearning_admin\n参考链接:\nhttps://www.cnblogs.com/4ykio/p/16976723.html\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_yearning/","summary":"1.简单介绍 Yearning是一个轻量级的Web端的MySQL SQL语句审核平台，提供查询审计，SQL审核，SQL回滚，自定义工作流等多种功能。Yearning的前端是基于Vue.js构建的，它还提供SQL语法高亮、自动补全和智能提示、可视化等。 Yearning自身包含了一套通常","title":"docker 搭建开源MySQL审计平台yearning"},{"content":"搭建自己的rss\nhttps://sspai.com/post/57498\nhttps://sspai.com/post/41302\nhttps://sspai.com/post/56301\nhttps://ttrss.henry.wang/zh/#%E5%85%B3%E4%BA%8E\n一键部署 umaimi 统计个人网站访问数据\nhttps://mp.weixin.qq.com/s?__biz=Mzg5ODkwNTc2Ng==\u0026amp;mid=2247484525\u0026amp;idx=1\u0026amp;sn=cd3f71aff8833a81c6c8b2b087ced18e\u0026amp;chksm=c05a27a4f72daeb2c189a582908e48291f7c91913082e932fe7b43bfbb4517d54be396fc3792\u0026amp;scene=21#wechat_redirect\n简单, 高效的MYSQL 审计平台\nhttps://yearning.io/ https://gitee.com/cookieYe/Yearning\nhttps://www.cnblogs.com/4ykio/p/16976723.html\nhttps://www.cnblogs.com/4ykio/p/16979154.html\nhttps://gitee.com/cym1102/nginxWebUI Nginx可视化UI网页管理\nhttps://waf-ce.chaitin.cn/docs/guide/install 雷池web防火墙\n","permalink":"http://klxq666.fun/posts/blog/some_fun/","summary":"搭建自己的rss https://sspai.com/post/57498 https://sspai.com/post/41302 https://sspai.com/post/56301 https://ttrss.henry.wang/zh/#%E5%85%B3%E4%BA%8E 一键部署 umaimi 统计个人网站访问数据 https://mp.weixin.qq.com/s?__biz=Mzg5ODkwNTc2Ng==\u0026amp;mid=2247484525\u0026amp;idx=1\u0026amp;sn=cd3f71aff8833a81c6c8b2b087ced18e\u0026amp;chksm=c05a27a4f72daeb2c189a582908e48291f7c91913082e932fe7b43bfbb4517d54be396fc3792\u0026amp;scene=21#wechat_redirect 简单, 高效的MYSQL 审计平台 https://yearning.io/ https://gitee.com/cookieYe/Yearning https://www.cnblogs.com/4ykio/p/16976723.html https://www.cnblogs.com/4ykio/p/16979154.html https://gitee.com/cym1102/nginxWebUI Nginx可视化UI网页管理 https://waf-ce.chaitin.cn/docs/guide/install 雷池web防火墙","title":"一些有趣好玩的东西"},{"content":"systemctl start docker.service 后，\njournalctl -xe 查看详细报错如下\nfailed to start daemon: Devices cgroup isn\u0026#39;t mounted node01 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE node01 systemd[1]: Failed to start Docker Application Container Engine. -- Subject: Unit docker.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit docker.service has failed. -- -- The result is failed. 参照此链接编辑脚本并运行\nhttps://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount\n再次重启即可\n参考链接：\nhttps://blog.csdn.net/red_sky_blue/article/details/124278600\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_offline_install_fail/","summary":"systemctl start docker.service 后， journalctl -xe 查看详细报错如下 failed to start daemon: Devices cgroup isn\u0026#39;t mounted node01 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE node01 systemd[1]: Failed to start Docker Application Container Engine. -- Subject: Unit docker.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit docker.service has failed. -- -- The result is failed. 参照此链接编辑脚本并运行 https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount 再次重启即可 参考链接： https://blog.csdn.net/red_sky_blue/article/details/124278600","title":"docker 离线安装失败 failed to start daemon: Devices cgroup isn't mounted"},{"content":"docker 部署Nginx\n一、安装 docker 1.从官方下载Docker安装包并上传至虚拟机 https://download.docker.com/linux/static/stable/x86_64/\n2.解压安装包 tar -xvf docker-22.0.6.tgz\n3.将解压出来的docker文件内容移动到 /usr/bin/ 目录下 mv docker/* /usr/bin/\n4.将docker注册为service服务 vi /etc/systemd/system/docker.service\n[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target 5.启动docker\nchmod +x /etc/systemd/system/docker.service #设置权限 systemctl daemon-reload systemctl start docker #启动Docker systemctl enable docker.service #设置开机自启 6.验证 systemctl status docker #查看Docker状态\ndocker -v #查看Docker版本\n二、安装 docker-compose 1.获取docker-compose部署文件，官方获取地址如下： https://github.com/docker/compose/releases/docker-compose-Linux-x86_64\n2.将上述文件拷贝至服务器某处，然后将其移动到/usr/local/bin，并重命名为“docker-compose” mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose\n3.为docker-compose文件赋予可执行权限，命令如下： chmod +x /usr/local/bin/docker-compose\n4.查看是否安装成功，命令如下： docker-compose -v\n","permalink":"http://klxq666.fun/posts/blog/docker/offine_install_docker/","summary":"docker 部署Nginx 一、安装 docker 1.从官方下载Docker安装包并上传至虚拟机 https://download.docker.com/linux/static/stable/x86_64/ 2.解压安装包 tar -xvf docker-22.0.6.tgz 3.将解压出来的docker文件内容移动到 /usr/bin/ 目录下 mv docker/* /usr/bin/ 4.将docker注册为service服务 vi /etc/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers","title":"离线安装docker 以及docker-compose"},{"content":"一.minio介绍 Minio 是个基于 Golang 编写的开源对象存储套件，虽然轻量，却拥有着不错的性能。\n官网地址：MinIO | High Performance, Kubernetes Native Object Storage\n何为对象存储？我们来看下阿里云 OSS （Object Storage Service）的介绍：\n对象存储服务（Object Storage Service，OSS）是一种海量、安全、低成本、高可靠的云存储服务，适合存放任意类型的文件。容量和处理能力弹性扩展，多种存储类型供选择，全面优化存储成本。 对于中小型企业，如果不选择存储上云，那么 Minio 是个不错的选择，麻雀虽小，五脏俱全。当然 Minio 除了直接作为对象存储使用，还可以作为云上对象存储服务的网关层，无缝对接到 Amazon S3、MicroSoft Azure。\n二.准备工作 1.在所有机器上 配置主机名解析\ncat \u0026gt;\u0026gt; /etc/hosts \u0026lt;\u0026lt; EOF 192.168.188.40 minio1 192.168.188.41 minio2 EOF 2.配置时间同步、关闭防火墙和selinux\n3.确保主机都安装了docker 以及docker compose\ndocker-compose.yml\nversion: \u0026#39;3.7\u0026#39; # Settings and configurations that are common for all containers # minio节点之间默认使用9000来连通，所以容器把9000暴露出来，9001是console端口，每个节点设置两块磁盘 x-minio-common: \u0026amp;minio-common image: minio/minio:latest command: server --console-address \u0026#34;:9001\u0026#34; http://minio{1...2}/data{1...2} expose: - \u0026#34;9000\u0026#34; - \u0026#34;9001\u0026#34; # 增加host映射，以便两个节点之间通过域名连通 extra_hosts: minio1: 192.168.188.40 minio2: 192.168.188.41 depends_on: - nginx environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio123 healthcheck: test: [\u0026#34;CMD\u0026#34;, \u0026#34;curl\u0026#34;, \u0026#34;-f\u0026#34;, \u0026#34;http://localhost:9000/minio/health/live\u0026#34;] interval: 30s timeout: 20s retries: 5 # starts 3 docker containers running minio server instances. # using nginx reverse proxy, load balancing, you can access # it through port 9000. # 数据盘挂载目录，按需修改 services: minio1: \u0026lt;\u0026lt;: *minio-common container_name: minio1 hostname: minio1 volumes: - /bigdata/minio/data1-1:/data1 - /bigdata/minio/data1-2:/data2 ports: - \u0026#34;9000:9000\u0026#34; - \u0026#34;9001:9001\u0026#34; minio2: \u0026lt;\u0026lt;: *minio-common container_name: minio2 hostname: minio2 volumes: - /media/minio/data2-1:/data1 - /media/minio/data2-2:/data2 ports: - \u0026#34;9000:9000\u0026#34; - \u0026#34;9001:9001\u0026#34; # 两个节点都安装nginx，并且负载到两个节点，nginx暴露端口按需修改19000/19001 nginx: image: nginx:1.19.2-alpine container_name: nginx-minio hostname: nginx volumes: - /data/nginx-minio.conf:/etc/nginx/nginx.conf:ro ports: - \u0026#34;19000:9000\u0026#34; - \u0026#34;19001:9001\u0026#34; extra_hosts: minio1: 192.168.188.40 minio2: 192.168.188.41 nginx-minio.conf\nuser nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 4096; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main \u0026#39;$remote_addr - $remote_user [$time_local] \u0026#34;$request\u0026#34; \u0026#39; \u0026#39;$status $body_bytes_sent \u0026#34;$http_referer\u0026#34; \u0026#39; \u0026#39;\u0026#34;$http_user_agent\u0026#34; \u0026#34;$http_x_forwarded_for\u0026#34;\u0026#39;; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # include /etc/nginx/conf.d/*.conf; upstream minio { server minio1:9000; server minio2:9000; } upstream console { ip_hash; server minio1:9001; server minio2:9001; } server { listen 9000; listen [::]:9000; server_name localhost; # To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection \u0026#34;\u0026#34;; chunked_transfer_encoding off; proxy_pass http://minio; } } server { listen 9001; listen [::]:9001; server_name localhost; # To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; # This is necessary to pass the correct IP to be hashed real_ip_header X-Real-IP; proxy_connect_timeout 300; # To support websocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \u0026#34;upgrade\u0026#34;; chunked_transfer_encoding off; proxy_pass http://console; } } } 4.将以上两个文件放在每台机器的同一目录下，去分别启动\n#拉镜像 ./docker compose pull #后台启动容器，三台机器分别对应各自节点 mini01 /minio2 (切勿单台启动多个) 在188-40上执行 ./docker compose up -d minio1 在188-41上执行 ./docker compose up -d minio2 5.验证 ，登录 http://192.168.188.40:19001\n账号密码 minio / minio123\n参考链接：\nhttps://www.jianshu.com/p/4428713e22f4\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_minio/","summary":"一.minio介绍 Minio 是个基于 Golang 编写的开源对象存储套件，虽然轻量，却拥有着不错的性能。 官网地址：MinIO | High Performance, Kubernetes Native Object Storage 何为对象存储？我们来看下阿里云 OSS （Object Storage Service）的介绍： 对象存储服务（Object Storage Service，OSS）是一种海量、安全、低成本、高可靠的云存","title":"docker-compose 搭建多主机分布式minio"},{"content":"一、AWX简介 AWX提供了一个基于web的用户界面、REST API和构建在Ansible之上的任务引擎。 图形化的AWX 能够更方便的编排和部署 Ansible Playbook，并提供集中的日志记录、审计和系统跟踪。AWX是商业版Ansible Tower 的开源版本。\nawx项目地址：https://github.com/ansible/awx/\n二、环境说明： centos 7.9\nansible 2.9.27\ndocker version 24.0.6\npython version 3.6.8\nawx version 11.2.0\n三、ansiible 安装 yum -y install epel-release yum -y install ansible 四、docker安装 yum install -y yum-utils device-mapper-persistent-data lvm2 #添加阿里的docker源 yum-config-manager \\ --add-repo \\ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #未指定版本，默认最新版本 yum install -y docker-ce docker-ce-cli containerd.io #启动docker 并设置开机自动 systemctl start docker systemctl enable docker #设置镜像加速 #配置daemon.json tee /etc/docker/daemon.json \u0026lt;\u0026lt;-\u0026#39;EOF\u0026#39; { \u0026#34;registry-mirrors\u0026#34;: [\u0026#34;https://eywbgdoj.mirror.aliyuncs.com\u0026#34;] } EOF #重启服务 systemctl daemon-reload systemctl restart docker 五、安装Python模块 #安装pip yum -y install python3-pip #利用pip安装以下几个python模块 pip install requests docker docker-compose 六、安装awx #下载awx版本，解压安装 wget https://github.com/ansible/awx/archive/11.2.0.tar.gz tar zxf 11.2.0.tar.gz cd awx-11.2.0/installer ansible-playbook -i inventory install.yml #awx的组件通过容器方式安装，分别下载对应版本镜像,，镜像下载需要些时间，请保持网络环境稳定 可以通过 docker images 和 docker ps 查看 七、登录awx 登录地址: http://你的ip\n默认账号 admin 密码password\n#遇到的问题\n检查发现是有libselinux-python-2.5-15.el7.x86_64\n但需要安装yum install libselinux-python3 才ok\n#修复连接失败错误\necho \u0026#34;host all all 172.18.0.0/24 md5\u0026#34; \u0026gt;\u0026gt; ~/.awx/pgdocker/10/data/pg_hba.conf #初始化数据库\ndocker exec -t awx_postgres createdb --user awx awx cd ~/.awx/awxcompose/ docker-compose restart postgres docker-compose restart task 参考链接：\nhttps://github.com/ansible/awx/\nhttps://cloud.tencent.com/developer/article/1632514\nhttps://bleepcoder.com/cn/awx/493128397/docker-compose-install-gets-no-pg-hba-conf-entry\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_ansible_awx/","summary":"一、AWX简介 AWX提供了一个基于web的用户界面、REST API和构建在Ansible之上的任务引擎。 图形化的AWX 能够更方便的编排和部署 Ansible Playbook，并提供集中的日志记录、审计和系统跟踪。AWX是商业版Ansible Tower 的开源版本。 awx项目地址：https://gith","title":"docker 部署ansible UI管理工具awx"},{"content":"一. 介绍 sealos 是什么？我想引用它官方的一句话改造下，sealos 让云像个人电脑一样简单\n官方文档地址：https://docs.sealos.io/zh-Hans/docs/Intro\n今年6月份，sealos 正式发布了公有云托管版本，网上私有化教程不多，自己一点小坑现记录如下\n主要参考 https://mp.weixin.qq.com/s/tlXQ92jM2T35z-57oPsaRQ\nsealos 版本建议下载最新版（latest 版本）\nhttps://docs.sealos.io/zh-Hans/docs/self-hosting/lifecycle-management/quick-start/install-cli\n基本条件 服务器内核版本在5.4及以上 不会的看这个 https://www.cnblogs.com/xq0422/p/17733293.html 配置最低2核4G内存60G硬盘 Master 节点可以通过 SSH 免密登陆到其他节点 二. 部署 主要分成三个步骤\n1、部署 Kubernetes 集群 #修改masters 与nodes 为自己的ip # 注意：helm 版本需要在 3.12.0 及以上! $ sealos gen labring/kubernetes:v1.25.6 \\ labring/helm:v3.12.0 \\ labring/calico:v3.24.1 \\ labring/cert-manager:v1.8.0 \\ labring/openebs:v3.4.0 \\ --masters 10.140.0.16 \\ --nodes 10.140.0.54 \u0026gt; Clusterfile # 请修改 Clusterfile 中的 PodSubnet 及 ServiceSubnet # 默认的 PodSubnet: 100.64.0.0/10 # 默认的 ServiceSubnet: 10.96.0.0/22 $ sealos apply -f Clusterfile 2、部署 Sealos 依赖组件 注意kubeblocks 镜像为v0.6.2版本 #!/bin/bash set -e cat \u0026lt;\u0026lt; EOF \u0026gt; ingress-nginx-config.yaml apiVersion: apps.sealos.io/v1beta1 kind: Config metadata: creationTimestamp: null name: ingress-nginx-config spec: data: | controller: hostNetwork: true kind: DaemonSet service: type: NodePort match: docker.io/labring/ingress-nginx:v1.5.1 path: charts/ingress-nginx/values.yaml strategy: merge EOF sealos run docker.io/labring/kubernetes-reflector:v7.0.151\\ docker.io/labring/ingress-nginx:v1.5.1\\ docker.io/labring/zot:v1.4.3\\ docker.io/labring/kubeblocks:v0.6.2\\ --env policy=anonymousPolicy\\ --config-file ingress-nginx-config.yaml echo \u0026#34;patch ingress-nginx-controller tolerations to allow run on master node, if you don\u0026#39;t want to run on master node, please ignore this step\u0026#34; kubectl -n ingress-nginx patch ds ingress-nginx-controller -p \u0026#39;{\u0026#34;spec\u0026#34;:{\u0026#34;template\u0026#34;:{\u0026#34;spec\u0026#34;:{\u0026#34;tolerations\u0026#34;:[{\u0026#34;key\u0026#34;:\u0026#34;node-role.kubernetes.io/control-plane\u0026#34;,\u0026#34;operator\u0026#34;:\u0026#34;Exists\u0026#34;,\u0026#34;effect\u0026#34;:\u0026#34;NoSchedule\u0026#34;}]}}}}\u0026#39; echo \u0026#34;waitting for kubeblocks crd created, this may take a while\u0026#34; while ! kubectl get clusterdefinitions.apps.kubeblocks.io redis \u0026gt;/dev/null 2\u0026gt;\u0026amp;1; do sleep 5 done echo \u0026#34;start patch redis clusterdefinition\u0026#34; kubectl patch clusterdefinitions.apps.kubeblocks.io redis --type=\u0026#39;json\u0026#39; -p \u0026#39;[{\u0026#34;op\u0026#34;: \u0026#34;add\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/componentDefs/0/podSpec/containers/1/resources/limits\u0026#34;, \u0026#34;value\u0026#34;: {\u0026#34;cpu\u0026#34;:\u0026#34;100m\u0026#34;, \u0026#34;memory\u0026#34;:\u0026#34;100Mi\u0026#34;}}]\u0026#39; echo \u0026#34;patch redis success\u0026#34; echo \u0026#34;wait for all pod to be ready then install Sealos\u0026#34; kubectl get po -A 3、部署Sealos #ip 要改成自己的 $ sealos run docker.io/labring/sealos-cloud:latest --env cloudDomain=\u0026#34;34.81.60.57.nip.io\u0026#34; 问题集合：\n1.安装失败就多试几次 sealos reset ，确保kubectl get po -A 都是Running 的情况下再执行下一步\n2.“ Waiting waiting for mongodb secret generated ”， 应检查kubeblocks是否正常。\nkbcli addon list 应保证apecloud-mysql、mongodb、postgresql、redis为enable\n3.私有化充值问题，官方当前还在开发中，用root账号，默认密码sealos2023.，有一定额度\n","permalink":"http://klxq666.fun/posts/blog/centos_sealos/","summary":"一. 介绍 sealos 是什么？我想引用它官方的一句话改造下，sealos 让云像个人电脑一样简单 官方文档地址：https://docs.sealos.io/zh-Hans/docs/Intro 今年6月份，sealos 正式发布了公有云托管版本，网上私有化教程不多，自己一点小坑现记录如下 主要参考 https://mp.weixin.qq.com/s/tlXQ92jM2T35z-57oPsaRQ","title":"centos 本地私有化部署sealos 桌面"},{"content":"1.CPU使用率 下载地址一：http://todo.sercretcore.cn/cpu.zip\n下载地址二：https://cdn.wyr.me/files/cpu.zip\n使用方法\n例1：所有CPU核心负载30%运行10秒钟# ./cpu -p 30 -t 10 例2：所有CPU核心负载30%持续运行# ./cpu -p 30 例3：只让2个CPU核心负载30%运行10秒钟# ./cpu -p 30 -c 2 -t 10 参数说明 –coresCount value, -c value 使用多少核心 (可选, 默认: 8)\n–timeSeconds value, -t value 运行多长时间 (可选, 默认: 2147483647)\n–percentage value, -p value 每个核心的负载百分比 (必须)\n–help, -h 显示帮助信息 #实际测试很方便 ，也很准确\n2.内存使用率 下载地址一：http://todo.sercretcore.cn/memory.zip\n下载地址二：https://cdn.wyr.me/files/memory.zip\n使用方法\n例1：快速进行内存泄露至2GB# $ ./memory -d 5 -l 2048 Leaked: 2048 MiB ███████▒▒▒ Holding at 2048 MiB 例2：后台运行内存泄露至13GB# nohup ./memory -l 13312 \u0026gt;\u0026gt; memory.log 2\u0026gt;\u0026amp;1 \u0026amp; 参数说明 ./memory [-d \u0026lt;泄露延迟 ms; 默认 100\u0026gt;]\n-d int 选项: 调整泄漏率的延迟（毫秒）; 默认 100ms\n-l int 选项: 内存泄漏上限 (MiB); 默认无上限\n实际测试 -l 是在现有使用内存的基础上，再增加多少M的效果 效果还是不错的\n3.硬盘占用 进入到需要生成占用文件的目录，使用dd命令生成对应大小文件。\ndd if=/dev/zero of=data bs=1M count=1024 上述命令将生成1G大小的名为data的文件。修改1024调整生成文件的大小。 #PS 还有个 fallocate命令， 可以瞬间创建出一个180G大小的文件，将磁盘空间占满，进行相关的测试。 fallocate -l 180G bigfile 参考链接：\nhttps://www.wyr.me/post/650\nhttps://blog.csdn.net/change_can/article/details/117958498\n此项目为开源项目，同时也非常感谢原作者的付出\nhttps://github.com/vikyd/go-cpu-load\nhttps://github.com/robert-mcdermott/memoryleaker\n","permalink":"http://klxq666.fun/posts/blog/add_cpu_memory/","summary":"1.CPU使用率 下载地址一：http://todo.sercretcore.cn/cpu.zip 下载地址二：https://cdn.wyr.me/files/cpu.zip 使用方法 例1：所有CPU核心负载30%运行10秒钟# ./cpu -p 30 -t 10 例2：所有CPU核心负载30%持续运行# ./cpu -p 30","title":"提高机器 CPU 、内存、硬盘的使用率"},{"content":"一、SQL的语法知识 1.全表查询 示例： select * from 表名\n2.选择查询 选择特定的列或者字段 示例： select name,age 表名\n3.查询别名 {原始字段名} as {别名} 示例： select name as ‘学生姓名’ 表名\n4.查询 常量和运算 加减乘除、取平均值、连接文本等\n示例： select name,score,score / 2 as double_score from student\n5.条件查询 where 示例： select name,score from student where name = ‘鱼’\n6.条件查询 运算符 =、 !=、\u0026lt;、\u0026gt; 示例： select name,score,age from student where name != ‘dog’\n7.条件查询 空值 “IS NULL” 和 “IS NOT NULL” 来判断字段是否为空值或非空值\n示例： select name,age,score from student where age is not null\n8.条件查询 模糊查询 like \\ not like\n百分号（%）：表示任意长度的任意字符序列。 下划线（_）：表示任意单个字符。 复制 示例： select name,score from student where name not like ‘%李%’\n9.条件查询 逻辑运算 AND：表示逻辑与，要求同时满足多个条件，才返回 true。 OR：表示逻辑或，要求满足其中任意一个条件，就返回 true。 NOT：表示逻辑非，用于否定一个条件（本来是 true，用了 not 后转为 false） 示例： select name,score from student where name like ‘%李%’ or score \u0026gt; 500\n10.基础语法 去重 使用 DISTINCT 关键字来实现去重操作\n示例： select distinct class_id ,score from student\n11.基础语法 排序 在 SQL 中，我们可以使用 ORDER BY 关键字来实现排序操作。ORDER BY 后面跟上需要排序的字段，可以选择升序（ASC）或降序（DESC）排列\n示例： select name,age,score from student order by score desc ,age asc\n12.基础语法 截断和偏移 1）你可以使用手指挡住不需要看的部分（即截断）\n2）根据任务的编号，直接翻到需要查看的位置（即偏移）\n在 SQL 中，我们使用 LIMIT 关键字来实现数据的截断和偏移。\n示例： select name,age from student order by age asc limit 1,3\n13.基础语法 条件分支 case when 是 SQL 中用于根据条件进行分支处理的语法\n示例：\nselect name, case when (age \u0026gt; 60) then \u0026#39;老同学\u0026#39; when (age \u0026gt; 20) then \u0026#39;年轻\u0026#39; else \u0026#39;小同学\u0026#39; end as age_level from student order by name asc 14.函数 时间函数 DATE：获取当前日期 DATETIME：获取当前日期时间 TIME：获取当前时间 示例： select name ,date() as ‘当前日期’ from student\n15.函数 - 字符串处理 转换大小写、计算字符串长度以及搜索和替换子字符串等\n示例：\nselect id,name ,upper(name) as upper_name from student where name = \u0026#39;热dog\u0026#39; 16.函数 - 聚合函数 COUNT：计算指定列的行数或非空值的数量。 SUM：计算指定列的数值之和。 AVG：计算指定列的数值平均值。 MAX：找出指定列的最大值。 MIN：找出指定列的最小值。 示例：\nselect sum(score) as total_score, avg(score) as avg_score, max(score) as max_score, min(score) as min_score from student 17.分组聚合 - 单字段分组 GROUP BY 关键字对数据进行分组\n示例：\nselect class_id, avg(score) as avg_score from student group by class_id 18.分组聚合 - 多字段分组 多字段分组和单字段分组的实现方式几乎一致，使用 GROUP BY 语法即可\n示例：\nselect class_id, exam_num, count(id) as total_num from student group by class_id, exam_num 19.分组聚合 - having 子句 HAVING 子句与条件查询 WHERE 子句的区别在于，WHERE 子句用于在 分组之前 进行过滤，而 HAVING 子句用于在 分组之后 进行过滤。\n示例：\nselect class_id, sum(score) as total_score from student group by class_id having sum(score) \u0026gt; 150 20.查询进阶-关联查询-cross join CROSS JOIN 是一种简单的关联查询，不需要任何条件来匹配行，它直接将左表的 每一行 与右表的 每一行 进行组合，返回的结果是两个表的笛卡尔积\n示例：\nselect s.name as student_name, s.age as student_age, s.class_id as class_id, c.name as class_name from student s cross join class c 21.查询进阶-关联查询-inner join INNER JOIN 只返回两个表中满足关联条件的交集部分，即在两个表中都存在的匹配行\n示例：\nselect s.name as student_name, s.age as student_age, s.class_id as class_id, c.name as class_name, c.level as class_level from student s join class c on s.class_id = c.id 22.查询进阶-关联查询-outer join OUTER JOIN 是一种关联查询方式，它根据指定的关联条件，将两个表中满足条件的行组合在一起，并 包含没有匹配的行 。\n在 OUTER JOIN 中，包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型，它们分别表示查询左表和右表的所有行（即使没有被匹配），再加上满足条件的交集部分\n示例：\nselect s.name as student_name, s.age as student_age, s.class_id as class_id, c.name as class_name, c.level as class_level from student s left join class c on s.class_id = c.id 23.查询进阶 - 子查询 子查询是指在一个查询语句内部 嵌套 另一个完整的查询语句，内层查询被称为子查询。子查询可以用于获取更复杂的查询结果或者用于过滤数据。\n示例：\nselect name, score, class_id from student where class_id in ( select id from class ); 24.查询进阶 -子查询 - exists 子查询中的一种特殊类型是 “exists” 子查询，用于检查主查询的结果集是否存在满足条件的记录，它返回布尔值（True 或 False），而不返回实际的数据。\n和 exists 相对的是 not exists，用于查找不满足存在条件的记录\n示例：\nselect name, age, class_id from student where not exists ( select 1 from class where class.id = student.class_id ) 25.查询进阶 -组合查询 两种常见的组合查询操作：UNION 和 UNION ALL。\nUNION 操作：它用于将两个或多个查询的结果集合并， 并去除重复的行 。即如果两个查询的结果有相同的行，则只保留一行。 UNION ALL 操作：它也用于将两个或多个查询的结果集合并， 但不去除重复的行 。即如果两个查询的结果有相同的行，则全部保留。两种常见的组合查询操作：UNION 和 UNION ALL。 UNION 操作：它用于将两个或多个查询的结果集合并， 并去除重复的行 。即如果两个查询的结果有相同的行，则只保留一行。 UNION ALL 操作：它也用于将两个或多个查询的结果集合并， 但不去除重复的行 。即如果两个查询的结果有相同的行，则全部保留。 示例：\nselect name,age,score,class_id from student union all select name,age,score,class_id from student_new 26.查询进阶-开窗函数-sum over 在 SQL 中，开窗函数是一种强大的查询工具，它允许我们在查询中进行对分组数据进行计算、 同时保留原始行的详细信息 。\n开窗函数可以与聚合函数（如 SUM、AVG、COUNT 等）结合使用，但与普通聚合函数不同，开窗函数不会导致结果集的行数减少。\nSUM(计算字段名) OVER (PARTITION BY 分组字段名)\n示例：\nselect id,name,age,score,class_id, avg(score) over (partition by class_id) as class_avg_score from student 27.查询进阶-开窗函数-sum over order by sum over order by，可以实现同组内数据的 累加求和\nSUM(计算字段名) OVER (PARTITION BY 分组字段名 ORDER BY 排序字段 排序规则)\n示例：\nselect id,name,age,score,class_id, sum(score) over (partition by class_id order by score asc) as class_sum_score from student 28.查询进阶-开窗函数-rank Rank 开窗函数是 SQL 中一种用于对查询结果集中的行进行 排名 的开窗函数。它可以根据指定的列或表达式对结果集中的行进行排序，并为每一行分配一个排名。在排名过程中，相同的值将被赋予相同的排名，而不同的值将被赋予不同的排名。\n当存在并列（相同排序值）时，Rank 会跳过后续排名，并保留相同的排名。 Rank 开窗函数的常见用法是在查询结果中查找前几名（Top N）或排名最高的行。\nRank 开窗函数的语法如下：\nRANK() OVER ( PARTITION BY 列名1, 列名2, ... -- 可选，用于指定分组列 ORDER BY 列名3 [ASC|DESC], 列名4 [ASC|DESC], ... -- 用于指定排序列及排序方式 ) AS rank_column 其中， PARTITION BY 子句可选，用于指定分组列，将结果集按照指定列进行分组； ORDER BY 子句用于指定排序列及排序方式，决定了计算 Rank 时的排序规则。 AS rank_column 用于指定生成的 Rank 排名列的别名。 PARTITION BY ORDER BY AS rank_column 示例：\nselect id,name,age,score,class_id, rank() over (partition by class_id order by score desc) as ranking from student 29.查询进阶-开窗函数-row_number Row_Number 开窗函数是 SQL 中的一种用于为查询结果集中的每一行 分配唯一连续排名 的开窗函数。\n它与之前讲到的 Rank 函数，Row_Number 函数为每一行都分配一个唯一的整数值，不管是否存在并列（相同排序值）的情况。每一行都有一个唯一的行号，从 1 开始连续递增。\nRow_Number 开窗函数的语法如下（几乎和 Rank 函数一模一样）：\nROW_NUMBER() OVER ( PARTITION BY column1, column2, ... -- 可选，用于指定分组列 ORDER BY column3 [ASC|DESC], column4 [ASC|DESC], ... -- 用于指定排序列及排序方式 ) AS row_number_column 其中， PARTITION BY 子句可选，用于指定分组列，将结果集按照指定列进行分组；\nORDER BY 子句用于指定排序列及排序方式，决定了计算 Rank 时的排序规则。\nAS rank_column 用于指定生成的 Rank 排名列的别名。 PARTITION BY ORDER BY AS rank_column\n示例：\nselect id,name,age,score,class_id, row_number() over (partition by class_id order by score desc) as row_number from student 30.查询进阶-开窗函数-lag / lead 开窗函数 Lag 和 Lead 的作用是获取在当前行之前或之后的行的值，这两个函数通常在需要比较相邻行数据或进行时间序列分析时非常有用\n1）Lag 函数\nLag 函数用于获取 当前行之前 的某一列的值。它可以帮助我们查看上一行的数据。\nLag 函数的语法如下：\nLAG(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column) 参数解释：\ncolumn_name：要获取值的列名。 offset：表示要向上偏移的行数。例如，offset为1表示获取上一行的值，offset为2表示获取上两行的值，以此类推。 default_value：可选参数，用于指定当没有前一行时的默认值。 PARTITION BY和ORDER BY子句可选，用于分组和排序数据。 2）Lead 函数\nLead 函数用于获取 当前行之后 的某一列的值。它可以帮助我们查看下一行的数据。\nLead 函数的语法如下：\nLEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_ column) column) 示例：\nselect id,name,age, score,class_id, lag(name,1,null) over (partition by class_id order by score desc) as prev_name, lead(name,1,null) over (partition by class_id order by score desc) as next_name from student 参考鱼皮大佬的SQL之母\n学习链接：http://sqlmother.yupi.icu/#/learn\n","permalink":"http://klxq666.fun/posts/blog/mysql/mysql_syntax/","summary":"一、SQL的语法知识 1.全表查询 示例： select * from 表名 2.选择查询 选择特定的列或者字段 示例： select name,age 表名 3.查询别名 {原始字段名} as {别名} 示例： select name as ‘学生姓名’ 表名 4.查询 常量和运算 加减乘除、取平均值、连接文本等 示例： select name,score,score / 2 as double_score from student 5.条件查询 where 示例： select name,score from student where name = ‘鱼’ 6.条件查询","title":"SQL的语法知识"},{"content":"-------先查看datadir的路径------------------------------------ use mysql show variables like \u0026#39;%datadir%\u0026#39;; ———————————————————————— --datadir=/data/mysqldata/mysql 老的 --datadir=/bigdata/new_mysqldata 新的 ———————————————————————— 改变MySQL数据文件的存储目录时，需要执行以下步骤：\n1.新建一个用于存储数据的目录\nmkdir -p /bigdata/new_mysqldata 2.停止MySQL服务器：\nsystemctl stop mysql.service 也可以先再次启动下看看是否能正常启动，排除其他人改了配置未重启\n3.执行计划任务中的备份脚本，备份当前最新的mysql数据\n4.将当前的MySQL数据目录```到新的目录 /bigdata/new_mysqldata\ncp -a /data/mysqldata/mysql /bidata/new_mysqldata 5.修改 MySQL 配置文件 /etc/my.cnf。将 datadir 参数设置为新的 MySQL 数据目录 /bigdata/new_mysqldata, 其他相关的老路径都改为新目录\nsed -i \u0026#39;s/data\\/mysqldata/bigdata\\/new_mysqldata/\u0026#39; /etc/my.cnf | grep new_mysqldata [mysqld] datadir=/bigdata/new_mysqldata 6.将binlog-index进行编辑，将源路径修改为目标(实际)路径,读取新的binlog位置\nsed -i \u0026#39;s/data\\/mysqldata/bigdata\\/new_mysqldata/\u0026#39; binlog-index | grep new_mysqldata 7.重启 MySQL 服务器\nsystemctl start mysql.service 8.确认 MySQL 数据库是否已经正常启动\nsystemctl status mysql.service ps -ef |grep mysql 确认下是否改成功，以及库是否正确————————————————————————\nshow databases; use mysql show variables like \u0026#39;%datadir%\u0026#39;; #查看datadir的路径是否已经更改 将老的/data/mysqldata/mysql 移走，mv /data/mysqldata /data/oldmysqldata\n如果遇到启动问题参考链接与错误日志一步一步排查： https://blog.csdn.net/xiaojie12312/article/details/123998691\n参考链接：\nhttps://blog.csdn.net/weixin_34722157/article/details/113286099?ops_request_misc=\u0026amp;request_id=\u0026amp;biz_id=102\u0026amp;utm_term=mysql%E5%A6%82%E4%BD%95%E5%86%B7%E5%A4%87%E4%BB%BD\u0026amp;utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-113286099.142^v88^control_2,239^v2^insert_chatgpt\u0026amp;spm=1018.2226.3001.4449\n","permalink":"http://klxq666.fun/posts/blog/mysql/change_mysql_directory/","summary":"-------先查看datadir的路径------------------------------------ use mysql show variables like \u0026#39;%datadir%\u0026#39;; ———————————————————————— --datadir=/data/mysqldata/mysql 老的 --datadir=/bigdata/new_mysqldata 新的 ———————————————————————— 改变MySQL数据文件的存储目录时，需要执行以下","title":"修改MySQL8.0的数据存储目录"},{"content":"实验机器：\n192.168.188.30\n192.168.188.31\n一.主主模式搭建，两台机器的版本需一致 其他配置可参考MySQL8安装那篇文章 配置参数除server-id不同外，只需添加以下两个参数即可\nbinlog_format=ROW\nlog_bin=/data/mysql/data/mysql-bin-30.log （可选）\n二、在188.30 数据库 设置同步账号与密码,此密码可不同 mysql\u0026gt;create user \u0026#39;repl_user\u0026#39;@\u0026#39;192.168.188.%\u0026#39; identified by \u0026#39;test@2023\u0026#39;; mysql\u0026gt;grant replication slave on *.* to \u0026#39;repl_user\u0026#39;@\u0026#39;192.168.188.%\u0026#39;; mysql\u0026gt;flush privileges; show master status; #去31上查看二进制日志信息\n根据查到的信息，再继续执行\nFile :当前正在记录的二进制日志文件 Position ：记录偏移量，日志 mysql-bin.000008 所记录到的位置。 Binlog_Do_DB ：要记录日志的数据库 Binlog_Ignore_DB ：不记录日志的数据库 Executed_Gtid_Set ：已执行的事务ID CHANGE MASTER TO MASTER_HOST=\u0026#39;192.168.188.31\u0026#39;, MASTER_USER=\u0026#39;repl_user\u0026#39;, MASTER_PORT = 3306, MASTER_PASSWORD=\u0026#39;test@2023\u0026#39;, MASTER_LOG_FILE=\u0026#39;mysql-bin-31.000002\u0026#39;, MASTER_LOG_POS=157; 说明： MASTER_HOST 主节点ip MASTER_USER 用户名 MASTER_PORT 端口 MASTER_PASSWORD 密码 MASTER_LOG_FILE 31服务正在记录的二进制日志文件（实时获取） MASTER_LOG_POS 31服务记录二进制日志的偏移量（实时获取） start slave; #启动主从复制 show slave status\\G; #查看从库状态 三、在188.31 数据库 设置同步账号与密码 mysql\u0026gt;create user \u0026#39;repl_user\u0026#39;@\u0026#39;192.168.188.%\u0026#39; identified by \u0026#39;test@2023\u0026#39;; mysql\u0026gt;grant replication slave on *.* to \u0026#39;repl_user\u0026#39;@\u0026#39;192.168.188.%\u0026#39;; mysql\u0026gt;flush privileges; show master status; 去30上查看二进制日志信息\n根据查到的信息，再继续执行\nCHANGE MASTER TO MASTER_HOST=\u0026#39;192.168.188.30\u0026#39;, MASTER_USER=\u0026#39;repl_user\u0026#39;, MASTER_PORT = 3306, MASTER_PASSWORD=\u0026#39;test@2023\u0026#39;, MASTER_LOG_FILE=\u0026#39;mysql-bin-30.000001\u0026#39;, MASTER_LOG_POS=891; 说明： MASTER_HOST 主节点ip MASTER_USER 用户名 MASTER_PORT 端口 MASTER_PASSWORD 密码 MASTER_LOG_FILE 30服务正在记录的二进制日志文件（实时获取） MASTER_LOG_POS 30服务记录二进制日志的偏移量（实时获取） start slave; #启动主从复制 show slave status\\G; #查看从库状态 四、分别重启两台数据库服务 查看同步的信息并进行相关测试。\n创建用户，数据库，表，数据看是否能正常互相同步\nshow slave status \\G;\n参考链接：\nhttps://www.jianshu.com/p/50b9446d77f4\n","permalink":"http://klxq666.fun/posts/blog/mysql/mysql_master-master/","summary":"实验机器： 192.168.188.30 192.168.188.31 一.主主模式搭建，两台机器的版本需一致 其他配置可参考MySQL8安装那篇文章 配置参数除server-id不同外，只需添加以下两个参数即可 binlog_format=ROW log_bin=/data/mysql/data/mysql-bin-30.log （可选） 二、在188.30 数据库 设置同步账号与密码,此密码可不同 mysql\u0026gt;create user \u0026#39;repl_user\u0026#39;@\u0026#39;192.168.188.%\u0026#39; identified by \u0026#39;test@2023\u0026#39;; mysql\u0026gt;grant replication slave on *.* to \u0026#39;repl_user\u0026#39;@\u0026#39;192.168.188.%\u0026#39;; mysql\u0026gt;flush privileges; show master status; #去31上查看二进制日志信","title":"mysql8 的主主模式搭建"},{"content":"一、介绍整个逻辑 1.在管理机器上搭建consul 并上传 node_exoporter软件包 ，system服务配置文件，注册脚本\n2.利用ansible对指定机器去分发软件包并启动服务，并curl 注册到consul 编写为node-exporter.yml\n3.prometheus配置consul地址，获取主机信息，自动发现并配合grafana 展示\n二、具体实现 system服务配置文件\n[Unit] Description=node_exporter [Service] ExecStart=/usr/local/node_exporter/node_exporter --collector.systemd --collector.systemd.unit-include=(docker|portal|sshd).service ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target 注册脚本\n#!/bin/bash instance_id=$1 service_name=$2 ip=$3 port=$4 curl -X PUT -d \u0026#39;{\u0026#34;id\u0026#34;: \u0026#34;\u0026#39;\u0026#34;$instance_id\u0026#34;\u0026#39;\u0026#34;,\u0026#34;name\u0026#34;: \u0026#34;\u0026#39;\u0026#34;$service_name\u0026#34;\u0026#39;\u0026#34;,\u0026#34;address\u0026#34;: \u0026#34;\u0026#39;\u0026#34;$ip\u0026#34;\u0026#39;\u0026#34;,\u0026#34;port\u0026#34;: \u0026#39;\u0026#34;$port\u0026#34;\u0026#39;,\u0026#34;tags\u0026#34;: [\u0026#34;\u0026#39;\u0026#34;$service_name\u0026#34;\u0026#39;\u0026#34;],\u0026#34;checks\u0026#34;: [{\u0026#34;http\u0026#34;: \u0026#34;http://\u0026#39;\u0026#34;$ip\u0026#34;\u0026#39;:\u0026#39;\u0026#34;$port\u0026#34;\u0026#39;\u0026#34;,\u0026#34;interval\u0026#34;: \u0026#34;5s\u0026#34;}]}\u0026#39; http://192.168.xx.xx:8500/v1/agent/service/register node-exporter.yml\n--- - hosts: \u0026#39;{{ env_host }}\u0026#39; #通过设置变量来指定分组机器 tasks: - name: 推送采集器安装包 unarchive: src: /opt/node_exporter-1.5.0.linux-amd64.tar.gz # 本地机器上的tar文件路径 dest: /usr/local # 解压到的远程目录路径 - name: 重命名 shell: | cd /usr/local/ if [ ! -d node_exporter ];then mv node_exporter-1.5.0.linux-amd64 node_exporter fi - name: 推送system文件 copy: src=node_exporter.service dest=/usr/lib/systemd/system - name: 启动服务 systemd: name=node_exporter state=started enabled=yes - name: 推送注册脚本 copy: src=consul-register.sh dest=/usr/local/node_exporter - name: 注册当前节点 shell: /bin/sh /usr/local/node_exporter/consul-register.sh {{ name }} {{ group_names[0] }} {{ inventory_hostname }} 9100 /etc/ansible/hosts 加标签\nprometheus.yml 配置consul 三、执行ansible ansible-playbook node-exporter.yml -e env_host=‘kong’\n四、consul 手动的注册与删除 注册\n注册的信息，主机名test1 ip：10.23.215.217 consul 地址：10.23.215.236:8500\ncurl -X PUT -d \u0026#39;{\u0026#34;id\u0026#34;: \u0026#34;test1\u0026#34;,\u0026#34;name\u0026#34;: \u0026#34;old_env\u0026#34;,\u0026#34;address\u0026#34;: \u0026#34;10.23.215.217\u0026#34;,\u0026#34;port\u0026#34;: 9100,\u0026#34;tags\u0026#34;: [\u0026#34;dev\u0026#34;],\u0026#34;checks\u0026#34;: [{\u0026#34;http\u0026#34;: \u0026#34;http://10.23.215.217:9100/\u0026#34;,\u0026#34;interval\u0026#34;: \u0026#34;5s\u0026#34;}]}\u0026#39; http://10.23.215.236:8500/v1/agent/service/register 删除 test1指的是ID\ncurl -X PUT http://10.23.215.236:8500/v1/agent/service/deregister/test1 参考链接：\nhttps://www.jianshu.com/p/f243a3aec18e 【ansible基于consul监控多台主机】\nhttps://blog.csdn.net/heian_99/article/details/119874180 【promutheus+consul】\nhttps://zhuanlan.zhihu.com/p/210352317 【Prometheus监控】\nhttps://www.jianshu.com/p/d4b85d404f6d 【consul 日常接口使用】\n","permalink":"http://klxq666.fun/posts/blog/ansible/ansible_node_consul/","summary":"一、介绍整个逻辑 1.在管理机器上搭建consul 并上传 node_exoporter软件包 ，system服务配置文件，注册脚本 2.利用ansible对指定机器去分发软件包并启动服务，并curl 注册到consul 编写为node-exporter.yml 3.prometheus配置co","title":"ansible 批量部署node,并注册consul，实现主机自动发现"},{"content":"一、简介 prometheus 核心是一个单独的二进制方式文件 pull模型 内置的时间序列数据库（TSDB） 强大的查询语言 PromQL 可视化 开放化\n1、存储计算层\nPrometheus Server ，里面包含了存储引擎和计算引擎\nRetrieval 组件为取数组件，它会主动从Pushgateway 或Exporter 拉取数据\nService discovery 可以动态发现要监控的目标\nTSDB ，数据核心存储和查询\nHTTP server ，对外提供HTTP 服务\n2、采集层\n采集层分为两类，一类是生命周期较短的作业，还有一类是生命周期较长的作业\n短作业： 直接通过API ,在退出时间指标推送给Pushgateway\n长作业： Retrieval 组件直接从Job 或者Exporter 拉取数据\n3、应用层\n应用层主要分为 两种 ，一种是AlertManager，另一种是数据可视化\nAlertManager 对接Pagerduty ,是一套付费的监控报警系统，短信 ，电话，Email 发邮件\n数据可视化 Prometheus build-in WebUI Grafana 其他基于API开发的客户端\n二、实操 利用docker 安装prometheus 、granfana 1.统一环境配置 下载docker 并关闭防火墙和selinux\n2.下载相关镜像 docker pull prom/prometheus docker pull prom/alertmanager docker pull grafana/grafana\n3.启动相关组件 prometheus-webhook-dingtalk 启动\ndocker run -d -p 8060:8060 -v /data/prom/config.yml:/etc/prometheus-webhook-dingtalk/config.yml --name alertdingtalk timonwong/prometheus-webhook-dingtalk alertmanager 启动\ndocker run -d -p 9093:9093 -p 9094:9094 -v /data/prom/alertmanager.yml:/etc/alertmanager/alertmanager.yml --name alertmanager prom/alertmanager prometheus 启动\ndocker run -d -p 9090:9090 \\ -v /data/prom/prometheus.yml:/etc/prometheus/prometheus.yml \\ -v /data/prom/alert-rules.yml:/etc/prometheus/alert-rules.yml \\ -v /data/prom/data:/prometheus --name prometheus prom/prometheus:latest grafana启动\ndocker run -d -p 3000:3000 -v /data/prom/grafana:/var/lib/grafana --name=grafana grafana/grafana:latest 相关配置yml文件参考如下：\nalertmanager.yml\nglobal: resolve_timeout: 5m smtp_smarthost: \u0026#39;smtp.exmail.qq.com:465\u0026#39; #邮箱smtp服务器代理，启用SSL发信, 端口一般是465 smtp_from: \u0026#39;test@qq.com\u0026#39; #发送邮箱名称 smtp_auth_username: \u0026#39;test@qq.com\u0026#39; #邮箱名称 smtp_auth_password: \u0026#39;passwd\u0026#39; #邮箱密码或授权码 smtp_require_tls: false route: receiver: \u0026#39;default-receiver\u0026#39; # 所有不匹配以下子路由的告警都将保留在根节点，并发送到“default-receiver” group_wait: 30s # 为一个组发送通知的初始等待时间，默认30s group_interval: 5m # 在发送新告警前的等待时间。通常5m或以上 repeat_interval: 1h # 发送重复告警的周期。如果已经发送了通知，再次发送之前需要等待多长时间。 group_by: [alertname] # 报警分组依据 routes:- receiver: \u0026#39;bigdata-pager\u0026#39; # 所有带有team=bigdata标签的告警都与此子路由匹配，可以自己在alert-rules.yml中的labels添加即可 group_wait: 10s match: team: bigdata receivers: # 定义接收者，将告警发送给谁 - name: \u0026#39;default-receiver\u0026#39; email_configs: - to: \u0026#39;xx@qq.com,xx@qq.com\u0026#39; - name: \u0026#39;bigdata-pager\u0026#39; email_configs: - to: \u0026#39;xxx@qq.com,xx@qq.com\u0026#39; prometheus.yml\nglobal: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. alerting: #指定alertmanager报警组件地址 alertmanagers: - static_configs: - targets: [ \u0026#39;192.168.188.2:9093\u0026#39;] rule_files: #指定报警规则文件 - \u0026#34;*rules.yml\u0026#34; scrape_configs: - job_name: \u0026#39;prometheus\u0026#39; static_configs: - targets: [\u0026#39;192.168.188.2:9090\u0026#39;] - job_name: \u0026#39;node\u0026#39; static_configs: - targets: [\u0026#39;192.168.188.3:9100\u0026#39;] - job_name: \u0026#39;alertmanager\u0026#39; static_configs: - targets: [ \u0026#39;192.168.188.2:9093\u0026#39;] alert-rules.yml\ngroups: - name: 主机状态-监控告警 rules: - alert: 主机状态 expr: up *on(instance)group_left(nodename)(node_uname_info) == 0 for: 5m labels: level: waring annotations: summary: \u0026#34;{{$labels.instance}}:服务器宕机\u0026#34; description: \u0026#34;{{$labels.instance}}({{$labels.nodename}}):服务器延时超过3分钟\u0026#34; - alert: 主机cpu使用情况 expr: 100-avg(irate(node_cpu_seconds_total{mode=\u0026#34;idle\u0026#34;}[5m])) by(instance) *100 *on(instance)group_left(nodename)(node_uname_info) \u0026gt; 85 for: 3m labels: level: waring annotations: summary: \u0026#34;{{ $labels.instance }}cpu使用率过高\u0026#34; description: \u0026#34;{{ $labels.instance }}({{$labels.nodename}}):cpu使用率超过85%(当前使用率: {{ $value }}%)\u0026#34; - alert: 主机内存使用情况 expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes* 100 *on(instance)group_left(nodename)(node_uname_info) \u0026gt; 90 for: 3m labels: level: waring annotations: summary: \u0026#34;{{$labels.instance}}: High Memory usage detected\u0026#34; description: \u0026#34;{{$labels.instance}}({{$labels.nodename}}): 内存使用率超过 90% (当前使用率: {{ $value }}%)\u0026#34; - alert: 主机磁盘使用情况 expr: 100-(node_filesystem_free_bytes{fstype=~\u0026#34;ext4|xfs\u0026#34;}/node_filesystem_size_bytes {fstype=~\u0026#34;ext4|xfs\u0026#34;})*100 *on(instance)group_left(nodename)(node_uname_info) \u0026gt; 85 for: 3m labels: level: waring annotations: summary: \u0026#34;{{ $labels.instance }} 磁盘空间使用率过高！\u0026#34; description: \u0026#34;{{ $labels.instance }}({{$labels.nodename}}): 磁盘空间使用大于85%(当前使用率: {{$value}}%)\u0026#34; - alert: 磁盘IO性能 expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance) *100) *on(instance)group_left(nodename)(node_uname_info) \u0026lt; 60 for: 3m labels: level: waring annotations: summary: \u0026#34;{{ $labels.instance }} 流入磁盘IO使用率过高！\u0026#34; description: \u0026#34;{{ $labels.instance }}({{$labels.nodename}}): 流入磁盘IO大于60%(当前使用率: {{$value}}%)\u0026#34; - alert: TCP会话 expr: node_netstat_Tcp_CurrEstab *on(instance)group_left(nodename)(node_uname_info) \u0026gt; 10000 for: 3m labels: level: waring annotations: summary: \u0026#34;{{ $labels.instance }} TCP_ESTABLISHED过高！\u0026#34; description: \u0026#34;{{ $labels.instance }}({{$labels.nodename}}): TCP_ESTABLISHED大于1000%(当前使用率: {{$value}}%)\u0026#34; - alert: inside网络 expr: ((sum(rate (node_network_receive_bytes_total{device!~\u0026#39;tap.*|veth.*|br.*|docker.*|virbr*|lo*\u0026#39;}[5m])) by (instance)) / 100) *on(instance)group_left(nodename)(node_uname_info) \u0026gt; 819200 for: 3m labels: level: waring annotations: summary: \u0026#34;{{ $labels.instance }} 流入网络带宽过高！\u0026#34; description: \u0026#34;{{ $labels.instance }}({{$labels.nodename}}): 流入网络带宽持续2分钟高于800M(当前使用: {{$value}})\u0026#34; - alert: outside网络 expr: ((sum(rate (node_network_transmit_bytes_total{device!~\u0026#39;tap.*|veth.*|br.*|docker.*|virbr*|lo*\u0026#39;}[5m])) by (instance)) / 100 ) *on(instance)group_left(nodename)(node_uname_info) \u0026gt; 819200 for: 3m labels: level: waring annotations: summary: \u0026#34;{{ $labels.instance }} 流出网络带宽过高！\u0026#34; description: \u0026#34;{{ $labels.instance }}({{$labels.nodename}}): 流出网络带宽持续2分钟高于800M(当前使用: {{$value}})\u0026#34; - alert: node_exporter 监控 expr: up{job=\u0026#34;consul-prometheus\u0026#34;} == 0 for: 15s labels: level: waring annotations: summary: \u0026#34;{{ $labels.instance }} node_exporter 已停止运行超过 15s！\u0026#34; description: \u0026#34;{{ $labels.instance }}({{$labels.job}}) 已停止运行超过 15s！\u0026#34; 三、相关node-exporter的安装 1.node-exporter 的安装 Node-exporter需要监控实际的主机硬件信息， 不推荐用docker来安装，建议通过二进制包来安装\ndocker安装\ndocker run -d -p 9100:9100 --name node-exporter prom/node-exporter:latest docker run -d -p 9100:9100 --net=host -v \u0026#34;/proc:/host/proc:ro\u0026#34; -v \u0026#34;/sys:/host/sys:ro\u0026#34; -v \u0026#34;/:/rootfs:ro\u0026#34; --name node-exporter prom/node-exporter:latest 二进制包安装\n客户端下载地址：https://github.com/prometheus/node_exporter/releases 同样找到Linux-amd64这个版本，下载解压即可 #下载 wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz #解压 tar -zxvf node_exporter-1.5.0.linux-amd64.tar.gz #重命名 mv node_exporter-1.5.0.linux-amd64 node_exporter 启动方式： #不保存日志 nohup ./node_exporter \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 \u0026amp; #保存日志到/var/log/node_exporter.log nohup ./node_exporter \u0026gt;/var/log/node_exporter.log 2\u0026gt;\u0026amp;1 \u0026amp; 使用systemd方式启动 cat \u0026gt;/usr/lib/systemd/system/node_exporter.service \u0026lt;\u0026lt;EOF [Unit] Description=node_exporter [Service] ExecStart=/usr/local/node_exporter/node_exporter --collector.systemd --collector.systemd.unit-include=(docker|portal|sshd).service ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target EOF --- systemctl daemon-reload systemctl enable node_exporter.service systemctl start node_exporter.service 2.mysqld_exporter 的安装 MySQL需要注意先在创建用于监视数据库的用户exporter\nmysql\u0026gt; CREATE USER \u0026#39;exporter\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;see_teampass\u0026#39; WITH MAX_USER_CONNECTIONS 5; mysql\u0026gt; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO \u0026#39;exporter\u0026#39;@\u0026#39;localhost\u0026#39;; 说明：使用max_user_connections参数来限制exporter用户最大连接数，避免监控引起数据库过载，需要注意的是该参数并不是MySQL/Mariadb每个版本都支持 mysql \u0026gt; flush privileges; 下载安装mysqld_exporter\nhttps://github.com/prometheus/mysqld_exporter/releases tar xvf mysqld_exporter-0.14.1.linux-amd64.tar.gz -C /usr/local/ cd /usr/local/ mv mysqld_exporter-0.14.1.linux-amd64 mysqld_exporter cd /usr/local/mysqld_exporter 创建连接文件 ---------- cat \u0026gt; .my.cnf \u0026lt;\u0026lt;EOF [client] user=exporter password=see_teampass EOF --------- 使用systemd方式启动 cat \u0026gt;/usr/lib/systemd/system/mysqld_exporter.service \u0026lt;\u0026lt;EOF [Unit] Description=Prometheus [Service] ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf Restart=on-failure [Install] WantedBy=multi-user.target EOF --------- systemctl daemon-reload systemctl enable mysqld_exporter systemctl start mysqld_exporter 3.blackbox exporter的安装 二进制安装\nwget https://github.com/prometheus/blackbox_exporter/releases/download/v0.23.0/blackbox_exporter-0.23.0.linux-amd64.tar.gz tar -zxvf blackbox_exporter-0.23.0.linux-amd64.tar.gz -C /usr/local mv /usr/local/blackbox_exporter-0.23.0.linux-amd64.tar.gz /usr/local/blackbox_exporter 配置下当前探针 cat /usr/local/blackbox_exporter/blackbox.yml 探针类型（prober）\nmodules: http_2xx: prober: http http_post_2xx: prober: http http: method: POST tcp_connect: prober: tcp pop3s_banner: prober: tcp tcp: query_response: - expect: \u0026#34;^+OK\u0026#34; tls: true tls_config: insecure_skip_verify: false grpc: prober: grpc grpc: tls: true preferred_ip_protocol: \u0026#34;ip4\u0026#34; grpc_plain: prober: grpc grpc: tls: false service: \u0026#34;service1\u0026#34; ssh_banner: prober: tcp tcp: query_response: - expect: \u0026#34;^SSH-2.0-\u0026#34; - send: \u0026#34;SSH-2.0-blackbox-ssh-check\u0026#34; irc_banner: prober: tcp tcp: query_response: - send: \u0026#34;NICK prober\u0026#34; - send: \u0026#34;USER prober prober prober :prober\u0026#34; - expect: \u0026#34;PING :([^ ]+)\u0026#34; send: \u0026#34;PONG ${1}\u0026#34; - expect: \u0026#34;^:[^ ]+ 001\u0026#34; icmp: prober: icmp icmp_ttl5: prober: icmp timeout: 5s icmp: ttl: 5 添加到启动项 cat /usr/lib/systemd/system/blackbox_exporter.service\n[Unit] Description=blackbox_exporter [Service] User=root Type=simple ExecStart=/usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/local/blackbox_exporter/blackbox.yml Restart=on-failure 检查是否正常运行\n同时也可以通过访问 http://127.0.0.1:9115/probe?module=http_2xx\u0026amp;target=baidu.com 对baidu.com 进行探测\n这里通过在URL中提供module参数指定了当前使用的探针，target参数指定探测目标，探针的探测结果通过Metrics的形式返回：\n# HELP probe_dns_lookup_time_seconds Returns the time taken for probe dns lookup in seconds # TYPE probe_dns_lookup_time_seconds gauge probe_dns_lookup_time_seconds 0.004366919 # HELP probe_duration_seconds Returns how long the probe took to complete in seconds # TYPE probe_duration_seconds gauge probe_duration_seconds 0.09053371 # HELP probe_failed_due_to_regex Indicates if probe failed due to regex # TYPE probe_failed_due_to_regex gauge probe_failed_due_to_regex 0 # HELP probe_http_content_length Length of http content response # TYPE probe_http_content_length gauge probe_http_content_length 81 # HELP probe_http_duration_seconds Duration of http request by phase, summed over all redirects # TYPE probe_http_duration_seconds gauge probe_http_duration_seconds{phase=\u0026#34;connect\u0026#34;} 0.040772637 probe_http_duration_seconds{phase=\u0026#34;processing\u0026#34;} 0.04430544 probe_http_duration_seconds{phase=\u0026#34;resolve\u0026#34;} 0.004366919 probe_http_duration_seconds{phase=\u0026#34;tls\u0026#34;} 0 probe_http_duration_seconds{phase=\u0026#34;transfer\u0026#34;} 0.00019256 # HELP probe_http_last_modified_timestamp_seconds Returns the Last-Modified HTTP response header in unixtime # TYPE probe_http_last_modified_timestamp_seconds gauge probe_http_last_modified_timestamp_seconds 1.26330408e+09 # HELP probe_http_redirects The number of redirects # TYPE probe_http_redirects gauge probe_http_redirects 0 # HELP probe_http_ssl Indicates if SSL was used for the final redirect # TYPE probe_http_ssl gauge probe_http_ssl 0 # HELP probe_http_status_code Response HTTP status code # TYPE probe_http_status_code gauge probe_http_status_code 200 # HELP probe_http_uncompressed_body_length Length of uncompressed response body # TYPE probe_http_uncompressed_body_length gauge probe_http_uncompressed_body_length 81 # HELP probe_http_version Returns the version of HTTP of the probe response # TYPE probe_http_version gauge probe_http_version 1.1 # HELP probe_ip_addr_hash Specifies the hash of IP address. It\u0026#39;s useful to detect if the IP address changes. # TYPE probe_ip_addr_hash gauge probe_ip_addr_hash 3.6694721e+08 # HELP probe_ip_protocol Specifies whether probe ip protocol is IP4 or IP6 # TYPE probe_ip_protocol gauge probe_ip_protocol 4 # HELP probe_success Displays whether or not the probe was a success # TYPE probe_success gauge probe_success 1 从返回的样本中，用户可以获取站点的DNS解析耗时、站点响应时间、HTTP响应状态码等等和站点访问质量相关的监控指标，从而帮助管理员主动的发现故障和问题。\n追加到prometheus.yml\n# 网站监控 - job_name: \u0026#39;http_status\u0026#39; metrics_path: /probe params: module: [http_2xx] static_configs: - targets: - http://192.168.xx.xx:3928/anywhere/#/before #某网页 - https://www.baidu.com instance: http_status group: web relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.168.188.68:9115 # ping 检测 - job_name: \u0026#39;ping_status\u0026#39; metrics_path: /probe params: module: [icmp] static_configs: - targets: - 192.168.188.200 labels: instance: \u0026#39;ping_status\u0026#39; group: icmp relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.168.188.68:9115 # 端口监控 - job_name: \u0026#39;port_status\u0026#39; metrics_path: /probe params: module: [tcp_connect] static_configs: - targets: - 192.168.188.10:3928 - 192.168.188.22:3306 - 192.168.188.200:8090 labels: instance: \u0026#39;port_status\u0026#39; group: port relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.168.188.68:xx grafana的模板号：9965\n告警规则可以监控probe_success参数\nicmp、tcp、http、post 监测是否正常可以观察 probe_success 这一指标\nprobe_success == 0 ##联通性异常\nprobe_success == 1 ##联通性正常\n告警也是判断这个指标是否等于 0，如等于 0 则触发异常报警\n大数据hadoop相关监控 搭建信息可参考：\nhttps://github.com/tamtran96/hadoop-jmx-exporter/tree/master/dashboards\npushgateway 进行数据上报 https://cloud.tencent.com/developer/article/1531821\n更多prometheus 相关exporter可参考：\nhttps://blog.51cto.com/u_14065119/4166081\ngrafana 与prometheus 的Nginx反向代理参考链接：\nhttps://blog.csdn.net/Rambo_Yang/article/details/108061345\nhttps://grafana.com/tutorials/run-grafana-behind-a-proxy/#1\n其他参考链接：\nhttps://it.cha138.com/mysql/show-99068.html\nhttps://www.infoq.cn/article/sxextntuttxduedeagiq\nhttps://www.prometheus.wang/exporter/install_blackbox_exporter.html\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_prometheus/","summary":"一、简介 prometheus 核心是一个单独的二进制方式文件 pull模型 内置的时间序列数据库（TSDB） 强大的查询语言 PromQL 可视化 开放化 1、存储计算层 Prometheus Server ，里面包含了存储引擎和计算引擎 Retrieval 组件为取数组件，它会主动从Pushgateway 或Exporter 拉取数据 Service discovery 可以动态发现要监控的目标 TSDB ，数据核心存储","title":"docker 部署prometheus 与grafana"},{"content":"一、介绍： Rancher 是一个 Kubernetes 管理工具，让你能在任何地方和任何提供商上部署和运行集群。\nRancher 可以创建来自 Kubernetes 托管服务提供商的集群，创建节点并安装 Kubernetes，或者导入在任何地方运行的现有 Kubernetes 集群。\nRancher 基于 Kubernetes 添加了新的功能，包括统一所有集群的身份验证和 RBAC，让系统管理员从一个位置控制全部集群的访问。\n此外，Rancher 可以为集群和资源提供更精细的监控和告警，将日志发送到外部提供商，并通过应用商店（Application Catalog）直接集成 Helm。如果你拥有外部 CI/CD 系统，你可以将其与 Rancher 对接。没有的话，你也可以使用 Rancher 提供的 Fleet 自动部署和升级工作负载。\nRancher 是一个 全栈式 的 Kubernetes 容器管理平台，为你提供在任何地方都能成功运行 Kubernetes 的工具。\n二、环境初始化 1 修改 /etc/sysctl.conf 将桥接的IPv4流量传递到iptables的链\ncat \u0026gt; /etc/sysctl.conf \u0026lt;\u0026lt; EFO net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EFO 生效命令 sysctl -p /etc/sysctl.conf 2 关闭防火墙 关闭selinux 关闭swap systemctl stop firewalld \u0026amp;\u0026amp; systemctl disable firewalld sed -i \u0026#39;s/enforcing/disabled/\u0026#39; /etc/selinux/config \u0026amp;\u0026amp; setenforce 0 swapoff -a \u0026amp;\u0026amp; sed -ri \u0026#39;s/.*swap.*/#\u0026amp;/\u0026#39; /etc/fstab 3 时间同步 yum install ntpdate -y ntpdate ntp1.aliyun.com date -R #查看新时间是否已同步 4 重启 reboot #注意确定好环境哈\n三、先为所有机器安装好docker 1、移除以前docker相关包 yum remove docker \\ docker-client \\ docker-client-latest \\ docker-common \\ docker-latest \\ docker-latest-logrotate \\ docker-logrotate \\ docker-engine 2、配置yum源 sudo yum install -y yum-utils sudo yum-config-manager \\ --add-repo \\ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3、安装docker yum install -y docker-ce docker-ce-cli containerd.io 以下是在安装k8s时，选择指定版本时使用 yum install -y docker-ce-20.10.8 docker-ce-cli-20.10.8 containerd.io-1.4.10 4、启动并配置加速 systemctl enable docker –now\nsudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json \u0026lt;\u0026lt;-\u0026#39;EOF\u0026#39; { \u0026#34;registry-mirrors\u0026#34;: [\u0026#34;https://82m9ar63.mirror.aliyuncs.com\u0026#34;], \u0026#34;exec-opts\u0026#34;: [\u0026#34;native.cgroupdriver=systemd\u0026#34;], \u0026#34;log-driver\u0026#34;: \u0026#34;json-file\u0026#34;, \u0026#34;log-opts\u0026#34;: { \u0026#34;max-size\u0026#34;: \u0026#34;100m\u0026#34; }, \u0026#34;storage-driver\u0026#34;: \u0026#34;overlay2\u0026#34; } EOF sudo systemctl daemon-reload\nsudo systemctl restart docker 四、部署rancher docker run -d --name=rancher --restart=unless-stopped \\ -p 80:80 -p 443:443 \\ --privileged \\ -v /home/rancher:/var/lib/rancher \\ rancher/rancher:latest 参考链接：\nhttps://zhuanlan.zhihu.com/p/403539342\nhttps://blog.csdn.net/l2931050/article/details/124110605\nhttps://blog.csdn.net/weixin_60092693/article/details/121665901\nhttps://blog.csdn.net/weixin_41636021/article/details/127976712\n","permalink":"http://klxq666.fun/posts/blog/docker/linux_rancher_k8s/","summary":"一、介绍： Rancher 是一个 Kubernetes 管理工具，让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群，创建节点并安装 Kubernetes，或者导入在任何地方运行的现有 Kubernetes 集群。 Rancher 基于 Kubernetes 添加了新的功能，包括统一所有集群的身份验证和 RBAC，让系统管理员从一个位置控制全部集","title":"Linux 环境下用rancher 安装k8s 集群"},{"content":"一、先升级OpenSSL 先升级openssl到1.1.1k版本\n#将openssl-1.1.1k.tar.gz perl-5.36.1.tar.gz new_nginx-1.20.2.tar.gz 都放opt目录下\n1. 安装对应的依赖库 yum install zlib-devel openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++ 2. 解压安装openssl，并进入openssl的目录 tar -zxvf openssl-1.1.1k.tar.gz cd /opt/openssl-1.1.1k export LANG=zh_CN.UTF-8 export LANGUAGE=zh_CN.UTF-8 ./config --prefix=/usr/local/openssl shared zlib sudo make \u0026amp;\u0026amp; make install 3. 备份当前openssl mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak 4. 配置使用新版本 ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl 5. 更新动态链接库数据并重新加载 echo /usr/local/openssl/lib \u0026gt;\u0026gt; /etc/ld.so.conf ldconfig -v 6. 查看是否升级成功 openssl version 7. 如果缺少libssl.s0.1.1 ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 二、如有需要 安装perl wget https://www.cpan.org/src/5.0/perl-5.36.1.tar.gz tar -xzf perl-5.36.1.tar.gz cd /opt/perl-5.36.1 ./configure -des -Dprefix=/usr/local/localperl make make test make install 三、nginx 安装与启动 tar -zxf new_nginx-1.20.2.tar.gz -C /usr/local cd /usr/local mv nginx1.20.2 nginx ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --with-stream_ssl_module --with-openssl=/opt/openssl-1.1.1k make \u0026amp;\u0026amp; make install 启动\ncd /usr/local/nginx/sbin ./nginx 配置环境变量\n在/etc/profile 中加入： export NGINX_data=/usr/local/nginx export PATH=$NGINX_data/sbin:$PATH 执行\nsource /etc/profile ，使配置文件生效。 查看版本以及查看编译时所加的模块配置\nnginx -V 编译报错解决方案：\n1.cc: 错误：/opt/openssl-1.1.1k/lib/libssl.a：没有那个文件或目录，\ncc: 错误：/opt/openssl-1.1.1k/lib/libcrypto.a：没有那个文件或目录\n解决方案：\n手动创建该文件夹和下面的lib子目录，然后将解压后的安装包里面的libssl.a libcrypto.a手动放到lib下面去，然后在执行make命令就OK了\n2.cp: “conf/koi-win” 与\u0026quot;/usr/local/nginx/conf/koi-win\u0026quot; 为同一文件\n解决方案：\n./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --with-stream_ssl_module --with-openssl=/opt/openssl-1.1.1k --conf-path=/usr/local/nginx/nginx.conf 后再重新编译\n","permalink":"http://klxq666.fun/posts/blog/nginx_1.20.2/","summary":"一、先升级OpenSSL 先升级openssl到1.1.1k版本 #将openssl-1.1.1k.tar.gz perl-5.36.1.tar.gz new_nginx-1.20.2.tar.gz 都放opt目录下 1. 安装对应的依赖库 yum install zlib-devel openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++ 2. 解压安装openssl，并进入openssl的目录 tar -zxvf openssl-1.1.1k.tar.gz cd /opt/openssl-1.1.1k export LANG=zh_CN.UTF-8 export LANGUAGE=zh_CN.UTF-8 ./config --prefix=/usr/local/openssl shared zlib sudo make \u0026amp;\u0026amp; make install 3. 备份当前openssl mv","title":"Nginx 1.20.2的二进制编译安装"},{"content":"1. 网络公开课 https://www.icourse163.org/ —中国大学MOOC\nhttps://open.163.com/ —网易公开课\nhttps://daxuepc.com/page/385894 —腾讯大学\nhttp://tv.cctv.com/lm/kjl/ —开讲啦\nhttps://www.dandyweng.com/ —翁天信的网站，一个 homeschooler\nLinux 相关知识的网站\nhttps://linuxtools-rst.readthedocs.io/zh_CN/latest/\n威胁情报 微步在线 https://x.threatbook.cn/\n2. 看书 https://weread.qq.com/ —微信读书\nhttps://www.douban.com/ —豆瓣\nhttp://www.dudj.net/hongsejingdian/1/ —在线阅读毛选\nhttps://www.amazon.cn/s?k=%E5%85%8D%E8%B4%B9%E5%9B%BE%E4%B9%A6\u0026amp;__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99\u0026amp;ref=nb_sb_noss_1 –亚马逊图书\n3. 电影-美剧 https://www.dy2018.com/ —电影天堂\nhttps://www.imeijutt.com/ – 美剧天堂\nhttps://movie.douban.com/top250 –豆瓣经典电影排名\n公益\nhttp://www.chinadevelopmentbrief.org.cn/index.html —中国发展简报\n思维导图\nhttps://naotu.baidu.com/home —-百度脑图\nhttps://mubu.com/list —幕布导图\n4. 科技与商业类信息获取 https://new.qq.com/ch/tech/ —腾讯科技\nhttps://www.pedaily.cn/ —投资界\nhttps://www.huxiu.com/ —虎嗅网\nhttps://www.cyzone.cn/ —创业邦\nhttps://www.tmtpost.com/ —钛媒体\n关于四五线城市的发展\nhttps://xueqiu.com/k?q=%E4%BA%94%E5%85%AD%E7%BA%BF%E5%9F%8E%E5%B8%82 —来源雪球\nhttps://www.zhihu.com/question/31952105?sort=created —来源知乎\nhttps://www.zhihu.com/question/362113634 —来源知乎\nhttp://jianfangmi.com/topic-qinggangbieshuanli.html –轻钢别墅\n理财知识\nhttps://www.jisilu.cn/question/15659 —来源集思录 干货满满\n放松-小游戏\nhttp://www.chnsatcom.com/ —中国卫星黑客\nhttp://zhainanba.net/%e5%9d%9a%e6%8c%8150%e7%a7%92 —宅男吧\nhttps://baijiahao.baidu.com/s?id=1646700541251916496\u0026amp;wfr=spider\u0026amp;for=pc —山里的别墅\n","permalink":"http://klxq666.fun/posts/life/open_world/","summary":"1. 网络公开课 https://www.icourse163.org/ —中国大学MOOC https://open.163.com/ —网易公开课 https://daxuepc.com/page/385894 —腾讯大学 http://tv.cctv.com/lm/kjl/ —开讲啦 https://www.dandyweng.com/ —翁天信的网站，一个 homeschooler Linux 相关知识的网站 https://linuxtools-rst.readthedocs.io/zh_CN/latest/ 威胁情报 微步在线 https://x.threatbook.cn/ 2. 看书 https://weread.qq.com/ —微信读书 https://www.douban.com/ —豆瓣 http://www.dudj.net/hongsejingdian/1/ —在线阅读毛选 https://www.amazon.cn/s?k=%E5%85%8D%E8%B4%B9%E5%9B%BE%E4%B9%A6\u0026amp;__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99\u0026amp;ref=nb_sb_noss_1 –亚马逊图书 3. 电影-美剧 https://www.dy2018.com/ —电影天堂 https://www.imeijutt.com/ – 美剧天堂 https://movie.douban.com/top250 –豆瓣经典电影排名 公益 http://www.chinadevelopmentbrief.org.cn/index.html —中国发展简报 思维导图 https://naotu.baidu.com/home —-百度脑","title":"了解外界的窗口"},{"content":"一、部署 Mysql 8 安装版本：mysql-8.0.30\n安装位置：/usr/local/mysql8\n数据位置：/data/mysql8_data/mysql\n日志位置：/data/mysql8_data/mysql/mysql.log\n配置文件：/etc/my.cnf\n1. 卸载之前的包 rpm -qa|grep mariadb rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps rpm -qa|grep mariadb 2. 解压并重命名 cd /opt;tar -Jxvf mysql-8.0.30-linux-glibc2.17-x86_64-minimal.tar.xz mv mysql-8.0.30-linux-glibc2.17-x86_64-minimal /usr/local/mysql8 3.设置环境变量并查看版本 vi /etc/profile 追加PATH=$PATH:/usr/local/mysql8/bin source /etc/profile mysql --version 4.创建用户组、用户 groupadd mysql useradd -r -g mysql mysql 5. 创建数据保存目录 更改属组和权限 mkdir -p /data/mysql8_data chown -R mysql:mysql /data/mysql8_data chmod -R 750 /data/mysql8_data 6.配置文件 vi /etc/my.cnf\n[mysql] # 默认字符集 default-character-set=utf8mb4 [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 server-id = 3306 user = mysql socket = /tmp/mysql.sock # 安装目录 basedir = /usr/local/mysql8 # 数据存放目录 datadir = /data/mysql8_data/mysql log-bin = /data/mysql8_data/mysql/mysql-bin innodb_data_home_dir =/data/mysql8_data/mysql innodb_log_group_home_dir =/data/mysql8_data/mysql # 日志及进程数据的存放目录 log-error =/data/mysql8_data/mysql/mysql.log pid-file =/data/mysql8_data/mysql/mysql.pid # 服务端字符集 character-set-server=utf8mb4 lower_case_table_names=1 autocommit =1 ##### 以上涉及文件夹明，注意修改 skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 1024 sort_buffer_size = 4M net_buffer_length = 8K read_buffer_size = 4M read_rnd_buffer_size = 512K myisam_sort_buffer_size = 64M thread_cache_size = 128 #query_cache_size = 128M tmp_table_size = 128M explicit_defaults_for_timestamp = true max_connections = 500 max_connect_errors = 100 open_files_limit = 65535 binlog_format=mixed # 设置binlog过期时间，单位秒 binlog_expire_logs_seconds =864000 # 创建表时使用的默认存储引擎 default_storage_engine = InnoDB innodb_data_file_path = ibdata1:10M:autoextend innodb_buffer_pool_size = 1024M innodb_log_file_size = 256M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 transaction-isolation=READ-COMMITTED [mysqldump] quick max_allowed_packet = 16M [myisamchk] key_buffer_size = 256M sort_buffer_size = 4M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout 7. 初始化 mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql8 --datadir=/data/mysql8_data/mysql --user=mysql --initialize-insecure 8. 查看并临时关闭selinux 和永久关闭 selinux getenforce setenforce 0 sed -i \u0026#39;s/enforcing/disabled/\u0026#39; /etc/selinux/config 9.设置用systemctl启动 vi /usr/lib/systemd/system/mysql.service\n[Unit] Description=MySQL SourcePath=/etc/init.d/mysql Before=shutdown.target [Service] User=mysql Type=forking TimeoutSec=0 PermissionsStartOnly=true ExecStart=/usr/local/mysql8/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --daemonize ExecStop=/etc/init.d/mysql stop LimitNOFILE = 65535 Restart=on-failure RestartSec=10 RestartPreventExitStatus=1 PrivateTmp=false [Install] WantedBy=multi-user.target 10. 先刷新再启动 systemctl daemon-reload systemctl status mysql.service 启动：systemctl start mysql.service 11.无密码模式进入 mysql -u root –skip-password\n12.修改密码 ALTER USER \u0026#39;root\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED WITH mysql_native_password BY \u0026#39;test!@#dev30\u0026#39;; FLUSH PRIVILEGES; 参考链接：\nhttps://www.cnblogs.com/secretmrj/p/15600144.html 用tar包的形式\nhttps://blog.csdn.net/COCO56/article/details/124723589 用rpm包的形式\nhttps://www.cnblogs.com/dbsqler/p/024038a250610f5ca3242a31cb305146.html mysql8.0主从搭建\nhttps://www.cnblogs.com/cao-lei/p/13603043.html\n","permalink":"http://klxq666.fun/posts/blog/mysql/install_mysql8/","summary":"一、部署 Mysql 8 安装版本：mysql-8.0.30 安装位置：/usr/local/mysql8 数据位置：/data/mysql8_data/mysql 日志位置：/data/mysql8_data/mysql/mysql.log 配置文件：/etc/my.cnf 1. 卸载之前的包 rpm -qa|grep mariadb rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64","title":"安装MySQL8.0版本"},{"content":"python 编译安装\n1. 先检查当前openssl 的版本 执行 openssl version 大于1.1.0版本即可；否则执行如下 1.安装对应的依赖库 sudo yum install -y zlib yum install zlib-devel openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++ 2. 下载openssl安装文件 mkdir /tmp/softwarebak cd /tmp/softwarebak wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz --no-check-certificate 3. 解压安装openssl，并进入openssl的目录 tar -zxvf openssl-1.1.1k.tar.gz cd openssl-1.1.1k export LANG=zh_CN.UTF-8 export LANGUAGE=zh_CN.UTF-8 ./config --prefix=/usr/local/openssl shared zlib sudo make \u0026amp;\u0026amp; make install 4. 备份当前openssl mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak 5. 配置使用新版本 ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl 6. 更新动态链接库数据并重新加载 echo /usr/local/openssl/lib \u0026gt;\u0026gt; /etc/ld.so.conf ldconfig -v 7. 查看是否升级成功 openssl version 8. 如果缺少libssl.s0.1.1 ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 2. 安装依赖包 sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gdbm-devel db4-devel libpcap-devel xz-devel make gcc gcc-c++ 3. 下载python3源码包，并解压编译 注意事项：如果升级了openssl ；需要解压源码包后\n修改vim /tmp/Python-3.10.8/Modules/Setup 文件，在文件末尾追加如下内容：\nSSL=/usr/local/openssl _ssl _ssl.c \\ -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \\ -L$(SSL)/lib -lssl -lcrypto #下载源码包 wget https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tgz #此处可更换为自己想要的包名即可 # 进入源码目录 cd Python-3.10.8 #指定编译语言 export LANG=zh_CN.UTF-8 export LANGUAGE=zh_CN.UTF-8 #指定安装目录 sudo ./configure --prefix=/usr/local/python3 --with-ssl=/usr/local/openssl #编译安装 sudo make \u0026amp;\u0026amp; sudo make install \u0026amp;\u0026amp; sudo make clean 4. 设置环境变量与检查 #编辑/etc/profile，在尾部添加如下代码： echo \u0026#39;export PATH=$PATH:/usr/local/python3/bin\u0026#39; \u0026gt;\u0026gt; /etc/profile #使用source命令重新加载/etc/profile source /etc/profile 软链接，设置全局变量 sudo ln -s /usr/local/python3/bin/python3.10 /usr/bin/python3 sudo ln -s /usr/local/python3/bin/pip3.10 /usr/bin/pip3 #查看安装的python版本 python3 --version pip3 list #设置pip源 cat \u0026gt; /etc/pip.conf \u0026lt;\u0026lt; EOF [global] trusted-host = mirrors.aliyun.com index-url = http://mirrors.aliyun.com/pypi/simple/ [list] format=columns EOF 5. 如果yum无法正常使用 可能是3跟2冲突导致，修改如下文件即可\nsudo vim /usr/bin/yum sudo vim /usr/libexec/urlgrabber-ext-down 把文件里面的#!/usr/bin/python 也修改为#! /usr/bin/python2 参考链接：\nhttps://www.jianshu.com/p/fd3aa300bbcf\n","permalink":"http://klxq666.fun/posts/blog/centos7_install_python3/","summary":"python 编译安装 1. 先检查当前openssl 的版本 执行 openssl version 大于1.1.0版本即可；否则执行如下 1.安装对应的依赖库 sudo yum install -y zlib yum install zlib-devel openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++ 2. 下载openssl安装文件 mkdir /tmp/softwarebak cd /tmp/softwarebak wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz --no-check-certificate 3. 解压安装openssl，并进入openssl的目录 tar -zxvf openssl-1.1.1k.tar.gz cd openssl-1.1.1k export LANG=zh_CN.UTF-8 export LANGUAGE=zh_CN.UTF-8 ./config --prefix=/usr/local/openssl shared zlib sudo make \u0026amp;\u0026amp; make install 4. 备份当前op","title":"centos 7.9 安装Python 3.10"},{"content":"1. 报错如下 error: rpmdb: BDB0058 page 65427994: illegal page type or format error: rpmdb: BDB0061 PANIC: Invalid argument error: db5 error(-30973) from dbcursor-\u0026gt;c_get: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: error(-30973) getting \u0026#34;libc.so.6(GLIBC_2.2.5)(64bit)\u0026#34; records from Providename index: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from dbcursor-\u0026gt;c_close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery --\u0026gt; Processing Dependency: socat for package: kubelet-1.20.9-0.x86_64 error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery --\u0026gt; Processing Dependency: libc.so.6(GLIBC_2.2.5)(64bit) for package: kubelet-1.20.9-0.x86_64 error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery Error: Package tuple (\u0026#39;glibc\u0026#39;, \u0026#39;x86_64\u0026#39;, \u0026#39;0\u0026#39;, \u0026#39;2.17\u0026#39;, \u0026#39;307.el7.1\u0026#39;) could not be found in rpmdb error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB1581 File handles still open at environment close error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.001 error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.002 error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.003 error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Packages error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Name error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Providename error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from dbenv-\u0026gt;close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery 2. 解决办法 #删除这个几个文件，重新构建下rpm库即可\ncd /var/lib/rpm;ls *db* __db.001 __db.002 __db.003 rm -f *db* rpm --rebuilddb ","permalink":"http://klxq666.fun/posts/blog/linux_yum_error/","summary":"1. 报错如下 error: rpmdb: BDB0058 page 65427994: illegal page type or format error: rpmdb: BDB0061 PANIC: Invalid argument error: db5 error(-30973) from dbcursor-\u0026gt;c_get: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: error(-30973) getting \u0026#34;libc.so.6(GLIBC_2.2.5)(64bit)\u0026#34; records from Providename index: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from dbcursor-\u0026gt;c_close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery error: db5 error(-30973) from db-\u0026gt;cursor: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: rpmdb: BDB0060 PANIC:","title":"linux yum 安装报错： error： rpmdb:BDB0058 page 65427994"},{"content":" ","permalink":"http://klxq666.fun/posts/blog/ansible/ansible_roles/","summary":"","title":"自动化运维 ansible 之 roles"},{"content":"ansible-playbook 中变量优先级第一为 -e 参数后的定义，其二为yaml 中定义的，最后为hosts文件中定义的\n感谢 马哥教育\n以上总结来自B站，视频资源如下:\n参考链接：\nhttps://www.bilibili.com/video/BV18t411f7CN?p=1\u0026amp;vd_source=47e0656689d49b82033428687694518c\n","permalink":"http://klxq666.fun/posts/blog/ansible/ansible_playbook/","summary":"ansible-playbook 中变量优先级第一为 -e 参数后的定义，其二为yaml 中定义的，最后为hosts文件中定义的 感谢 马哥教育 以上总结来自B站，视频资源如下: 参考链接： https://www.bilibili.com/video/BV18t411f7CN?p=1\u0026amp;vd_source=47e0656689d49b82033428687694518c","title":"自动化运维 ansible 之 playbook自动化运维 ansible 之 playbook"},{"content":"Redis 三种解决方案\n1.哈希取余分区 优点：简单粗暴，直接有效\n缺点：不好扩缩容，某个节点宕机，会导致hash取余全部数据重新洗牌\n2.一致性哈希环 优点：加入或删除只影响哈希环中顺时针相邻的节点，对其他节点无影响\n缺点：数据的分布和节点的位置有关。达不到均匀的效果，数据倾斜问题\n3.哈希槽分区 解决一致性哈希算法的数据倾斜问题\n在数据和节点之间又加入了一层，把这层称为哈希槽（slot），用于管理数据和节点之间的关系\n相关命令\nredis-cli --cluster create 192.168.31.68:6381 192.168.31.68:6382 192.168.31.68:6383 192.168.31.68:6384 192.168.31.68:6385 192.168.31.68:6386 --cluster-replicas 1 --cluster-replicas 1 表示为每个master创建一个slave节点; 一切OK的话，3主3从搞定 redis-cli -p 6381 链接进6381进入切入点 cluster info 查看集群状态 cluster nodes 查看节点状态 redis-cli -p 6381 -c 加入参数-c,优化路由 redis-cli --cluster check 192.168.31.68:6381 #查看集群信息 4.实战 用shell批量安装6台redis docker network create redis --subnet 172.28.0.0/16 for port in $(seq 1 6);\\ do \\ mkdir -p /mydata/redis/node-${port}/conf mkdir -p /mydata/redis/node-${port}/data touch /mydata/redis/node-${port}/conf/redis.conf cat \u0026lt;\u0026lt; EOF \u0026gt;/mydata/redis/node-${port}/conf/redis.conf port 6379 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 172.28.0.1${port} cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes EOF done for port in $(seq 1 6);\\ do \\ docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \\ -v /mydata/redis/node-${port}/data:/data \\ -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \\ -d --net redis --ip 172.28.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf done 示例： 照如下方式，分别启动剩余redis docker run -p 6371:6379 -p 16371:16379 --name redis-1 \\ -v /mydata/redis/node-1/data:/data \\ -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \\ -d --net redis --ip 172.28.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 安装ok后 ，随机进入一个容器，\nroot@/# docker exec -it redis-1 /bin/sh 创建redis集群 /data # redis-cli --cluster create 172.28.0.11:6379 172.28.0.12:6379 172.28.0.13:6379 172.28.0.14:6379 172.28.0.15:6379 1 72.28.0.16:6379 --cluster-replicas 1 ","permalink":"http://klxq666.fun/posts/blog/docker/docker_redis/","summary":"Redis 三种解决方案 1.哈希取余分区 优点：简单粗暴，直接有效 缺点：不好扩缩容，某个节点宕机，会导致hash取余全部数据重新洗牌 2.一致性哈希环 优点：加入或删除只影响哈希环中顺时针相邻的节点，对其他节点无影响 缺点：数据的分布和节点的位置有关。达不到均匀的效果，数据倾斜问题 3.哈希槽分区 解","title":"docker 部署Redis"},{"content":" 感谢 马哥教育\n以上总结来自B站，视频资源如下:\n参考链接：\nhttps://www.bilibili.com/video/BV18t411f7CN?p=1\u0026amp;vd_source=47e0656689d49b82033428687694518c\n","permalink":"http://klxq666.fun/posts/blog/ansible/ansible_command/","summary":"感谢 马哥教育 以上总结来自B站，视频资源如下: 参考链接： https://www.bilibili.com/video/BV18t411f7CN?p=1\u0026amp;vd_source=47e0656689d49b82033428687694518c","title":"自动化运维 ansible 常用模块以及相关命令"},{"content":"Linux三剑客以及专长 grep 取行 sed 取行以及修改 awk　取列 一、剑—–“正则表达式” 正则表达式是一个模版，这个模版是由一些普通字符和一些元字符组成。\n普通字符包括大小写的字母和数字，而元字符则具有特殊的含义\n1.字符类 .：匹配任意单个字符 []：匹配中括号内的任意一个字符 -：在[ ]中括号内表示字符的范围 ^：位于[ ]中括号内的开头，匹配除括号内的字符之外的任意一个字符 2.数量限定符 ?：匹配其前面的字符0次或1次 +：匹配其前面的字符至少1次 *： 匹配其前面的字符任意多次 {N}：匹配其前面的字符N次 {N,}：匹配其前面的字符至少N次 {,M}：匹配其前面的字符最多M次 {N,M}：匹配其前面的字符N到M次 3.位置限定符 ^：匹配行首的位置 $：匹配行尾的位置 \\\u0026lt;：匹配单词开头的位置（比如\\\u0026lt;ro匹配root或robot） \\\u0026gt;：匹配单词结尾的位置（比如ot\\\u0026gt;匹配root或robot） \\\u0026lt;word\\\u0026gt;：精准匹配单词word 二、 awk 报告生成器，格式化文本输出,有多种版本：New awk（nawk），GNU awk（ gawk）\n注意：program部分只能用单引号，不能用双引号，否则会报错.\nawk [options] ‘program’ file\n1、常用命令选项 -F 指定分隔符，默认空格或Tab键 -f 调用awk脚本 -v 调用外部shell变量\n2、awk内置变量 $1..$n 指定分隔符号对应的值 $0 当前行的内容 $NF 最后一列 NF 指定分隔符号后，行的列数 NR 当前行的行号 FS 保存或设置字段分隔符 FNR 保存当前文件的行数 FILENAME 保存当前的文件名 ENVIRON 调用shell环境变量 awk \u0026#39;{print $0}\u0026#39; a.txt #打印文件所有内容($0代表整行) awk \u0026#39;{print $1,$2}\u0026#39; a.txt #打印第1列和第2列的内容 awk -F\u0026#34;:\u0026#34; \u0026#39;{print $1,$2}\u0026#39; OFS=\u0026#34;,\u0026#34; a.txt #以:为输入分隔符并且以，为输出分隔符打印第1列和第2列的内容 awk -F\u0026#34;,\u0026#34; \u0026#39;{print NR，$NF}\u0026#39; a.txt #以，为分隔符并打印行号和最后一列 awk -F\u0026#34;[ .]\u0026#34; \u0026#39;{print $(NF-1)}\u0026#39; OFS=\u0026#34;\\t\u0026#34; a.txt #以空格或.为输入分隔符并以制表符为输出分隔符打印倒数第二列 3、正则表达式 /正则/ 匹配正则(行) ~/正则/ 匹配正则(列) !~/正则/ 不匹配 awk -F\u0026#34;:\u0026#34; \u0026#39;$1~/root/ {print $0}\u0026#39; /etc/passwd awk -F\u0026#34;:\u0026#34; \u0026#39;$1!~/root/ {print $0}\u0026#39; /etc/passwd awk -F\u0026#34;:\u0026#34; \u0026#39;$1~/^ro/ {print $3}\u0026#39; /etc/passwd awk -F\u0026#34;:\u0026#34; \u0026#39;$1~/[0-9]/ {print $1,$6}\u0026#39; /etc/passwd 4、数值比较 awk -F\u0026#34;:\u0026#34; \u0026#39;$3==0{print $0}\u0026#39; /etc/passwd awk -F\u0026#34;:\u0026#34; \u0026#39;$3!=0{print $0}\u0026#39; /etc/passwd awk -F\u0026#34;:\u0026#34; \u0026#39;$1==\u0026#34;root\u0026#34;{print $0}\u0026#39; /etc/passwd 5、逻辑比较 多个条件 逻辑与 \u0026amp;\u0026amp; 多个条件同时成立 逻辑或 || 多个条件有一个成立 逻辑非 ! 取反 awk -F\u0026#34;:\u0026#34; \u0026#39;$7==\u0026#34;/bin/bash\u0026#34; \u0026amp;\u0026amp; $3\u0026lt;500{print $0}\u0026#39; /etc/passwd awk -F\u0026#34;:\u0026#34; \u0026#39;$7==\u0026#34;/bin/bash\u0026#34; || $3\u0026lt;500{print $0}\u0026#39; /etc/passwd 三、sed sed是一种流编辑器，作用是实现对文件的增删改查，它一次处理一行内容。处理时，把当前处理的行存储在临时缓冲区中，称为“模式空间”（pattern space），接着用sed命令处理缓冲区中的内容，处理完成后，把缓冲区的内容送往屏幕。然后读入下行，执行下一个循环。如果没有使诸如‘D’ 的特殊命令，那会在两个循环之间清空模式空间，但不会清空保留空间。这样不断重复，直到文件末尾。文件内容并没有改变，除非你使用重定向存储输出。\nsed [option]… ‘script’ inputfile\nsed 流编辑器，实现对文件的增删改查 选项： -n 屏蔽默认输出 -i 直接修改源文件 -e 可指定多个处理动作 -r 支持扩展表达式 {} 可组合多个命令，以;分隔 -f 使用sed脚本 定址符： p 打印行 d 删除行 s 字符串替换 1 对第1行处理 1,3 对第1到3行处理 1,+3 对第1行后面3行处理 1~2 对1,3,5,7……行处理 1,$ 对1行到最后1行处理 /aa/,/bb/ 对a行到b行处理 /aaa/,9 对a行到第9行，若前9行没有，会显示后9行匹配的行 举例子：（注意：sed增删改如果不加 -i 选项的话只是预览模式，并没有真的增删改）\n增:\ni 行前插入 a 行后插入 sed -i \u0026#39;2ixx\u0026#39; m.txt 在第2行前插入行xx sed -i \u0026#39;3,6ixx\u0026#39; m.txt 在第3-6行每行前插入xx sed -i \u0026#39;2axx\u0026#39; m.txt 在第2行后插入xx sed -i \u0026#39;/^yy/axx\u0026#39; m.txt 在yy开头的行后插入xx 删:\nsed -i \u0026#39;3,5d\u0026#39; a.txt 删除第3到5行 sed -i \u0026#39;/xml/d\u0026#39; a.txt 删除所有包含xml的行 sed -i \u0026#39;/xml/!d\u0026#39; a.txt 删除不包含xml的行 sed -i \u0026#39;/^xml/d\u0026#39; a.txt 删除以xml开头的行 sed -i \u0026#39;$d\u0026#39; a.txt 删除最后1行 sed -i \u0026#39;/^$/d\u0026#39; a.txt 删除所有空行 sed -i \u0026#39;/^$/{n;/^$/d}\u0026#39; a.txt 删除重复空行，连续两个空行只保留一个 sed -i -r\u0026#39;/a|b/d\u0026#39; a.txt 删除a或b的行 sed -i \u0026#39;2,~2d\u0026#39; a.txt 删除2行到2的倍数行 改(加-i选项才会真的修改源文件):\nc 行替换 s 字符串替换 g global(全局替换) sed -i \u0026#39;2cxx\u0026#39; m.txt 第2行替换成xx sed -i \u0026#39;3,6cxx\u0026#39; m.txt 第3到6行替换成1行xx sed -i -e \u0026#39;3cxx\u0026#39; -e \u0026#39;6cxx\u0026#39; m.txt 第3行和第6行替换成xx sed -i \u0026#39;2cxx\\nyy\u0026#39; m.txt 第2行替换成xx并换行写上yy(\\n代表换行) sed -i \u0026#39;s/test/demo/g\u0026#39; a.txt 将所有的test换成demo(常用) sed -i \u0026#39;s/#ipv6=no/ipv6=yes/g\u0026#39; test.txt 将test.txt文件里的#ipv6=no改成ipv6=yes（sed的这种用法经常用来更改配置文件里的内容） sed -i \u0026#39;s/a//g\u0026#39; a.txt 删除所有行的a sed -i \u0026#39;4,7s/^/#/\u0026#39; a.txt 4到7行加#号 sed -i \u0026#39;4,7s/^#//\u0026#39; a.txt 4到7行去掉#号 sed -i \u0026#39;s/a/B/ig\u0026#39; a.txt 所有行的a替换成B(不区分大小写) 查:\nsed –n ’20,30p’ b.txt 打印20到30行 sed -n \u0026#39;3p;6p\u0026#39; a.txt 打印第3和6行 sed -n \u0026#39;3,+6p\u0026#39; a.txt 打印第3行及其后6行 sed -n \u0026#39;/^bin/p\u0026#39; a.txt 打印以bin开头的行 sed -n \u0026#39;p;n\u0026#39; a.txt 打印奇数行，n表示读下一行(隔行) sed -n \u0026#39;n;p\u0026#39; a.txt 打印偶数行，n表示读下一行(隔行) sed -n \u0026#39;8,${n;p}\u0026#39; a.txt 打印8行到末尾所有的偶数行 sed -n \u0026#39;$=\u0026#39; a.txt 打印文件的行数 sed -n \u0026#39;/a/{=;p} \u0026#39; b.txt 显示行号 sed -n l aaa.jpg 打印不可见字符 四、grep 文本过滤(模式：pattern)工具，grep, egrep\ngrep [options] pattern [file...]\u0026lt;br\u0026gt;\u0026lt;br\u0026gt; --color=auto 对匹配到的文本着色显示 -v 显示不被pattern匹配到的行 -i 忽略字符大小写 -n 显示匹配的行号 -c 统计匹配的行数 -o 仅显示匹配到的字符串 -q 静默模式，不输出任何信息 -A # after, 后#行 -B # before, 前#行 -C # context, 前后各#行 -e 实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file -w 匹配整个单词 -E 使用ERE,相当于egrep -F 相当于fgrep，不支持正则表达式 举例子：\ngrep root passwd.txt #查找文件内容包含root的行 grep -i root passwd.txt #查找文件内容包含root(忽略大小写)的行 grep -v root passwd.txt #查找文件内容不包含root的行 grep -w \u0026#34;root\u0026#34; passwd.txt #查找文件内容包含整个单词\u0026#34;root\u0026#34;的行 grep ^s passwd.txt #查找以s开头的行 grep n$ passwd.txt #查找以n结尾的行 egrep \u0026#34;^([0-9]{1,3}.){3}[0-9]{1,3}$\u0026#34; log.txt | sort | uniq -c #找出log文件中的所有ip地址并统计每个ip出现的次数 参考链接：\nhttps://blog.csdn.net/weixin_44681349/article/details/125015316\n","permalink":"http://klxq666.fun/posts/blog/linux_shell/linux_grep_sed_awd/","summary":"Linux三剑客以及专长 grep 取行 sed 取行以及修改 awk 取列 一、剑—–“正则表达式” 正则表达式是一个模版，这个模版是由一些普通字符和一些元字符组成。 普通字符包括大小写的字母和数字，而元字符则具有特殊的含义 1.字符类 .：匹配任意单个字符 []：匹配中括号内的任意一个字符 -：在[ ]中括号内表示字","title":"Linux 之三剑客——grep、sed、awk"},{"content":"在http请求3位的返回码中,4开头的代表客户端错误,5开头代表服务器端错误\n参考链接： https://blog.csdn.net/red_sky_blue/article/details/124278600\n","permalink":"http://klxq666.fun/posts/blog/httperror_4xx_5xx/","summary":"在http请求3位的返回码中,4开头的代表客户端错误,5开头代表服务器端错误 参考链接： https://blog.csdn.net/red_sky_blue/article/details/124278600","title":"HTTP服务器常见错误状态码4XX、5XXg"},{"content":"一、下载Jenkins 与修改国内源 1.去官网下载即可 jenkins.io\n2.去页面Manage Jenkins -》Manage Plugin -》Advanced 最下面Update Site\n设置为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json\n3.修改服务器配置 将 https://updates.jenkins.io/download 改为 http://mirrors.tuna.tsinghua.edu.cn/jenkins 将 https://www.google.com 改为 https://www.baidu.com sed -i \u0026#39;s/https:\\/\\/updates.jenkins.io\\/download/http:\\/\\/mirrors.tuna.tsinghua.edu.cn\\/jenkins/g\u0026#39; /var/lib/jenkins/updates/default.json sed -i \u0026#39;s/https:\\/\\/www.google.com/https:\\/\\/www.baidu.com/g\u0026#39; /var/lib/jenkins/updates/default.jsonv 如果上面改完只是临时生效，每次启动的时候回去官网安全检查一下，这个操作会导致咱们之前改的不生效，则需要填写以下参数来关闭验证\n如果是用 yum 安装的，systemctl 启动的，修改路径 /etc/sysconfig/jenkins，添加以下\nJENKINS_JAVA_OPTIONS=\u0026#34;-Djava.awt.headless=true -Dhudson.model.DownloadService.noSignatureCheck=true\u0026#34; 参考链接：\nhttps://blog.csdn.net/qq_46373211/article/details/126718244\n","permalink":"http://klxq666.fun/posts/blog/devops_jenkins/","summary":"一、下载Jenkins 与修改国内源 1.去官网下载即可 jenkins.io 2.去页面Manage Jenkins -》Manage Plugin -》Advanced 最下面Update Site 设置为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 3.修改服务器配置 将 https://updates.jenkins.io/download 改为 http://mirrors.tuna.tsinghua.edu.cn/jenkins 将 https://www.google.com 改为 https://www.baidu.com sed -i \u0026#39;s/https:\\/\\/updates.jenkins.io\\/download/http:\\/\\/mirrors.tuna.tsinghua.edu.cn\\/jenkins/g\u0026#39; /var/lib/jenkins/updates/default.json sed -i \u0026#39;s/https:\\/\\/www.google.com/https:\\/\\/www.baidu.com/g\u0026#39; /var/lib/jenkins/updates/default.jsonv 如果上面改完只是临时生效，每次启动的时候回去官网安全检查一下，这个操作会导致咱们之","title":"关于持续集成 Devops Jenkins"},{"content":"一.查看原因 systemctl status docker.service\n● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: failed (Result: start-limit) since Thu 2023-03-02 18:40:16 CST; 2min 54s ago Docs: https://docs.docker.com Process: 2555 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE) Main PID: 2555 (code=exited, status=1/FAILURE) Mar 02 18:40:13 k8s-master systemd[1]: Unit docker.service entered failed state. Mar 02 18:40:13 k8s-master systemd[1]: docker.service failed. Mar 02 18:40:16 k8s-master systemd[1]: docker.service holdoff time over, scheduling restart. Mar 02 18:40:16 k8s-master systemd[1]: Stopped Docker Application Container Engine. Mar 02 18:40:16 k8s-master systemd[1]: start request repeated too quickly for docker.service Mar 02 18:40:16 k8s-master systemd[1]: Failed to start Docker Application Container Engine. Mar 02 18:40:16 k8s-master systemd[1]: Unit docker.service entered failed state. Mar 02 18:40:16 k8s-master systemd[1]: docker.service failed.q 全网各种查找“docker.service: Service hold-off time over, scheduling restart”，各种说法\n有说/etc/docker/daemon.json 格式不对\n有说/etc/docker/daemon.json 改为/etc/docker/daemon.conf，都试了没用\n最后看到一个大佬说，重启systemctl restart docker.service 后，\n马上按systemctl status docker.service 或 journalctl -xe,可以看到更详细的报错;\n[root@k8s-master docker]# systemctl restart docker.service Job for docker.service failed because the control process exited with error code. See \u0026#34;systemctl status docker.service\u0026#34; and \u0026#34;journalctl -xe\u0026#34; for details. [root@k8s-master docker]# journalctl -xe Mar 02 18:44:33 k8s-master dockerd[2648]: time=\u0026#34;2023-03-02T18:44:33.921429349+08:00\u0026#34; level=info msg=\u0026#34;scheme \\ Mar 02 18:44:33 k8s-master dockerd[2648]: time=\u0026#34;2023-03-02T18:44:33.921448526+08:00\u0026#34; level=info msg=\u0026#34;ccResolv Mar 02 18:44:33 k8s-master dockerd[2648]: time=\u0026#34;2023-03-02T18:44:33.921509775+08:00\u0026#34; level=info msg=\u0026#34;ClientCo Mar 02 18:44:33 k8s-master kernel: XFS (sda3): Metadata corruption detected at xfs_inode_buf_verify+0x14d/0x1 Mar 02 18:44:33 k8s-master kernel: XFS (sda3): Unmount and run xfs_repair Mar 02 18:44:33 k8s-master kernel: XFS (sda3): First 128 bytes of corrupted metadata buffer: Mar 02 18:44:33 k8s-master kernel: ffff9094dede8000: 0b 68 78 d8 4b 00 ff 15 04 35 4a 00 ff 75 14 e8 .hx.K.. Mar 02 18:44:33 k8s-master kernel: ffff9094dede8010: 7c 02 00 00 ff 47 04 8b d8 8b 4d 10 89 4b 04 8b |....G. Mar 02 18:44:33 k8s-master kernel: ffff9094dede8020: 07 3b c8 75 0b 89 58 04 8b 07 89 18 8b 07 eb 1c .;.u..X Mar 02 18:44:33 k8s-master kernel: ffff9094dede8030: 80 7d 0c 00 74 0c 89 19 8b 07 3b 08 75 11 89 18 .}..t.. Mar 02 18:44:33 k8s-master kernel: ffff9094dede8040: eb 0d 89 59 08 8b 07 3b 48 08 75 03 89 58 08 8b ...Y... Mar 02 18:44:33 k8s-master kernel: ffff9094dede8050: 43 04 8b f3 80 78 0c 00 0f 85 0c 01 00 00 66 90 C....x. Mar 02 18:44:33 k8s-master kernel: ffff9094dede8060: 8b 46 04 8b 50 04 8b 0a 3b c1 75 74 8b 4a 08 80 .F..P.. Mar 02 18:44:33 k8s-master kernel: ffff9094dede8070: 79 0c 00 74 71 3b 70 08 75 0a 8b f0 8b cf 56 e8 y..tq;p Mar 02 18:44:33 k8s-master kernel: XFS (sda3): metadata I/O error in \u0026#34;xfs_trans_read_buf_map\u0026#34; at daddr 0x4b18 Mar 02 18:44:33 k8s-master kernel: XFS (sda3): xfs_imap_to_bp: xfs_trans_read_buf() returned error -117. Mar 02 18:44:33 k8s-master dockerd[2648]: failed to start daemon: lstat /var/lib/docker/image/overlay2/layerd Mar 02 18:44:33 k8s-master systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE Mar 02 18:44:33 k8s-master systemd[1]: Failed to start Docker Application Container Engine. -- Subject: Unit docker.service has failed 终于发现问题所在了，我的是在vmware虚拟机 跑的docker，上次异常关机重启了，分区损坏了…\n二.参考解决办法： 1：启动虚拟机E进入单用户模式\n2：在linux16开头的哪一行后面添加rd.break，ctrl+x进入救援模式\n3：执行umount /dev/sda3\n执行xfs_repair -L /dev/sda3\n如无报错，重启虚拟机，检查docker已经正常\n以下是参考链接：\ndocker 启动失败，查看更详细的报错\nhttps://blog.csdn.net/zengyaowu1988/article/details/108400029\n重启虚拟机异常：unmount and run xfs_repair\nhttps://blog.csdn.net/qq_35022803/article/details/1092870863\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_start_fail/","summary":"一.查看原因 systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: failed (Result: start-limit) since Thu 2023-03-02 18:40:16 CST; 2min 54s ago Docs: https://docs.docker.com Process: 2555 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE) Main PID: 2555 (code=exited, status=1/FAILURE) Mar 02 18:40:13 k8s-master systemd[1]: Unit docker.service entered failed state. Mar 02 18:40:13 k8s-master systemd[1]: docker.service failed. Mar 02 18:40:16 k8s-master systemd[1]: docker.service holdoff time over, scheduling restart. Mar 02 18:40:16 k8s-master systemd[1]: Stopped Docker Application Container Engine. Mar 02 18:40:16 k8s-master systemd[1]: start request repeated too quickly for docker.service Mar 02 18:40:16 k8s-master systemd[1]: Failed to start Docker Application Container Engine. Mar 02 18:40:16 k8s-master systemd[1]: Unit docker.service entered failed state. Mar 02 18:40:16 k8s-master systemd[1]: docker.service failed.q 全网各种查找“dock","title":"docker 启动失败报Failed to start Docker Application Container Engine的解决方法"},{"content":"shell 是一个命令解释器\n系统变量 $HOME $PWD $USER $SHELL　","permalink":"http://klxq666.fun/posts/blog/linux_shell/linux_shell/","summary":"shell 是一个命令解释器 系统变量 $HOME $PWD $USER $SHELL","title":"Linux 之shell"},{"content":"一、简介 mysql从3.23版本开始提供复制功能，复制是将主库的DDL和DML操作通过二进制日志传递到复制服务器（从库）上，然后从库对这些日志重新执行（重做），从而使得主库和从库保持数据一致。#\n二、MySQL 主从复制的原理 MySQL主从复制涉及到三个线程，一个运行在主节点（log dump thread），其余两个(I/O thread, SQL thread)运行在从节点，如下图所示:\n1）主节点 log dump 线程 当从节点连接主节点时，主节点会为其创建一个log dump 线程，用于发送和读取bin-log的内容。在读取bin-log中的操作时，log dump线程会对主节点上的bin-log加锁，当读取完成，在发送给从节点之前，锁会被释放。主节点会为自己的每一个从节点创建一个log dump 线程。 2）从节点 I/O线程 当从节点上执行`start slave`命令之后，从节点会创建一个I/O线程用来连接主节点，请求主库中更新的bin-log。I/O线程接收到主节点的blog dump进程发来的更新之后，保存在本地relay-log（中继日志）中。 3）从节点 SQL线程 SQL线程负责读取relay-log中的内容，解析成具体的操作并执行，最终保证主从数据的一致性。 对于每一个主从连接，都需要这三个进程来完成。当主节点有多个从节点时，主节点会为每一个当前连接的从节点建一个log dump 进程，而每个从节点都有自己的I/O进程，SQL进程。从节点用两个线程将从主库拉取更新和执行分成独立的任务，这样在执行同步数据任务的时候，不会降低读操作的性能。比如，如果从节点没有运行，此时I/O进程可以很快从主节点获取更新，尽管SQL进程还没有执行。如果在SQL进程执行之前从节点服务停止，至少I/O进程已经从主节点拉取到了最新的变更并且保存在本地relay日志中，当服务再次起来之后，就可以完成数据的同步。 4）复制的基本过程 在从节点上执行sart slave命令开启主从复制开关，开始进行主从复制。从节点上的I/O 进程连接主节点，并请求从指定日志文件的指定位置（或者从最开始的日志）之后的日志内容； 主节点接收到来自从节点的I/O请求后，通过负责复制的I/O进程（log dump 线程）根据请求信息读取指定日志指定位置之后的日志信息，返回给从节点。返回信息中除了日志所包含的信息之外，还包括本次返回的信息的bin-log file 的以及bin-log position（bin-log中的下一个指定更新位置）； 从节点的I/O进程接收到主节点发送过来的日志内容、日志文件及位置点后，将接收到的日志内容更新到本机的relay-log（中继日志）的文件（Mysql-relay-bin.xxx）的最末端，并将读取到的binary log（bin-log）文件名和位置保存到master-info 文件中，以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log 的哪个位置开始往后的日志内容，请发给我”； Slave 的 SQL线程检测到relay-log 中新增加了内容后，会将relay-log的内容解析成在主节点上实际执行过SQL语句，然后在本数据库中按照解析出来的顺序执行，并在relay-log.info中记录当前应用中继日志的文件名和位置点。 要实施复制，首先必须打开Master 端的binary log（bin-log）功能，否则无法实现。 因为整个复制过程实际上就是Slave 从Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。如下图所示： 三、docker 安装MySQL主从复制遇到的问题记录 1.登录MySQL提示密码错误\nERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES) 解决：1.挂载出MySQL的配置目录，修改配置文件my.cnf ；追加skip-grant-tables 2.重启MySQL容器，并进入，此时密码为空 mysql -uroot -p 即可 3.更新root密码为空 use mysql; select user,authentication_string,host from user; update user set authentication_string=\u0026#39;\u0026#39; where user=\u0026#39;root\u0026#39;; flush privileges; 4.退出MySQL，把追加的skip-grant-tables 注释，再次重启MySQL容器 5.再次进入MySQL，修改root密码即可 alter user \u0026#39;root\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;123456\u0026#39; ; alter user \u0026#39;root\u0026#39;@\u0026#39;%\u0026#39; IDENTIFIED BY \u0026#39;123456\u0026#39;; select user,authentication_string,host from user; flush privileges; 2.主从同步报错：\nGot fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’ 解决办法：1.停止slave服务器的主从同步 stop slave 2.对Master数据库加锁 flush tables with read lock; 3.备份Master上的数据 mysqldump -uroot -p -B db1 db2 \u0026gt;bak.sql 4.重置Master服务 reset master; #reset master 将删除所有的二进制日志，创建一个名为 ****.000001的空日志文件。reset master 并不会影响slave服务器的工作状态。盲目执行这个命令有可能导致 slave报这个错误：“Got fatal error 1236 from master when reading data from binary log: \u0026#39;could not find next log\u0026#39;” 造成主从同步失败。 此时需要重置同步，所以需要执行一下 5.对Master解锁 unlock tables; 6.将Master备份文件拷贝到slave上去 scp bak.sql root@192.168.35.68 /root/ 7.删除slave上的旧数据 drop database db1; drop database db2; 8.导入数据 source /root/bak.sql 9.重置slave reset slave #reset slave 将清除slave上的同步位置信息，删除所有的中继日志，不管SQL线程是否执行完毕。 10.开启slave start slave 参考链接： https://blog.csdn.net/K_520_W/article/details/117135287\n","permalink":"http://klxq666.fun/posts/blog/mysql/mysql_master-slave/","summary":"一、简介 mysql从3.23版本开始提供复制功能，复制是将主库的DDL和DML操作通过二进制日志传递到复制服务器（从库）上，然后从库对这些日志重新执行（重做），从而使得主库和从库保持数据一致。# 二、MySQL 主从复制的原理 MySQL主从复制涉及到三个线程，一个运行在主节点（log","title":"MySQL主从复制原理以及docker安装MySQL中遇到的问题"},{"content":"一. 安装docker 1.先卸载机器之前的docker相关组件\nyum remove docker \\ docker-client \\ docker-client-latest \\ docker-common \\ docker-latest \\ docker-latest-logrotate \\ docker-logrotate \\ docker-engine 2.安装需要的包\nyum install -y yum-utils 3.设置国内阿里的镜像仓库\nyum-config-manager \\ --add-repo \\ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 4.更新yum的软件包索引\nyum makecache fast 5.安装docker相关组件 docke-ce 是社区版本\nyum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin 6.启动Docker 引擎并设置开机自启\nsystemctl start docker systemctl enable docker 也可以用一条命令 systemctl enable --now docker 7.验证安装是否成功\ndocker run hello-world 如果一切正常，就是如下图 二. 容器命令 docker run 【可选参数】 image --name=\u0026#34;Name” 容器名字 -d　后台方式运行　-it　使用交互方式进行，进入容器查看内容 -p 主机端口：容器端口 （常用） -P　随机指定端口 docker ps 命令 列出当前正在运行的容器\n-a #列出当前正在运行的的容器+带出历史运行过的容器\ndocker rm 容器id #删除指定的容器，不能删除正在运行的容器，如果要强制删除 rm -f docker rm -f $(docker ps -aq) #删除所有的容器 docker ps -a -q |xargs docker rm #删除所有的容器 docker logs 容器id -tf #显示日志 --tail number #要显示的日志条数 docker inspect 容器id #查看镜像的元数据 docker可以通过 –platform=platformname 命令获取指定系统架构的镜像，具体为： docker pull --platform=\u0026lt;plartform\u0026gt; \u0026lt;image-name\u0026gt;:\u0026lt;tag\u0026gt; 示列：docker pull --platform=arm64 nginx:latest 进入当前正在运行的容器\ndocker exec -it 容器id bashshell #进入容器后开启一个新的终端，可以在里面操作 docker attach 容器id #进入容器正在运行的终端，不会启动新的进程 docker stats #查看当前正在运行的容器使用cpu、内存等状态 docker top 容器id #查看容器内部的运行进程 三. commit 镜像 导出与导入 命令和git原理类似 docker commit -m=\u0026#34;提交的描述描述信息\u0026#34; -a=\u0026#34;作者\u0026#34; 容器id 目标镜像名: [TAG] 打包镜像 docker save -o minio-nginx.tar minio/minio:latest nginx:1.19.2-alpine 载入镜像 docker load -i minio-nginx.tar 结合这两个命令以及 ssh 甚至 pv 的话，利用 Linux 强大的管道 我们可以写一个命令完成从一个机器将镜像迁移到另一个机器，并且带进度条的功能： docker save \u0026lt;镜像名\u0026gt; | bzip2 | pv | ssh \u0026lt;用户名\u0026gt;@\u0026lt;主机名\u0026gt; \u0026#39;cat | docker load\u0026#39; 四. 具名和匿名挂载 -v 容器内路径 #匿名挂载 -v 卷名：容器内路径 #具名挂载 -v /宿主机路径：：容器内路径 #指定路径挂载 匿名挂载 -v 容器内路径\ndocker run -d -P --name nginx01 -v /etc/nginx nginx root@# docker volume ls DRIVER VOLUME NAME local 8938cbf4bd600fead15f20c3fcd51cd25d8a3ce0fd4815494d1e94efb332c125 具名挂载 -v 卷名：容器内路径\ndocker run -d -P --name nginx04 -v tang-nginx:/etc/nginx nginx root@# docker volume ls DRIVER VOLUME NAME local 8938cbf4bd600fead15f20c3fcd51cd25d8a3ce0fd4815494d1e94efb332c125 local tang-nginx 五. Dockerfile Dockerfile的指令\nFROM # 基础镜像，一切从这里开始构建 MAINTAINER　# 镜像是谁写的，姓名+邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包 WORKDIR　# 镜像的工作目录 VOLUME　# 挂载的目录 EXPOSE # 保留端口配置 CMD　# 指定这个容器启动的时候要运行的命令；一个Dockerfile中可以有多个CMD指令，只有最后一个会生效，CMD会被docker run 之后的参数替换 ENTRYPOINT　# 类似于CMD指令，但是ENTRYPOINT不会被docker run后面的命令覆盖， ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令 COPY　# 类似ADD ，将我们文件拷贝到镜像中 ENV # 构建的时候设置环境变量！ 小结： 参考链接：\ndocker官网指导 https://docs.docker.com/engine/install/ubuntu/\n青年码农博客 https://www.cnblogs.com/nmgwap/p/16331692.html\n菜鸟教程 https://www.runoob.com/docker/docker-command-manual.html\nDirect_博客 https://blog.csdn.net/D1179869625/article/details/122933562\n","permalink":"http://klxq666.fun/posts/blog/docker/docker_command/","summary":"一. 安装docker 1.先卸载机器之前的docker相关组件 yum remove docker \\ docker-client \\ docker-client-latest \\ docker-common \\ docker-latest \\ docker-latest-logrotate \\ docker-logrotate \\ docker-engine 2.安装需要的包 yum install -y yum-utils 3.设置国内阿里的镜像仓库 yum-config-manager \\ --add-repo \\ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 4.更新yum的软件包索引 yum makecache fast 5.安装docker相关组件 docke-ce 是社区版本 yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin 6.启动Docker 引擎并设置开机自启 systemctl","title":"docker 相关知识"},{"content":" ","permalink":"http://klxq666.fun/posts/blog/hanshunping_teacher/hanshunping_teacher/","summary":"","title":"跟着韩顺平老师学Linux 的一些笔记与截图"},{"content":"1. 介绍 scan命令的作用和keys *的作用类似，主要用于查找redis中的键，但是在正式的生产环境中一般不会直接使用keys *这个命令，因为他会返回所有的键，如果键的数量很多会导致查询时间很长，进而导致服务器阻塞，所以需要scan来进行更细致的查找\nscan总共有这几种命令：scan、sscan、hscan、zscan，分别用于迭代数据库中的：数据库中所有键、集合键、哈希键、有序集合键，命令具体结构如下：\nscan cursor [MATCH pattern] [COUNT count] [TYPE type] sscan key cursor [MATCH pattern] [COUNT count] hscan key cursor [MATCH pattern] [COUNT count] zscan key cursor [MATCH pattern] [COUNT count] 2. scan scan cursor [MATCH pattern] [COUNT count] [TYPE type]，cursor表示游标，指查询开始的位置，count默认为10，查询完后会返回下一个开始的游标，当返回0的时候表示所有键查询完了\n127.0.0.1:6379[2]\u0026gt; scan 0 1) \u0026#34;3\u0026#34; 2) 1) \u0026#34;mystring\u0026#34; 2) \u0026#34;myzadd\u0026#34; 3) \u0026#34;myhset\u0026#34; 4) \u0026#34;mylist\u0026#34; 5) \u0026#34;myset2\u0026#34; 6) \u0026#34;myset1\u0026#34; 7) \u0026#34;mystring1\u0026#34; 8) \u0026#34;mystring3\u0026#34; 9) \u0026#34;mystring4\u0026#34; 10) \u0026#34;myset\u0026#34; 127.0.0.1:6379[2]\u0026gt; scan 3 1) \u0026#34;0\u0026#34; 2) 1) \u0026#34;myzadd1\u0026#34; 2) \u0026#34;mystring2\u0026#34; 3) \u0026#34;mylist2\u0026#34; 4) \u0026#34;myhset1\u0026#34; 5) \u0026#34;mylist1\u0026#34; MATCH可以采用模糊匹配找出自己想要查找的键，这里的逻辑是先查出20个，再匹配，而不是先匹配再查询，这里加上count 20是因为默认查出的10个数中可能不能包含所有的相关项，所以把范围扩大到查20个，我这里测试的键总共有15个\n127.0.0.1:6379[2]\u0026gt; scan 0 match mylist* count 20 1) \u0026#34;0\u0026#34; 2) 1) \u0026#34;mylist\u0026#34; 2) \u0026#34;mylist2\u0026#34; 3) \u0026#34;mylist1\u0026#34; TYPE可以根据具体的结构类型来匹配该类型的键\n127.0.0.1:6379[2]\u0026gt; scan 0 count 20 type list 1) \u0026#34;0\u0026#34; 2) 1) \u0026#34;mylist\u0026#34; 2) \u0026#34;mylist2\u0026#34; 3) \u0026#34;mylist1\u0026#34; 3. sscan sscan key cursor [MATCH pattern] [COUNT count]，sscan的第一个参数总是集合类型的key\n127.0.0.1:6379[2]\u0026gt; sadd myset1 a b c d (integer) 4 127.0.0.1:6379[2]\u0026gt; smembers myset1 1) \u0026#34;d\u0026#34; 2) \u0026#34;a\u0026#34; 3) \u0026#34;c\u0026#34; 4) \u0026#34;b\u0026#34; 127.0.0.1:6379[2]\u0026gt; sscan myset1 0 1) \u0026#34;0\u0026#34; 2) 1) \u0026#34;d\u0026#34; 2) \u0026#34;c\u0026#34; 3) \u0026#34;b\u0026#34; 4) \u0026#34;a\u0026#34; 127.0.0.1:6379[2]\u0026gt; sscan myset1 0 match a 1) \u0026#34;0\u0026#34; 2) 1) \u0026#34;a\u0026#34; 4. hscan hscan key cursor [MATCH pattern] [COUNT count]，sscan的第一个参数总是哈希类型的key\n127.0.0.1:6379[2]\u0026gt; hset myhset1 kk1 vv1 kk2 vv2 kk3 vv3 (integer) 3 127.0.0.1:6379[2]\u0026gt; hgetall myhset1 1) \u0026#34;kk1\u0026#34; 2) \u0026#34;vv1\u0026#34; 3) \u0026#34;kk2\u0026#34; 4) \u0026#34;vv2\u0026#34; 5) \u0026#34;kk3\u0026#34; 6) \u0026#34;vv3\u0026#34; 127.0.0.1:6379[2]\u0026gt; hscan myhset1 0 1) \u0026#34;0\u0026#34; 2) 1) \u0026#34;kk1\u0026#34; 2) \u0026#34;vv1\u0026#34; 3) \u0026#34;kk2\u0026#34; 4) \u0026#34;vv2\u0026#34; 5) \u0026#34;kk3\u0026#34; 6) \u0026#34;vv3\u0026#34; 5. zscan zscan key cursor [MATCH pattern] [COUNT count]，sscan的第一个参数总是有序集合类型的key\n127.0.0.1:6379[2]\u0026gt; zadd myzadd1 1 zz1 2 zz2 3 zz3 (integer) 3 127.0.0.1:6379[2]\u0026gt; zrange myzadd1 0 -1 withscores 1) \u0026#34;zz1\u0026#34; 2) \u0026#34;1\u0026#34; 3) \u0026#34;zz2\u0026#34; 4) \u0026#34;2\u0026#34; 5) \u0026#34;zz3\u0026#34; 6) \u0026#34;3\u0026#34; 127.0.0.1:6379[2]\u0026gt; zscan myzadd1 0 1) \u0026#34;0\u0026#34; 2) 1) \u0026#34;zz1\u0026#34; 2) \u0026#34;1\u0026#34; 3) \u0026#34;zz2\u0026#34; 4) \u0026#34;2\u0026#34; 5) \u0026#34;zz3\u0026#34; 6) \u0026#34;3\u0026#34; ","permalink":"http://klxq666.fun/posts/tech/tech1/","summary":"1. 介绍 scan命令的作用和keys *的作用类似，主要用于查找redis中的键，但是在正式的生产环境中一般不会直接使用keys *这个命令，因为他会返回所有的键，如果键的数量很多会导致查询时间很长，进而导致服务器阻塞，所以需要scan来进行更细致的查找 scan总共有这几种命令：sca","title":"Redis scan命令学习"},{"content":"一、minikube介绍 Minikube是由Kubernetes社区维护的单机版的Kubernetes集群， 支持macOS, Linux, and Windows等多种操作系统平台， 使用最新的官方stable版本，并支持Kubernetes的大部分功能， 从基础的容器编排管理，到高级特性如负载均衡、Ingress，权限控制等。\n二、本次实验环境 ubuntu 18 需提前安装好docker\n三、部署 1.下载并安装kubectl: 参考https://kubernetes.io/docs/tasks/tools/install-kubectl/\ncurl -LO \u0026#34;https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl\u0026#34; chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl 2.下载并安装minikube 参考 https://minikube.sigs.k8s.io/docs/start/ 安装配置\ncurl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube 3.启动minikube\n参考链接：https://developer.aliyun.com/article/22168\n","permalink":"http://klxq666.fun/posts/blog/ubuntu_minikube/","summary":"一、minikube介绍 Minikube是由Kubernetes社区维护的单机版的Kubernetes集群， 支持macOS, Linux, and Windows等多种操作系统平台， 使用最新的官方stable版本，并支持Kubernetes的大部分功能， 从基础的容器编排管理，到高级特性如负载均衡、I","title":"ubuntu 18环境安装minikube"},{"content":"最近入手了一个矿机蜗牛星际a款,折腾性挺强的，有点小意思；\n虽然都是在其他大佬那学习过来自己修修改改，但把这过程记录下，也算留点记忆。上图：\n1.目前在使用中 nas的各种特点我就不细说了，网上一堆，各人根据自己需求来操作，\n1.个人导航页 用docker安装的heimall\n2.家庭相册 群辉自带的moments\n3.家庭多媒体中心 用docker安装的jellyfin\n参考链接如下：\nheimall https://post.smzdm.com/p/adwg0mxd/\nmoments https://post.smzdm.com/p/a9gp0q6p/\njellyfin\nhttps://post.smzdm.com/p/a6lnxg3g/\nhttps://zhuanlan.zhihu.com/p/338989196\nhttps://www.bilibili.com/video/av419039695/\n群晖安装教程 https://post.smzdm.com/p/aqx07xmk/\n群辉官网下载中心链接 https://www.synology.cn/zh-cn/support/download/DS220j?version=6.2#androids\n2.后期打算 处理下网络这块，让出门在外也可以随时访问家里的资源。\n外网访问nas https://post.smzdm.com/p/a5dv4eok/\n折腾不止，最近又开始折腾unarid，一个更强大，可玩性更大的底层系统\n同样也装了 导航页、jellyfin 还有荒野无灯大佬的FB文件管理器\nunraid环境下安装相关组件的参考链接如下：\nheimall https://post.smzdm.com/p/amxkop7p/\njellyfin https://post.smzdm.com/p/a25gpmpn/\n","permalink":"http://klxq666.fun/posts/webnas/fun_nas/","summary":"最近入手了一个矿机蜗牛星际a款,折腾性挺强的，有点小意思； 虽然都是在其他大佬那学习过来自己修修改改，但把这过程记录下，也算留点记忆。上图： 1.目前在使用中 nas的各种特点我就不细说了，网上一堆，各人根据自己需求来操作， 1.个人导航页 用docker安装的heimall 2.家庭相册 群","title":"好玩的NAS"},{"content":"","permalink":"http://klxq666.fun/posts/life/life/","summary":"","title":"Life"},{"content":"","permalink":"http://klxq666.fun/posts/read/read/","summary":"","title":"Read"},{"content":"\u0026lt;div\u0026gt; 科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 \u0026lt;/div\u0026gt; ","permalink":"http://klxq666.fun/posts/tech/tech/","summary":"\u0026lt;div\u0026gt; 科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代码 科技代","title":"Tech"},{"content":" 会BK的鱼 一个记录技术、阅读、生活的博客 会BK的鱼 博客园阵地 👉友链格式 名称： Chenxi Blog 网址： https://klxq.fun 图标： https://www.klxq.fun/img/Q.gif 描述： 一个记录技术、阅读、生活的博客 👉友链申请要求 秉承互换友链原则、文章定期更新、不能有太多广告、个人描述字数控制在15字内\n","permalink":"http://klxq666.fun/links/","summary":"会BK的鱼 一个记录技术、阅读、生活的博客 会BK的鱼 博客园阵地 👉友链格式 名称： Chenxi Blog 网址： https://klxq.fun 图标： https://www.klxq.fun/img/Q.gif 描述： 一个记录技术、阅读、生活的博客 👉友链申请要求 秉承互换友链原则、文章定期更新、不能有太多广告、个人描述字数控制在15字内","title":"🤝友链"},{"content":"图一 Ghost8.0启动画面 点击OK后，就可以看到Ghost的主菜单\n图二 Ghost菜单 在主菜单中，有以下几项：\nLocal：本地操作，对本地计算机上的硬盘进行操作。 Peer to peer：通过点对点模式对网络计算机上的硬盘进行操作。 GhostCast：通过单播/多播或者广播方式对网络计算机上的硬盘进行操作。 Option：使用Ghsot时的一些选项，一般使用默认设置即可。 Help：一个简洁的帮助。 Quit：退出Ghost。 注意：当计算机上没有安装网络协议的驱动时，Peer to peer和GhostCast选项将不可用（在DOS下一般都没有安装）。 启动Ghost之后，选择Local-\u0026gt;Partion对分区进行操作。\nTo Partion：将一个分区的内容复制到另外一个分区。 To Image：将一个或多个分区的内容复制到一个镜像文件中。（一般备份系统均选择此操作。） From Image：将镜像文件恢复到分区中。当系统备份后，可选择此操作恢复系统。 # (一般此操作用为gho恢复到一个硬盘去) ","permalink":"http://klxq666.fun/posts/blog/windows_ghost/","summary":"图一 Ghost8.0启动画面 点击OK后，就可以看到Ghost的主菜单 图二 Ghost菜单 在主菜单中，有以下几项： Local：本地操作，对本地计算机上的硬盘进行操作。 Peer to peer：通过点对点模式对网络计算机上的硬盘进行操作。 GhostCast：通过单播/多播或者广播方式对网络计算机上","title":"ghost 一键备份还原工具使用指南"},{"content":"一、涉及道具: 1个8G的U盘 ,CentOS-6.4-i386-minimal.iso ,DTLite ,虚拟机(内装centos系统)\n二、安装步骤: 1.分区\n用LINUX将U盘（8G）分为两个区： fdisk /dev/sdb (在你的系统中,设备名可能不一样) 分第一个区：n--p--+2G,格式化为vfat格式，mkfs.vfat /dev/sdb1,这个可以当普通U盘使用 分第二个区：n--p--+5G,把它设为活动分区，a--2,并格式化为EXT4格式，mkfs.ext4 /dev/sdb2,做为LINUX安装目录 最后剩余部分做SWAP，这里暂不管它(在后面进行系统安装过程中设置) 2.安装GRUB到U盘\nmount -a /dev/sdb1 /mnt/sdb1 mount -a /dev/sdb2 /mnt/sdb2 grub-install root-directory=/mnt/sdb1 /dev/sdb ，GRUB安装到U盘上，测试一下，GRUB安装完成之后，U盘应该可以启动电脑了 dracut:/# cd dev dracut:/# ls 找到sdbx,x为一个数字，是你u盘所在 dracut:/# reboot 重启之后，修改vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\\x207\\x20x86_64 quiet 为 vmlinuz initrd=initrd.img inst.stage2=/hd:/dev/sdbx(你u盘所在)quiet 回车就好 ","permalink":"http://klxq666.fun/posts/blog/linux_minicd/","summary":"一、涉及道具: 1个8G的U盘 ,CentOS-6.4-i386-minimal.iso ,DTLite ,虚拟机(内装centos系统) 二、安装步骤: 1.分区 用LINUX将U盘（8G）分为两个区： fdisk /dev/sdb (在你的系统中,设备名可能不一样) 分第一个区：n--p--+2G,格式化为vfat格式，mkfs.vfat /dev/sdb1,这个可以当普通U盘使用 分第","title":"制作Linux 随身碟"}]