Spiga

Redis集群部署文档

2022-03-25 15:08:57

摘要:概述 本指南将引导你完成以下步骤: 创建项目文件夹和必要的配置文件。 编写 docker-compose.yml 文件来定义一主两从三个 Redis 服务。 启动并验证 Redis 集群。 测试主从数据同步。 第一步:创建项目目录和文件 首先,在你电脑的任意位置(例如 D:\ 盘)创建一个新的文件夹,用来存放本次项目的所有文件。我们将其命名为 redis-cluster。 进入 redis-cluster 文件夹,在内部创建以下两个文件: docker-compose.yml (用于编排 Docker 容器) redis.conf (Redis 实例的配置文件) 创建完成后,你的文件夹结构应该如下所示: redis-cluster/ ├── docker-compose.yml └── redis.conf 第二步:编写 docker-compose.yml 文件 用文本编辑器打开 docker-compose.yml 文件,并将以下内容复制进去。 version: '3.8' services: # 主节点服务 redis-master: image: redis container_name: redis-master restart: always ports: - 6379:6379 volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf # 挂载配置文件 command: redis-server /usr/local/etc/redis/redis.conf # 使用该配置启动 networks: - redis-net # 第一个从节点服务 redis-slave1: image: redis container_name: redis-slave1 restart: always ports: - 6380:6379 volumes: - ./redis.conf:/usr/local/etc/redis/redis.…… 阅读全文

Redis知识点总结

2022-03-24 13:16:49

摘要:一、知识点汇总 基础篇 功能特点介绍 系统架构 线程模型 单线程模式 多IO线程模式 入门篇 服务端与客户端 数据类型介绍和基础用法 在.net中使用Redis 持久化篇 AOF日志 AOF配置与日志文件 回写策略 重写机制 RDB快照 RDB配置 快走频率选择 混合持久化 高可靠篇 主从集群模式 设置主从同步 主从同步的三个阶段 主从级联模式 主从集群故障问题 哨兵模式 哨兵机制基本流程 主观下线与客观下线 选主策略 缓存篇 基础概念 缓存命中 缓存缺失 旁路缓存 缓存淘汰策略 随机策略 TTL过期策略 LRU算法策略 LFU算法策略 缓存异常 缓存不一致 缓存雪崩 缓存击穿 缓存穿透 缓存污染 二、基础篇 Redie特点 高性能:极低的延迟和极高的吞吐量 数据结构多样性:value支持丰富的数据结构 持久化:数据可以保存在硬盘 高可用性:主从复制、哨兵机制 发布订阅: 可扩展性:数据分片 系统架构 线程模型 Redis采用单线程模型,每秒10万级别处理能力 避免多线程的并非控制问题,主要是共享资源的访问,互斥锁(粗颗粒) 多路复用机制(网络IO) IO多路复制机制:一个线程处理多个IO流 允许系统内核同时存在多个套接字(监听、已连接) 系统内核:事件回调机制 医院:病人(请求)----分诊台(内核监听)----转交给医生 一个医生(单线程) Redis 6.0线程模型----加入了多IO线程模式----主要用于网络请求(网络IO,底层太快、单线程跟不上) 多线程默认关闭 config set io-threads-do-reads yes config set io-threads 4 (cup核心数-2) 三、入门篇 基础数据类型(5种) String字符串:任何形式的字节数据、二进制数据、单个数据最大512M Hash哈希:字典、Map、专门用来存储对象:字段/值 对 List列表:有序的…… 阅读全文

sqlserver索引优化

2021-11-14 11:12:25

摘要:一、基础概念 1. 聚集索引(Clustered Index) 结构特点 数据存储: 聚集索引决定了表中数据的物理存储顺序。 表中的每一行数据都会按照聚集索引的键值进行排序存储。 叶节点: 聚集索引的叶节点包含实际的数据行。 叶节点的数据行是按照聚集索引的键值连续存储的。 唯一性: 每个表只能有一个聚集索引。 聚集索引的键值必须是唯一的,除非在创建时允许重复键值(通过 ALLOW_ROW_LOCKS 和 ALLOW_PAGE_LOCKS 选项)。 存储效率: 由于数据按照键值连续存储,聚集索引在范围查询和排序操作中非常高效。 如果表中有大量数据,聚集索引的维护成本相对较高,因为插入、删除和更新操作需要重新排列数据。 使用场景 范围查询: 适用于需要频繁进行范围查询(如 BETWEEN、、)的表。 排序和分组: 适用于需要频繁进行排序和分组操作的列。 主键: 通常主键会创建为聚集索引,因为主键需要唯一标识每一行数据,并且主键列通常用于范围查询和排序操作。 数据访问模式: 适用于访问模式以顺序访问数据为主的场景。 2. 非聚集索引(Non-Clustered Index) 结构特点 数据存储: 非聚集索引的键值存储的是指向实际数据行的指针。 表中的数据行可以按照插入顺序或其他顺序存储,但非聚集索引提供了一种快速查找数据的方式。 叶节点: 非聚集索引的叶节点包含指向实际数据行的指针。 叶节点的数据行指针是按照非聚集索引的键值排序的。 唯一性: 每个表可以有多个非聚集索引。 非聚集索引的键值可以是唯一的,也可以不唯一。 存储效率: 非聚集索引的维护成本相对较低,因为插入、删除和更新操作不会重新排列实际数据行。 非聚集索引可以提高特定列的查询性能,但对整个表的数据存储没有影响。 使用场景 等值查询: 适用于需要频繁进行等值查询(如 =、IN)的列。 范围查询: 虽然非聚集索引也可以用于范围查询,但效率可能不如聚集索引,尤其是在范围较大时。 排序和分组: 适用于需要频繁进行排序和分组操作的列…… 阅读全文

