Redis 集群模式笔记
注意: 因为测试,我一个节点部署多个服务,生产环境建议分开不然会报 are on same IP,导致主从切换失败
1 使用场景
哨兵模式已经能够实现高可用,实践中通常是分布式服务,某一个点的分类数据放在指定的一个哨兵主从,通常也足够,但如果某个分类数据量实在过于庞大,哨兵+主从这种模式,相当于每个节点都是一个全量的数据副本,从高可扩方面来说,它这种模式不是很方便,对资源也是很大的浪费。当哨兵+主从遇到资源瓶颈,或者对高可扩有一定要求的时候,集群模式便能解决这个问题
高可用原理
Redis 集群模式是没有中心节点的,它至少需要 3 个 master 节点,每个 master 节点至少一个 slave(默认读),也就是至少 6 个节点才能组建集群模式,已经内置了数据分片和故障转移。
数据分片是 16384 个虚拟槽位分散到不同的 master 节点,设置 key 的时候,服务节点通过 key 的 hashcode % 16384,转发存放到不同的节点的对应分片槽位上。当查询请求到一个节点时,服务节点根据 key 检查槽位是否在当前节点,若存在则响应数据,若不存在则 m ...
Redis 杂七杂八
基本概念 Redis 是基于内存的数据库,读写内存数据是单线程完成的,官方提供测试数据,单线程支持 10w+ QPS,其主要原因以下几点:
单线程避免了多线程切换、竞争阻塞、锁,一个指令通常 1-4 微秒,单核 CPU 足够处理数十万请求
完全基于内存读写,数据存放于内存,查找和操作效率高于磁盘
多路 I/O 复用模型,采用 epoll 实现,一定程度上提高网络 I/O 吞吐性能
6.0 后支持多线程 I/O 模型,提高网络 I/O 瓶颈,内存数据操作仍然是单线程
多路 I/O 复用,多路复用机制是指在一个线程上处理多个网络 I/O 流,Redis 网络框架调用 epoll 机制,让 Linux 内核监听无数个套接字(Socket),每个监听套接字发生的不同事件,都进入事件队列,Redis 单线程对该事件队列进行处理并调相应的事件回调函数,Redis 本身无需一直轮询是否有连接请求。
1 单线程 单线程读写内存的缺点是无法发挥多核心的性能,可以在多核部署多个 Redis 实例避免浪费,或者利用容器机制,一个 Red ...
记录一次pod访问不了外部服务
一, pod 访问外界服务时断时续1 现象
环境:
k8s calico 网络插件 BGP 模式
redis 单节点
问题:
部分 pod 与 redis 无法通信,telnet 端口不通,有这几种情况
b pod 一开始可以通 redis,我删了重构下,可能在 node1,也可能在 node2,但是再 Telnet redis 就不通了
d pod 一直访问不了 redis,我删了重构下,可能在 node1,也可能在 node2,但是再 Telnet redis 就通了
2 排查2.1 路由2.1.1 查看无法通信 pod 信息123kubectl get pod -n test -owideNAME READY STATUS RESTARTS AGE IP NODEservice-21189-54f674b658-ksj2b 1/1 Running 1 13h 172.18.239.103 node1
2.1.2 到对 ...
Tekton进阶使用
上篇文章简单介绍了基础操作,但是还有些功能没提到参考
这篇文章实现了:
如何构建其他语言程序
挂载 configmap,不覆盖其他目录
git 触发部署
1 构建 npm 项目
这里我用自己博客为例,就不开源了
1.1 下载代码git clone https://git.ccops.cc/Kubernetes/tekton.git
123456789101112131415161718192021222324252627282930313233cat tekton/cicd/build-push-image-task.yamlapiVersion: tekton.dev/v1beta1kind: Taskmetadata: name: build-push-imagespec: params: - name: pathToDockerfile description: The path to the dockerfile to build (relative to the context) default: Dockerfile - nam ...
Kubernetes证书管理
参考文档
后面 traefik 自己集成了证书管理,参考文档后面补充
1 准备工作
先安装对应 webhook,这里我使用腾讯的 DNSPod,其它的从这里找
git clone https://github.com/qqshfox/cert-manager-webhook-dnspod.git
1.1 获取 apiID 与 apiToken
文档参考
访问这里创建并记录
2 部署 cert-manager
12345678910helm repo add jetstack https://charts.jetstack.iohelm repo updatehelm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ # 命名空间名称 --create-namespace \ # 自动创建命名空间 --version v1.7.2 \ # 版本 --set ingressShim.defaultIssuerName=letsencrypt-prod \ # 下面三个参数是自动生成 ...
Tekton入门
Jenkins 不使用共享库的话 Pipeline 维护太困难,有学共享库的时间不如研究点新技术,早就想试试 tekton 了
1 介绍
其中Task、TaskRun、Pipeline、PipelineRun、PipelineResource、Condition作为其核心 CRD,这里主要介绍它们。
Task:定义构建任务,它由一系列有序 steps 构成。每个 step 可以定义输入和输出,且可以将上一个 step 的输出作为下一个 step 的输入。每个 step 都会由一个 container 来执行。
TaskRun:Task 用于定义具体要做的事情,并不会真正的运行,而 TaskRun 就是真正的执行者,并且会提供执行所需需要的参数,一个 TaskRun 就是一个 Pod。
Pipeline:顾名思义就是流水线,它由一系列 Tasks 组成。就像 Task 中的 step 一样,上一个 Task 的输出可以作为下一个 Task 的输入。
PipelineRun:Pipeline 的实际执行,创建后会创建 Pod 来执行 Task,一个 PipelineRun 中有多个 ...
如何在Kubernetes里使用Minio存储
1 部署驱动
minio 部署参考: 使用minion当blog图床
下载此目录所有文件
可以参考官网的,需要自己改镜像
12345678kubectl apply -f . -n miniokubectl get pod -n minioNAME READY STATUS RESTARTS AGEcsi-attacher-s3-0 1/1 Running 0 16hcsi-provisioner-s3-0 2/2 Running 0 16hcsi-s3-2dfnn 2/2 Running 0 16hcsi-s3-nn5pp 2/2 Running 0 16hcsi-s3-q9pln 2/2 Running 0 16h
2 Storageclass创建 Secret
1234567891011cat secret ...
如何在Kubernetes里使用NFS存储
nfs 无法空间限额,相当于有个 provisioner 远程帮忙挂载
1 安装 nfs 客户端
最好每个节点都安装
yum -y install nfs-utils
1.1 测试123showmount -e 10.1.1.1Export list for 10.1.1.1:/data/nfs_data *
2 部署驱动
下载此目录所有文件
2.1 修改配置123456789101112131415161718192021222324252627282930313233343536373839cat deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: nfs-client-provisioner labels: app: nfs-client-provisioner namespace: nfsspec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: nfs-client- ...
如何在Kubernetes里使用本地存储
1 准备工作1.1 创建虚拟化磁盘
别批量复制执行,这里要一步一步操作
123456dd if=/dev/zero of=local_data.img bs=1M count=4096du -h local_data.imgmkfs.ext4 local_data.imgmkdir /data/local_datamount -o loop -t ext4 local_data.img /data/local_data/df -h
2 静态供应器2.1 查看刚才创建的虚拟磁盘12lsblk |grep local_dataloop4 7:4 0 4G 0 loop /data/local_data
2.2 配置静态供应器的发现目录12mkdir /mnt/disksln -s /dev/loop4 /mnt/disks
2.3 部署静态供应器12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
Glusterfs入门
1 介绍1.1 GlusterFS 数据访问流程
1.客户端通过 glusterfs 的 mount point 来读写数据。
2.用户的这个操作被递交给本地 linux 系统的 VFS 来处理。
3.VFS 将数据递交给 FUSE 内核文件系统,在启动 glusterfs 客户端以前,需要向系统注册一个实际的文件系统 FUSE,如图所示,该文件系统与 XFS 在同一个层次上面,XFS 是对实际的磁片进行处理,而 fuse 文件系统则是将数据通过/dev/fuse 这个设备文件递交给了 glusterfs client 端。所以,我们可以将 fuse 文件系统理解为一个代理。
4.数据被 fuse 递交给 Glusterfs client 后,client 对数据进行根据配置文件进行的一系列处理
5.在 glusterfsclient 的处理末端,通过网路将数据递交给 Glusterfs Server,并且将数据写入到服务器所控制的存储设备上
2 安装2.1 配置 yum 源并安装12345678cat /etc/yum.repos.d/glusterfs.re ...