[转帖]配置中心预研

配置,中心,预研 · 浏览次数 : 0

小编点评

**MySQL 配置文件 (mysql_svc.yaml)** ```yaml apiVersion: apps/v1kind: Servicemetadata name: mysql namespace: nacos labels: app: nacos annotations: pod.alpha.kubernetes.io/initialized: "true" spec: containers: - name: nacos imagePullPolicy: Always image: nacos/nacos-server:latest resources: requests: memory: "2Gi" cpu: "500m" ports: - containerPort: 8848 name: client env: - name: NACOS_REPLICAS value: "1" - name: MYSQL_SERVICE_DB_NAME valueFrom: configMapKeyRef: name: nacos-cm key: mysql.db.name - name: MYSQL_SERVICE_HOST valueFrom: configMapKeyRef: name: nacos-cm key: mysql.db.host - name: MYSQL_SERVICE_PORT valueFrom: configMapKeyRef: name: nacos-cm key: mysql.port - name: MYSQL_SERVICE_USER valueFrom: configMapKeyRef: name: nacos-cm key: mysql.user - name: MYSQL_SERVICE_PASSWORD valueFrom: configMapKeyRef: name: nacos-cm key: mysql.password - name: NACOS_SERVER_PORT value: "8848" - name: PREFER_HOST_MODE value: "hostname" - name: NACOS_SERVERS value: "nacos-0.nacos.nacos.svc.cluster.local:8848" ``` **Nacos 配置文件 (nacos_cm.yaml)** ```yaml apiVersion: v1kind: ConfigMapmetadata name: nacos-cm namespace: nacosdata mysql.db.host: "mysql.nacos.svc.cluster.local" ``` **Nacos 状态fulset 配置文件 (nacos_statefulset.yaml)** ```yaml apiVersion: v1kind: ConfigMapmetadata name: nacos-cm namespace: nacosdata mysql.db.host: "mysql.nacos.svc.cluster.local" ``` **Nacos ingress 配置文件 (nacos_ingress.yaml)** ```yaml apiVersion: extensions/v1beta1kind: Ingressmetadata name: nacos namespace: nacosspec rules: - host: nacos.linux.com http: paths: - backend: serviceName: nacos servicePort: 8848 ``` **kubectl 命令** 1. 启动 MySQL 服务: ``` kubectl create namespace nacos kubectl create pod mysql-5bbd5954cc-g4k9k -n nacos ``` 2. 启动 Nacos 服务: ``` kubectl create namespace nacosdata kubectl create deployment nacos-server -n nacosdata kubectl create service nacos -n nacosdata ``` 3. 创建 Ingress 规则允许来自 `nacos.linux.com` 的所有 IP 地址访问服务。 4. 查看日志并确保服务正常运行: ``` kubectl logs -f nacos-0 -n nacos... ```

正文

https://www.cnblogs.com/zisefeizhu/p/13261243.html

 


概述

随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……

对程序配置的期望值也越来越高:配置修改后实时生效,分环境、分集群管理配置,代码安全、审核机制……

在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。

所以,配置中心应运而生。

选型思路

1、询问几个道友(多询问几个不同的群的道友,防止人云亦云)

2、百度大范围搜大致的看 选中几个使用广、文档多的

3、github对比issues、pull requests、insights、commits、branches、tags

4、语言对比、性能对比(通过CNCF对比)

询问道友

大致得出的可选组件为:apollo nacos eureka zk consul

百度大范围搜索

名词解释

CAP理论:CAP理论是分布式架构中重要理论

    • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
    • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
    • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

CAP 不可能都取,只能取其中2个

原因是

如果C是第一需求的话,那么会影响A的性能,因为要数据同步,不然请求结果会有差异,但是数据同步会消耗时间,期间可用性就会降低。

如果A是第一需求,那么只要有一个服务在,就能正常接受请求,但是对与返回结果变不能保证,原因是,在分布式部署的时候,数据一致的过程不可能想切线路那么快。

再如果,同时满足一致性和可用性,那么分区容错就很难保证了,也就是单点,也是分布式的基本核心,好了,明白这些理论,就可以在相应的场景选取服务注册与发现了。

服务注册中心解决方案