规范设计:Commit规范

2021-06-05 13:18:50

摘要:一个好的 Commit Message 至关重要: 可以使自己或者其他开发人员能够清晰地知道每个 commit 的变更内容,方便快速浏览变更历史,比如可以直接略过文档类型或者格式化类型的代码变更。 可以基于这些 Commit Message 进行过滤查找,比如只查找某个版本新增的功能:git log --oneline --grep ^feat|^fix|^perf。 可以基于规范化的 Commit Message 生成 Change Log。 可以依据某些类型的 Commit Message 触发构建或者发布流程,比如当 type 类型为 feat、fix 时我们才触发 CI 流程。 确定语义化版本的版本号。比如 fix 类型可以映射为 PATCH 版本,feat 类型可以映射为 MINOR 版本。带有 BREAKING CHANGE 的 commit,可以映射为 MAJOR 版本。 Angular 规范在功能上能够满足开发者 commit 需求,在格式上清晰易读,目前也是用得最多的。 Angular 规范其实是一种语义化的提交规范(Semantic Commit Messages),所谓语义化的提交规范包含以下内容: Commit Message 是语义化的:Commit Message 都会被归为一个有意义的类型,用来说明本次 commit 的类型。 Commit Message 是规范化的:Commit Message 遵循预先定义好的规范,比如 Commit Message 格式固定、都属于某个类型,这些规范不仅可被开发者识别也可以被工具识别。 在 Angular 规范中,Commit Message 包含三个部分,分别是 Header、Body 和 Footer,格式如下: type[optional scope]: description // 空行 [optional body] // 空行 [optional footer(s)] 其中,Header 是必需的,Body 和 Footer 可以省略。在以上规范中,必须用括号 ()括起来, [] 后必须紧跟冒号 ,冒号后必须紧跟空格,2 个空行也是必需的。 在实际开发中,为了使 Commit Message 在 GitHub 或者其他 Git 工具上更加易读,我们往往会限制每行 mess…… 阅读全文

k8s生产部署(十二):jenkins搭建

2021-04-10 10:53:48

摘要:1、编辑yaml文件 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins-claim namespace: qjy-cicd annotations: volume.beta.kubernetes.io/storage-class: nfs-storage spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi # jenkins 对应的 RBAC --- apiVersion: v1 kind: ServiceAccount metadata: name: jenkins-admin namespace: qjy-cicd labels: name: jenkins --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: jenkins-admin labels: name: jenkins subjects: - kind: ServiceAccount name: jenkins-admin namespace: qjy-cicd roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io # jenkins 对应的 svc --- apiVersion: v1 kind: Service metadata: name: jenkins namespace: qjy-cicd labels: app: jenkins spec: type: NodePort ports: - name: http port: 8080 #服务端口 targetPort: 8080 nodePort: 32001 #NodePort方式…… 阅读全文

k8s生产部署(十一):netcore应用部署

2021-04-02 19:15:08

摘要:1、打包镜像 docker build -t zq-apigateway:1.0.0 ./zq-apigateway/. 2、Helm Create 在master节点上创建一个文件夹,如deploy cd deploy helm create zq-apigateway 将生成的文件下载到本地进行编辑 3、编辑deployment.yaml spec/template/spec/containers,imagePullPolicy后 containers: - name: {{ .Chart.Name }} securityContext: {{- toYaml .Values.securityContext | nindent 12 }} image: {{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }} imagePullPolicy: {{ .Values.image.pullPolicy }} env: - name: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES valueFrom: configMapKeyRef: name: zq-env-config key: skywalking_hostingStartup - name: SkyWalking__Transport__gRPC__Servers valueFrom: configMapKeyRef: name: zq-env-config key: skywalking_servers - name: exceptionless__ServerUrl valueF…… 阅读全文

k8s生产部署(十):harbor搭建私有仓库

2021-03-27 17:09:31

