2022-04-02 21:34:55
摘要:一、MongoDB核心概念
1. 定位与优势
目标:处理海量数据(名称源自humongous),支持高可用、水平扩展。
数据模型:
JSON文档结构:天然贴合面向对象思想,支持嵌套对象和数组。
动态模式:使用BSON(JSON的二进制扩展)存储,支持日期、二进制等扩展类型。
核心优势:
易用性:类JSON语法降低学习成本。
高性能:内存映射引擎、写优化设计。
高可靠性:副本集自动故障转移。
高扩展性:原生分布式架构(分片集群)。
2. SQL vs MongoDB概念对比
关键差异:MongoDB属于半结构化数据模型,无固定表结构,不支持事务级JOIN。
二、基础操作实战
1. 集合与文档操作
// 创建/切换数据库
use sample
// 插入文档
db.persons.insertOne({ name: 张三, age: 22 })
db.persons.insertMany([...])
// 查询文档
db.movies.find( { year : 1975 } ) //单条件查询
db.movies.find( { year : 1989, title : Batman } ) //多条件and查询
db.movies.find( { $and : [ {title : Batman}, { category : action }] } ) // and的另一种形式
db.movies.find( { $or: [{year : 1989}, {title : Batman}] } ) //多条件or查询
db.movies.find( { title : /^B/} ) //按正则表达式查找
// 更新与删除
db.persons.updateMany({ age: 22 }, { $set: { status: active }})
db.persons.deleteMany({ age: { $lt: 18 }})
db.runCommand({ drop: persons }) // 删除集合
2. 查询条件对照表
| SQL | MQL |
| ----……
阅读全文
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.……
阅读全文
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列表:有序的……
阅读全文
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方式……
阅读全文
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……
阅读全文
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=……
阅读全文
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
阅读全文
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: ……
阅读全文
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:
#……
阅读全文
2021-03-14 15:04:51
摘要:一、资源准备
ElasticSearch 安装有最低安装要求,如果执行 Helm 安装命令后 Pod 无法正常启动,请检查是否符合最低要求的配置。
1、资源要求
ElasticSearch节点
CPU最小要求
内存最小要求
Kubernetes master
核心数 2
内存 2Gi
Kubernetes data
核心数 1
内存 2Gi
Kubernetes client
核心数 1
内存 2Gi
2、ElasticSearch 集群环境
集群名称
类型
副本
存储
网络模式
描述
elasticsearch
Master
3
5Gi
ClusterIP
主节节点,用于控制 ES 集群
elasticsearch
Data
3
50Gi
ClusterIP
数据节点,用于存储 ES 数据
elasticsearch
Client
2
无
NodePort(30200)
负责处理用户请求,实现请求转发、负载均衡
es-master 搭建一个 elasticsearch 至少需要 3 个 Pod 以防止集群脑裂。
es-data 数据节点至少需要 2 个 Pod 。数据节点将保留数据、接收查询和索引请求。
es-client 做为协调 elasticsearch 集群。至少需要 2 个。用于集群连接,并充当 HTTP 代理。如果不使用 es-clinet 那么 es-data 充当协调,尽量避免在较大的集群上这样做。
3、Kibana 环境信息
应用名称
副本数目
存储大小
网络模式
描述
Kibana
1
无
NodePort(30601)
用于展示 ElasticSearch 数据的应用
二、提前下载镜像
提前将要部署的应用的镜像下载,避免安装时因为镜像下载过慢而导致安装失败。这里我们主要用到的两个镜像。考虑与fluentd兼容,建议使用7.6.0
docker pull elasticsearch:7.6.0
docker pull kibana:7.6.0
三、创建集群证书
ElasticSearch 7.x 版本默认安装了x-pack插件,并且部分功能免费,这里我们配置安全证书文件。
1、生成证书文件
# 运行容器生成证书
docker run --name ……
阅读全文