设计或者选型一个服务注册中心,首先要考虑的就是服务注册与发现机制。纵观当下各种主流的服务注册中心解决方案,大致可归为三类:

应用内:直接集成到应用中,依赖于应用自身完成服务的注册与发现

应用外:把应用当成黑盒,通过应用外的某种机制将服务注册到注册中心,最小化对应用的侵入性

DNS:将服务注册为DNS的SRV记录,严格来说,是一种特殊的应用外注册方式

Dubbo

https://baike.baidu.com/item/Dubbo/18907815?fr=aladdin

gitlab对比

nacos

apollo

consul

总结

对比项目NacosApolloEurekaZookeeperConsul
一致性 CP+AP CP+AP AP CP CP
github活跃度 活跃 不活跃 快凉 不活跃 活跃
健康检查 TCP/HTTP/MYSQL/Client Beat HTTP Client Beat Keep Alive TCP/HTTP/gRPC/Cmd
负载均衡策略 权重/metadata/Selector Ribbon Ribbon - Fabio
雪崩保护
自动注销实例 支持 支持 支持 支持 不支持
访问协议 HTTP/DNS HTTP HTTP TCP HTTP/DNS
监听支持 支持 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持 支持
跨注册中心同步 支持 支持 不支持 不支持 不支持
Dubbo集成 支持 支持 不支持 支持 不支持
k8s集成 支持 较困难 不支持 不支持 支持
语言 JAVA JAVA JAVA JAVA GO
图形界面 间接直观 细节繁琐 仅供展示

通过表格化对比,综合各方面考虑,推荐的配置中心为:Nacos,理由:1、支持k8s集成 2、操作简单 3、符合公司需求要求、4、功能支持多

部署

公司内网服务器做部署测试机

按照省钱省事原则,选择在单节点上部署mysql pod、nacos pod

按照约定每个应用在我司k8s环境中单属于一个名称空间

配置名称空间

# cat nacos.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: nacos

配置mysql服务

# cat mysql_deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: nacos
  labels:
    name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      name: mysql
  template:
    metadata:
      labels:
        name: mysql
    spec:
      containers:
        - name: mysql
          image: nacos/nacos-mysql:5.7
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "root"
            - name: MYSQL_DATABASE
              value: "nacos"
            - name: MYSQL_USER
              value: "nacos"
            - name: MYSQL_PASSWORD
              value: "nacos"
      volumes:
        - name: mysql-data
          hostPath:
            path: /data/nacos

创建mysql svc 提供nacos 连接

# cat mysql_svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: nacos
  labels:
    name: mysql
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    name: mysql

配置nacos服务

# cat nacos_statefulset.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-cm
  namespace: nacos
data:
  mysql.db.host: "mysql.nacos.svc.cluster.local" # 添加 mysql pod 访问地址
  mysql.db.name: "nacos"
  mysql.port: "3306"
  mysql.user: "nacos"
  mysql.password: "nacos"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: nacos
spec:
  selector:
    matchLabels:
      app: nacos
  serviceName: nacos
  replicas: 1
  template:
    metadata:
      labels:
        app: nacos
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      containers:
        - name: nacos
          imagePullPolicy: Always
          image: nacos/nacos-server:latest
          resources:
            requests:
              memory: "2Gi"
              cpu: "500m"
          ports:
            - containerPort: 8848
              name: client
          env:
            - name: NACOS_REPLICAS
              value: "1"
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.db.name
            - name: MYSQL_SERVICE_HOST # 添加 mysql 访问地址的环境变量
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.db.host
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.port
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.user
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.password
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
            - name: NACOS_SERVERS
              value: "nacos-0.nacos.nacos.svc.cluster.local:8848"

创建nacos svc 代理pod

# cat nacos_svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nacos
  namespace: nacos
  labels:
    app: nacos
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
    - port: 8848
      name: server
      targetPort: 8848
  clusterIP: None
  selector:
    app: nacos

创建Ingress暴露服务,供内部访问

# cat nacos_ingress.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nacos
  namespace: nacos
spec:
  rules:
    - host: nacos.linux.com
      http:
        paths:
          - backend:
              serviceName: nacos
              servicePort: 8848

查看nacos 配置中心有关应用状态