摘要:截止到目前生产环境上要使用到的基础应用基本已经搭建完成,但似乎还缺少一点什么,对!就是docker镜像的仓库,如果没有私仓,我们需要把镜像手动推送各个node节点,这样太不方便了。 我们使用harbor来搭建: 一、安装 1. 确定30002,30003,30004端口没有被占用 2. helm repo add harbor https://helm.goharbor.io 3. helm search repo harbor 4. helm pull harbor/harbor --version=1.6.1 5. tar -xf harbor-1.6.1.tgz 6. 改values里面storageClass的值nfs-storage(有3个地方) 7. 改ingress ingress: hosts: core: harbor.qhfinance.com notary: notary.qhfinance.com 8. 改harborAdminPassword: xxxxx #设置密码 9. helm install harbor -f harbor-values.yaml --namespace qjy-public harbor/harbor --version 1.6.1 10. 配置host,随便一个节点的ip地址 vim /etc/hosts 172.16.0.3 harbor.qhfinance.com 二、访问 访问地址http://harbor.qhfinance.com/,默认用户名/密码为:admin/xxxxx 默认harbor只有一个公共的library项目,该项目的权限和docker hub一样不需要认证就可以拉取镜像,我们把它改成私有,也可以重新创建一个私有项目。 三、配置证书 因为我们部署的Harbour是有自带凭证(CA),所以需要再Docker Client加入凭证,这样Docker Client才有办法存取到私有的注册表。 首先,在Kubernetes Master使用以下指令取得凭证 kubectl get secret/harbor-harbor-ingress -n qjy-cicd -o jsonpath=…… 阅读全文

k8s生产部署(九):skywalking搭建

2021-03-25 15:47:21

摘要:1、下载Charts包 git clone https://github.com/apache/skywalking-kubernetes cd skywalking-kubernetes/chart helm repo add elastic https://helm.elastic.co helm dep up skywalking 2、修改配置文件 skywalking/values-my-es.yaml oap: image: tag: 8.4.0-es7 # Set the right tag according to the existing Elasticsearch version storageType: elasticsearch7 ui: image: tag: 8.4.0 service: type: NodePort externalPort: 80 internalPort: 8080 nodePort: 30008 elasticsearch: enabled: false config: # For users of an existing elasticsearch cluster,takes effect when `elasticsearch.enabled` is false host: elasticsearch-client.qjy-efk.svc.cluster.local port: http: 9200 user: elastic # [optional] password: xxxxx # [optional] 3、执行 kubectl create namespace qjy-apm helm install skywalking skywalking --namespace qjy-apm -f ./skywalking/values-my-es.yaml 阅读全文

k8s生产部署(八):prometheus搭建

2021-03-20 19:51:21

摘要:我们使用prometheus-operator来搭建 1、查看可使用的版本 helm repo add stable http://mirror.azure.cn/kubernetes/charts/ helm repo update helm repo list helm search repo prometheus-operator --versions 2、拉去指定版本的配置 helm pull stable/prometheus-operator --version=9.3.2 tar -xf stable-prometheus-operator-9.3.2.tgz 3、修改配置 配置内容比较多,要修改的信息如下: 分节编辑 1. alertmanager enabled: true ingress: enabled: true hosts: - alert.qhfinance.com 2. grafana enabled: true adminPassword: admin ingress: enabled: true hosts: - grafana.qhfinance.com 3. prometheus enabled: true ingress: enabled: true hosts: - pus.qhfinance.com additionalServiceMonitors: #配置自己的监控服务 - name: hc namespaceSelector: any: true selector: matchLabels: qjy: app-metrics #凡是打上了qjy的标签都会监控 endpoints: - path: /metrics port: http - name: namespaceSelector: any: true selector: matchLabels: qjy: …… 阅读全文

k8s生产部署(七):EFK集群搭建2

2021-03-15 15:14:54

摘要:上一篇我们搭建了Elasticsearch和Kibana,本文重点介绍fluentd 1、查看可使用的版本 helm repo add stable http://mirror.azure.cn/kubernetes/charts/ helm repo update helm repo list helm search repo fluentd-elasticsearch --versions 2、拉去指定版本的配置 helm pull stable/fluentd-elasticsearch --version=2.0.7 tar -xf fluentd-elasticsearch-2.0.7.tgz 3、修改配置 注意: containers.input.conf下:path /var/log/containers/qjy-*.log 中 qjy-表示只手机容器名称为qjy-开头的日志 elasticsearch的密码在output.conf标签下配置user和password cat es-fluentd-values.yaml-EOF image: repository: registry.cn-beijing.aliyuncs.com/k8s-mqm/fluentd-elasticsearch ## Specify an imagePullPolicy (Required) ## It's recommended to change this to 'Always' if the image tag is 'latest' ## ref: http://kubernetes.io/docs/user-guide/images/#updating-images tag: v2.1.0 #v2.3.2 pullPolicy: IfNotPresent ## Configure resource requests and limits ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ ## resources: {} # limits: # cpu: 100m # memory: 500Mi # requests: #…… 阅读全文