记录一次生产环境数据库迁移
迁移要求不要清理目标数据
迁移是老环境迁移到新环境, 新环境之前有过使用记录了, 要求不删除现有的数据, 将老数据导入。有以下几个问题:
导出的sql里面不能带drop语句,所以在mysqldump的时候需要加上--skip-add-drop-table参数
主键或唯一键重复的问题(mysqldump默认会在一个insert语句中插入多条数据,如果insert失败, 那么整条语句执行失败, 就会导致正常的数据插不进,需要增加参数 --skip-extended-insert, 让一条insert只插入一条数据)
sql执行失败了需要继续, 因为现有数据可能和老环境冲突, 所以插入失败不能影响其他数据的插入, 这里选择在mysql控制台执行source命令。
备份源数据库1mysqldump -h192.168.21.26 -P3306 -uroot -p<password> --skip-add-drop-table --skip-extended-insert --databases idk_base > hezhong_idk_base.sql
–skip ...
mac下实现快速登陆带有两步验证的ssh跳板机
我们有个堡垒机当前的登陆流程是: ssh username@ip -p port –> 输入密码 –> 打开手机 –> 查看两部验证码 –> 输入 –> 连接成功
解决输入密码的问题mac因为安全问题使用brew已经无法安装sshpass这个包了, 我们可以使用ssh key来进行免密登陆并提高安全性。不同的跳板机平台设置方式不太一样,基本都是在个人信息设置里面增加。
解决输入两步验证码的问题
两步验证码就是TOTP,基于生成的6位数字, 30s更换一次, 我们需要先拿到TOTP的seed, 一般都会给一个二维码,用二维码解析工具解析, 解析出来的内容大致类似于:
1otpauth://totp/Microsoft:iuxt@outlook.com?secret=XUHHW5TKKTYGMJYM&issuer=Microsoft
secret= 后面的内容就是TOTP的seed
使用脚本来生成两步验证码可以使用python的pyotp包
12345import pyotpimport systotp = pyotp.TOTP(sys. ...
使用echo server测试ingress-nginx服务
这个是灰度的方案
创建正式环境的服务1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677# DeploymentapiVersion: apps/v1kind: Deploymentmetadata: name: production labels: app: productionspec: replicas: 1 selector: matchLabels: app: production template: metadata: labels: app: production spec: containers: - name: production image: registry.k8s.io/ingress-nginx/e2e-test-echo@ ...
Prometheus标签处理
元标签在被监控端纳入普罗米修斯里面定义了一些元数据标签在Prometheus所有的Target实例中,都包含一些默认的Metadata标签信息。可以通过Prometheus UI的 Status 里面的 Service Discovery 查看
Metadata标签
说明
address
当前Target实例的访问地址 host:port
scheme
采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
metrics_path
采集目标服务访问地址的访问路径
上面这些标签将会告诉Prometheus如何从该Target实例中获取监控数据。除了这些默认的标签以外,我们还可以为Target添加自定义的标签。
元标签是不会写到数据库当中的,使用promql是查询不到这些标签的,如果需要源标签的数据(比如k8s部署的Prometheus使用自动发现获取pod监控),这个时候就需要把一些元标签重新打标签来使用。
比如上图,监控k8s的pod状态, 因为pod是动态的,所以需要pod名字和pod的namespace信息,就可以从元标签中取值。
自定义 ...
编译安装Redis记录
下载解压123wget https://download.redis.io/releases/redis-6.0.9.tar.gztar xf redis-6.0.9.tar.gzcd redis-6.2.13
编译编译需要gcc
1make
安装123sudo mkdir -p /usr/local/redis/{bin,conf}sudo cp src/{redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-server} /usr/local/redis/bin/sudo cp redis.conf /usr/local/redis/conf/redis.conf
启动1/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
通过systemd管理vim /usr/lib/systemd/system/redis.service
12 ...
Kubernetes的3中探针readinessProbe、livenessProbe和startupProbe
探针K8S 提供了3种探针
startupProbe 启动检查(1.16版本新增)livenessProbe 存活检查readinessProbe 就绪检查
startupProbekubernetes 1.16版本新增功能,用于判断容器内应用程序是否已经启动,如果配置了startuprobe,就会先禁用其他的探测,直到它成功为止,成功后将不再进行探测。
1234567891011startupProbe: # 健康检查方式:[readinessProbe,livenessProbe,StartupProbe] failureThreshold: 3 # 检测失败3次表示未就绪 httpGet: # 请求方式 path: /health # 请求路径 port: 8080 # 请求端口 scheme: HTTP # 请求协议 initial ...
MySQL慢查询日志
开启慢查询会带来一定的性能影响。参考: http://c.biancheng.net/view/7782.html
查询慢查询日志功能状态默认情况下,慢查询日志功能是关闭的。可以通过以下命令查看是否开启慢查询日志功能。命令和执行过程如下:
12345678910111213141516mysql> SHOW VARIABLES LIKE 'slow_query%';+---------------------+---------------------------------------------------------------------+| Variable_name | Value |+---------------------+---------------------------------------------------------------------+| slow_query_log | ...
python处理字符串
读取多行字符串使用字符串的splitlines方法
12345678data = '''1 2 34 5 67 8 9'''# data.splitlines() --> ['1 2 3', '4 5 6', '7 8 9']for line in data.splitlines(): i = [i for i in line.split(' ') if i] # 去除列表中的空值 print(i)
字符串格式化使用 % 这种格式化方式即将被废弃, 可以使用 {} 这种占位符, 更直观
使用位置替换12345678910>>> '{0}, {1}, {2}'.format('a', 'b', 'c')'a, b, c'>&g ...
Python列表操作
列表去除空值123i = [ "a", "", "", "b", "", "c", "" ]i = [ tmp for tmp in i if tmp ]print(i)
kubernetes节点维护流程
节点设置为SchedulingDisabled 其实就是打上污点 node.kubernetes.io/unschedulable:NoSchedule
命令
说明
kubectl cordon
将node设置为SchedulingDisabled, 不允许新的pod调度上来, 旧的pod不受影响
kubectl drain
先驱逐node上的pod, k8s会在其他节点重新创建, 然后将节点设置为 SchedulingDisabled
kubectl uncordon
恢复调度, 删除 SchedulingDisabled 污点
操作流程常规操作将节点上现有的pod驱逐, 不追求优雅
1kubectl drain <node> --delete-local-data=true --ignore-daemonsets=true --force
操作完毕后, 将节点恢复调度
1kubectl uncordon <node>
对集群无影响的操作先针对节点执行
1kubectl cordon <node>
然后等待节 ...