# kubectl get pods,svc,ingress -n nacos
NAME                         READY   STATUS    RESTARTS   AGE
pod/mysql-5bbd5954cc-g4k9k   1/1     Running   0          70m
pod/nacos-0                  1/1     Running   0          29m

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/mysql   ClusterIP   10.43.105.239   <none>        3306/TCP   54m
service/nacos   ClusterIP   None            <none>        8848/TCP   38m

NAME                       HOSTS             ADDRESS      PORTS   AGE
ingress.extensions/nacos   nacos.linux.com   10.17.1.44   80      37m

似乎是没得问题

本地hosts解析

访问

nacos.linux.com

emmmmmm 404 路径错误, 怎么搞

查看日志

# kubectl logs -f nacos-0 -n nacos
......
Console: http://nacos-0.nacos.nacos.svc.cluster.local:8848/nacos/index.html
......

有了

访问:nacos.linux.com/nacos

然后就...... 随便点点看看熟悉熟悉吧

过手如登山,一步一重天

与[转帖]配置中心预研相似的内容:

[转帖]配置中心预研

https://www.cnblogs.com/zisefeizhu/p/13261243.html 概述 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址…… 对程序配置的期望值也越来越高:配置修改后实时生效,分环境、分集群管理配置,代码安全、审核机制…… 在这

[转帖]linux 调优篇 :硬件调优(BIOS配置)* 壹

https://blog.csdn.net/tony_vip?type=blog 一. 设置内存刷新频率为Auto二. 开启NUMA三. 设置Stream Write Mode四. 开启CPU预取配置五. 开启SRIOV六. 开启SMMU 通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能

【转帖】linux 调优篇 :硬件调优(BIOS配置)* 壹

一. 设置内存刷新频率为Auto二. 开启NUMA三. 设置Stream Write Mode四. 开启CPU预取配置五. 开启SRIOV六. 开启SMMU 通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能。表1列出了TaiShan服务器和性能相关的BIOS推荐配置项。 表1 BIOS性

[转帖]MSE注册配置中心和自建注册配置中心对比

https://help.aliyun.com/document_detail/469154.html?spm=a2c4g.11186623.0.0.1a2779a6aPjzic 本文从运维、性能、高可用、监控告警等维度进行分析,介绍MSE注册配置中心和自建注册配置中心的差异。 MSE Nacos和

[转帖]Spring Cloud Alibaba Nacos 注册中心使用教程

一. 什么是Nacos Nacos是一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台,集注册中心+配置中心+服务管理于一身,基本特性如下: 服务发现和服务健康监测; 动态配置服务; 动态 DNS 服务; 服务及其元数据管理

[转帖]SpringBoot配置SSL 坑点总结【密码验证失败、连接不安全】

文章目录 前言1.证书绑定问题2.证书和密码不匹配3.yaml配置文件问题3.1 解密类型和证书类型是相关的3.2 配置文件参数混淆 后记 前言 在SpringBoot服务中配置ssl,无非就是下载证书设置一下配置文件的问题,这里主要记录我在配置的过程中遇到的坑点。 如果是新手上道的话建议结合其他的

[转帖]解读内核 sysctl 配置中 panic、oops 相关项目

写在前面 本篇文章的内容主要来自内核源码树 Documentation/admin-guide/sysctl/kernel.rst文件。 softlockup vs hardlockup softlockup 是一种触发系统在内核态中一直循环超过 20 秒导致其它任务没有机会得到运行的 BUG。 h

[转帖]配置logback上报日志到Skywalking

https://zhuanlan.zhihu.com/p/506119895 配置logback上报日志到Skywalking 配置logback上报日志到skywalking需要引入toolkit依赖项,如在maven中添加: org.apache.sk

[转帖]配置logback上报日志到Skywalking

https://zhuanlan.zhihu.com/p/506119895 配置logback上报日志到Skywalking 配置logback上报日志到skywalking需要引入toolkit依赖项,如在maven中添加: org.apache.sk

[转帖]使用 Grafana 监控 TiDB 的最佳实践

https://docs.pingcap.com/zh/tidb/stable/grafana-monitor-best-practices 使用 TiUP 部署 TiDB 集群时,如果在拓扑配置中添加了 Grafana 和 Prometheus,会部署一套 Grafana + Prometheus