- 博客(66)
- 资源 (13)
- 问答 (1)
- 收藏
- 关注
原创 Golang append有趣的例子
例子1参考:https://stackoverflow.com/questions/20195296/golang-append-an-item-to-a-slicepackage mainimport "fmt"func main(){ a:=make([]int,1,2) a[0]=0 fmt.Println("before: ", a,len(a),cap(a)) T(a) fmt.Println("after: ",a,len(a),cap(a)) // place
2022-02-23 01:28:55 294
原创 docker端口映射无法访问的解决
表现systemctl status docker,显示正常,可以pull,push,build宿主机访问外网没问题,可以连上ubuntu的阿里的源运行容器映射的端口在本机无法访问,用curl 127.0.0.1:端口,显示:curl: (56) Recv failure: Connection reset by peerdocker build的时候,使用apt-get install xx,无法访问,哪怕镜像源是国内的阿里之类的.在改为 docker build --network ho
2021-08-24 23:39:04 4652 2
原创 K8s的LivenessProbe 和ReadinessProbe的启动顺序问题
突然想到这个问题,幸好K8s的issue上有相关问题:Order of readiness probe and liveness probeLivenessProbe should start after ReadinessProbe Succeeded if ReadinessProbe is specifiedissue 27114LivenessProbe should start after ReadinessProbe Succeeded if ReadinessProbe is
2021-07-13 01:34:40 1729
原创 ceph csi的安装使用
文章目录首要条件参考创建pool初始化pool(init pool)csi用户在Ceph上创建用于CSI的用户在K8s集群生成secret生成Ceph-CSI的ConfigMap获取Ceph信息生成ConfigMap配置pluginRBACprovisioner and node plugins创建sc测试创建pvc创建pod输出首要条件你得先有一个Ceph存储,单节点安装Ceph参考ceph官方文档创建poolceph osd pool create kubernetes初始化pool(i
2021-06-17 23:02:13 1627 1
原创 rook-ceph安装
最大的好处,简化了Ceph的安装,其实用最新的Cephadm安装也不是很麻烦需要有K8s环境github 地址rook支持多种存储,不过截至文章发布日,只有Ceph是处于stable的安装文档地址安装在K8s的节点上的存储的要求: Raw devices (no partitions or formatted filesystems) Raw partitions (no formatted filesystem) PVs available from a sto..
2021-06-07 14:58:52 380
原创 用cephadm单节点安装ceph
官方文档DEPLOYING A NEW CEPH CLUSTER-截至文章发布时的最新版DEPLOYING A NEW CEPH CLUSTER-octopus版安装虚拟机2块磁盘,第一块装系统,第二块是给ceph用的对第二块磁盘,啥也不要干 A storage device is considered available if all of the following conditions are metThe device must have no partitions.The dev
2021-06-06 22:46:13 1266
原创 排序算法
文章目录十大排序算法时间复杂度O(n2)冒泡排序基本版优化版本1优化版本2优化版本3(鸡尾酒排序)时间复杂度O(nlgn)快速排序堆排序十大排序算法参见 十大经典排序算法(动图演示)稳定与不稳定如果值相同的元素在排序后仍然保持前排序前的顺序,则这样的算法是稳定排序,反之是不稳定排序时间复杂度O(n2)冒泡排序排序思想: 把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置;当一个元素小于或等于右侧相邻的元素时,位置不变是否稳定: 稳定基本版package ma
2021-01-29 16:44:18 131
原创 深入理解linux内核读书笔记(一)
第一章, 简介1.4 Basic Operating System ConceptsUnix-like操作系统隐藏了硬件细节,如果程序需要和硬件打交道,就必须向操作系统发出请求Unix与CPU的privileged mode和nonprivileged mode对应的是:内核模式(Kernel Mode) 和 用户模式(User Mode)Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3。Windows只使用其中的两个
2021-01-20 22:45:05 196
原创 Golang实现线段切割法抢红包
算法参见 抢红包算法代码注意,我这里用了k8s的rand.IntnRange,也可以用内置的math/rand,把我代码里的相关注释取消就可以了package mainimport ( "fmt" "k8s.io/apimachinery/pkg/util/rand" //"math/rand" "sort")func main() { fmt.Println(hongbao(9, 6))}func hongbao(money, count int) []int
2021-01-16 13:40:23 333
原创 树的介绍1
树和二叉树树树和图都是典型的非线性结构定义:树是n节点的有限集。树是n(n=>0)个节点的有限集。 n=0时成为空树。在任意一颗非空树中:(1)有且仅有一个称为根的节点;(2)当n>0时,其余节点可分为m(m>0)个互不相交的有限集T1、T2、T3、Tm,其中每个节点又是一棵树,并且称为根的子树。叶子节点(leaf): 没有孩子的节点遍历抽象方式深度优先(DFS), todo: golang代码前序遍历: 根->左子树->右子树, leetc
2021-01-14 13:46:57 125
原创 golang,函数参数传递的sync.Mutex不是指针会怎么样
代码package mainimport ( "fmt" "sync")var a = 1func main() { lock := sync.Mutex{} wg := &sync.WaitGroup{} wg.Add(2) go t(lock,wg) go t(lock,wg) wg.Wait() fmt.Println(a)}func t(lock sync.Mutex, wg *sync.WaitGroup){ defer wg.Done() lock
2021-01-09 02:09:34 850
原创 golang多goroutine读取map的不同key是否会有data race
代码package mainimport ( "fmt" "sync")func main() { m := make(map[string]int, 1) const cyclesCount = 10 var wg sync.WaitGroup wg.Add(2) go func() { defer wg.Done() for i := 0; i < cyclesCount; i++ { m[`foo1`]++ } }() go func() { d
2021-01-08 21:12:30 508
原创 kafka不通过consumer group来消费某个topic
这是偶然发现的不使用consumer group来消费应用程序自动水平扩展的时候(比如k8s下某个应用程序的pod负载大的时候), 每个节点都能消费指定topic的所有partition的数据下面这段go代码其实脱胎于sarama的官方例子, 消费最新的数据, 因为一个应用程序节点拉起来的时候也只需要消费最新的数据package mainimport ( "fmt" "log" "sync" "time")import "github.com/Shopify/sarama"//va.
2021-01-03 15:37:31 1440
原创 mongodb分页的问题
问题官方文档就是在分页的时候,我们一般用.skip(1).limit(20)这种方式, 问题是skip里的参数太大的时候, 会非常慢,官方文档对此有解释:Range queries can use indexes to avoid scanning unwanted documents, typically yielding better performance as the offset grows compared to using skip() for pagination.stackove
2020-12-28 13:56:13 410
原创 Golang的类型
type关键字带来的别名和新类型https://www.flysnow.org/2017/08/26/go-1-9-type-alias.html命名类型和非命名类型(named and unnamed types)https://stackoverflow.com/questions/19334542/why-can-i-type-alias-functions-and-use-them-without-casting...
2020-12-28 13:45:06 112
原创 不要把敏感信息写在k8s的env上
原因:执行k exec podName env就会把敏感信息打印在屏幕上,如果你的env里有数据库相关信息就全部暴露了
2020-12-24 23:21:53 407
原创 利用手头工具生成base64
在线生成base64这种有可能被网站记录下你的信息,因此利用手头工具生成会更好chrome在devtools的console里执行编码: btoa("xxxx")解码: atob("xxxx")如果有UTF8的字符:为什么 escape 可以使 btoa 正确处理 UTF-8 编码的字符串?cmder不要用echo,用printf编码printf '%s' 'hello,world'|base64aGVsbG8sd29ybGQ=解码printf '%s' .
2020-12-09 09:56:14 151
原创 tinode私聊
大致的流程subsriptions表useridtopic803471998343712768usrVvZ8n1ZhmwA803470600923254784usrZDCcjjf90wcusers表803470600923254784向803471998343712768发消息2020/11/24 16:18:08 in: '{"note":{"topic":"usrVvZ8n1ZhmwA","what":"kp"}}' sid='AAcFoJm8Yys'
2020-12-02 18:12:05 390
原创 tinode开发环境搭建
tinode支持websocket, long polling(长轮询), grpc支持3种数据库:MySQL, Mongodb, rethinkdb完整的客户端: web, desktop,ios,andorid后端编程语言:Golang下载代码项目在github上的地址go get 注意需要梯子还要配置git和命令行的代理运行goland配置服务端编译一些琐...
2020-12-02 15:23:21 1699
原创 GitLab任意文件读取漏洞CVE-2020-10977重现
漏洞描述地址: https://www.freebuf.com/vuls/235982.htmlGitlab安装官方地址: https://docs.gitlab.com/omnibus/docker/启动docker:注意版本号,不要用最新版本,这个漏洞是有相关版本的docker run --detach \ --hostname 192.168.1.22 \ --publish 9443:443 --publish 980:80 --publish 922:22 \ -
2020-11-27 16:34:22 1931
原创 mongodb更新时的一个坑
问题突然发现本地数据库里的某条记录没有了,因为是本地,所以只有我自己会动这个库代码里几乎没有物理删除的根据好几个相关的字段查询都没有这条记录解决其实是无意间发现并解决的,用鼠标拖着看的时候,发现某一行几乎都是空的,但是_id还在一下就懂了,update的时候没有$set导致这条记录几乎被覆盖,除了_id这条记录剩下的几个字段就是你update误操作产生的,根据这个去代码里一下就找到了...
2020-11-18 01:13:15 211
原创 GCP踩坑
信用卡: 招行国际全币种信用卡google不会真的扣你1美元, 应该说会尝试扣1美元, 招行显示扣款失败google账号, 我的Google账号是之前尝试过申请,但是没成功创建vm借鉴了如下网址(第一个网址和现在的gcp界面不大一样了):https://www.wmsoho.com/google-cloud-platform-ssr-bbr-tutorial/https://blog.csdn.net/datadev_sh/article/details/79593360注意事项和坑.
2020-11-18 01:07:28 358
原创 阿里云redis的lua脚本报错踩坑记
脚本里命令的调用必须用KEYS ARRAY的形式错误表现ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array, and KEYS should not be in expression解决办法所有的redis.call这样的命令都要写成这种形式: redis.call('get', KEYS[1]), 第二个参数必须是KEYS[ind
2020-09-23 23:18:24 2102
原创 mongodb索引笔记
如果排序有多个字段,index只有一个字段, 应该是没啥效果的db.users.find().sort({“age” : 1, “username” : 1})db.users.createIndex({“username” : 1})最好设置index为 db.users.createIndex({“age” : 1, “username” : 1})复合indexdb.users.createIndex({“age”:1, “username” : 1})db.users.fi..
2020-08-25 00:22:44 105
原创 阿里云mongodb物理备份文件回复置自建数据库的一些小坑
在本地安装对应版本的mongodb, 参见->使用aliyun安装mongodb,redis建议和你备份的数据库版本完全一致建议使用一个全新的数据库来恢复,因为恢复后的用户名/密码和阿里云的数据库用户名/密码是一样的其他步骤参见->将MongoDB物理备份文件恢复至自建数据库坑1: 解压物理备份文件这一步, innobackupex --decompress --remove-original /path/to/mongo/data这条命令的/path/to/mongo/d..
2020-08-07 22:32:04 395
原创 使用aliyun安装mongodb,redis
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -echo “deb [ arch=amd64,arm64 ] https://mirrors.aliyun.com/mongodb/apt/ubuntu bionic/mongodb-org/4.2 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list...
2020-08-07 22:08:29 156
原创 关闭kafka和zookeeper的jmx端口
关闭kafka和zookeeper的jmx端口这是一个随机端口还监听在0.0.0.0上关闭方式在systemctl里设置环境变量Environment="KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote.host=127.0.0.1"systemctl的相关配置kafka [Unit] Description=Apache Kafka server (broker) Documentation=http://kafka.apa
2020-08-03 01:33:41 1826
原创 Kubernetes(k8s)源码编译(容器方式)
环境主机环境cat /etc/os-release NAME="Ubuntu" VERSION="18.04.1 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.1 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="
2020-07-24 17:59:42 955
原创 journalctl清空日志
How to clear journalctl步骤journalctl --flushjournalctl --rotatejournalctl --vacuum-time=1sjournalctl --vacuum-time=2djournalctl --vacuum-size=50M
2020-07-16 14:00:01 3761
原创 ntp服务在ubuntu18上报错处理
操作系统``` root@ubuntu18:~# cat /etc/os-release NAME="Ubuntu" VERSION="18.04.1 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.1 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com
2020-07-12 00:41:47 1706
原创 minikube编译
export https_proxy=socks5://192.168.1.37:10808export http_proxy=socks5://192.168.1.37:10808GOPROXY=https://goproxy.cn,https://goproxy.io,directGO111MODULE=onmakeroot@ubuntu18:~/gomod/minikube# makego build -tags “container_image_ostree_stub containe
2020-06-29 10:00:43 529
原创 K8s环境变量能触发热更新吗
只有容器的情况下:apiVersion: v1kind: Podmetadata: name: envpodspec: containers: - name: test-container #image: k8s.gcr.io/busybox image: busybox command: [ "sh", "-c"] args: - while true; do echo -en '\n'; ..
2020-06-19 18:02:43 952
原创 k8s环境里的应用上传文件出现413错误
问题描述 在测试环境(非K8s环境)里上传文件是OK的 在正式环境(K8s环境)里上传文件报413错误解决办法K8s对应的上传服务的ing里的.metadata.annotations添加:nginx.ingress.kubernetes.io/proxy-body-size: 200m200m和你后端的应用的限制保持一致...
2020-06-18 16:43:29 1500
原创 K8s服务里的sessionAffinity未设置导致的问题
问题描述:一个接口突然不可用,这个接口是个图形验证码接口,分成2步:请求http://ip:port/captcha接口,返回: { captcha_id:xxxxx, cpatcha_png:a.png }根据上一步的cpatcha_png再去请求http://ip:port/captcha/a.png, 第一次可能失败,再次请求就会成功解决步骤:后端没有修改过相关接口的代码前端很长时间都没有修改过代码了发现k8s后端相关服务对应的pod由1个变成2个了应该是第一.
2020-06-11 16:52:26 4761
原创 深入理解linux内核,第三版(序言)
第三版,Understanding the Linux Kernel, 3rd Edition适合: it is mostly for people who want to understand how things really work inside the machine不适合: 程序员/系统管理员基于80X86的硬件架构专注于内核设计而不是计算机架构Linux内核源代码规模14000个C和汇编文件位于1000个子目录600万行代码230M基于2.6.11 版的Linux .
2020-06-09 01:10:44 243
原创 容器内部运行多个进程(服务)
容器的哲学是一个进程(服务)一个容器但是一个容器多个进程(服务)是可以实现的,比如: ELK的容器,就把3个进程塞在了一个容器里常见的实现方式参考: 如何科学的在Docker Container中运行多个服务参考未提及的:使用supervisor在Docker同时启动多个服务PouchContainer补充用脚本启动的一种方式,这里不必用到while true; do sleep 10;done这样 #!/bin/bash # 一共2个进程,其中一个进程后台,另一个进程作为前台.
2020-06-05 15:19:41 2797
原创 tinode发送文件
附件会在数据库的fileuploads表里有记录在server/store/store.go里的Save里处理,记录到fileuploads表里也在这里处理的 func (MessagesObjMapper) Save(msg *types.Message, readBySender bool) error { if header, ok := msg.Head["attachments...
2020-03-31 17:44:26 690
原创 Golang单向channel的作用
用作限制参数传递,这里也用到了channel是引用的这个特性 package main import "fmt" var c =make(chan int) var d =make(chan<- int) func main(){ fmt.Println("hello,world!") fmt.Println(len(a)) d = c // 不能写成...
2020-03-31 11:37:42 667
webgoat-standalone-7.1-SNAPSHOT-exec.jar
2016-11-05
云计算与分布式系统_从并行处理到物联网
2015-12-31
The.Go.Programming.Language.2015.11.pdf
2015-12-02
directory opus 10.5.2 64位
2015-07-20
OpenStack.Operations.Guide..pdf
2015-07-01
BCTextEncoder
2015-06-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人