0%

Linux 挂载nas盘

1
2
3
4
5
6
7
8
9
# -r 表示只读,不可写
~ sudo mount -t nfs -r -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,noac 11aff4a94a-dam78.cn-beijing.nas.aliyuncs.com:/app/extra_work_log /extra_work_log
634 history | grep mount

# 取消挂载
~ sudo umount -f /extra_work_log

# 此命令表示可读写
~ sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,noac 11aff4a94a-dam78.cn-beijing.nas.aliyuncs.com:/app/extra_work_log /extra_work_log

noac参数表示要及时同步数据 不然会有延迟

windows挂载

方法一:

首先要安装NFS客户端
image

切记要用“命令提示符”下去运行命令,GitBash 和PowerShell上执行都会出错

要采用自动挂载的方式,不然手动挂载好,重启后,虽然盘符还存在,但是不可使用!
自动挂载也会有同样的问题,所以要先umount nas盘,然后再重启mount NAS盘

注意要挂载在根目录下 不要挂载到子文件夹

1
2
umount D:
mount -o nolock -o mtype=hard -o timeout=60 \\11aff4a94a-dam78.cn-beijing.nas.aliyuncs.com\! D:

说明 如果计划任务运行成功,实际却没有出现NAS盘,请尝试直接将nas_auto.bat移动至C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp目录下,无需在任务计划程序下创建任务。

方法二:此方法可以挂载nas盘 但是无法读写

1
2
3
4
5
# windows 挂载nas盘的话 用阿里文档里的命令行去操作会报错
打开我的电脑->网络->映射网络驱动器,添加文件夹路径即可
11aff4a94a-dam78.cn-beijing.nas.aliyuncs.com\app\extra_work_log

# 这种添加方式即使服务器重启,挂载盘也会存在

image

注意:NAS盘挂载成功以后可以查看 但是无法写入的问题

后端反馈是因为 windows 和 nfs 协议不兼容,需要把权限全开放。参考这份文档的常见问题,https://help.aliyun.com/document_detail/67165.html#section-2u4-3qx-r09 ,检查一下 Locking、AnonymousGID、AnonymousUID 三个注册表项是否和文档一致,否则修改注册表项,并重启nfs 客户端,
注册表打开方法:

  1. 在任务栏上的搜索框中,键入regedit,然后选择”注册表编辑器 (桌面应用) 结果。
  2. 右键单击”开始”, 然后选择”运行”。 在”打开:”框中键入 regedit,然后选择”确定”。

参考文档:

win自启动挂载nas盘

ECS实例挂载同一NFS文件系统出现数据不同步的情况

Windows系统挂载NFS文件系统 - 文件存储 NAS - 阿里云

网上有很多方法 我这个是比较普通简单的方法

1
2
3
4
5
6

# ProgramData是隐藏目录,需要打开C盘目录,通过文件->选项->查看,找到显示隐藏文件夹的选项,选中即可

# monitor.bat脚本放置到启动目录下
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
title monitor test-3d and restart if not running
@echo "开机挂载NAS盘"
umount D:
mount -o nolock -o mtype=hard -o timeout=60 \\11aff4a94a-dam78.cn-beijing.nas.aliyuncs.com\! D:

@echo "删除sshd.exe"
tasklist | find "sshd.exe" && taskkill /F /IM sshd.exe

@echo mkdir logfile

REM 判断目录是否存在,如果不存在则创建
REM 此处.\aaa为相对路径。 可以使用绝对路径,例如D:\aaa
REM 注意不可用斜杠(/)做间隔符,会提示 “语法命令不正确”
SET logFolder=D:\app\extra_work_log\test-3d\%computername%
IF NOT EXIST %logFolder% (
REM 创建.\aaa目录 (在当前位置创建aaa目录)
ECHO %logFolder%目录不存在,已创建该目录!
MD %logFolder%
) ELSE (
ECHO %logFolder%目录已存在
)

@echo "开机启动test、openssh server,并循环进行检测"
:start
tasklist | find "sshd.exe" || start C:\Windows\System32\OpenSSH\sshd.exe
tasklist | find "test-build.exe" || start "" "C:\Program Files\Git\git-bash.exe" -c "cd /c/test/test-3d/build && export BUILD_ID=dontKillMe && export test_3D_LOG_DIR='D:\app\extra_work_log\test-3d\%computername%' && start test-build.exe '-logfile -' && echo `date +'%%Y-%%m-%%d %%T'` >> /d/app/extra_work_log/test-3d/$HOSTNAME/monitor-001.log "
ping -n 600 127.0.0.1>nul
goto start

image

通过以上方法就可以了

参考文档:

https://blog.csdn.net/onlyAngel521/article/details/121268315

https://zhuanlan.zhihu.com/p/159641100

https://blog.csdn.net/weixin_36147027/article/details/113413250?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3

https://blog.csdn.net/luozhihuinet2020/article/details/82799848

https://www.cnblogs.com/visoeclipse/archive/2009/08/29/1556240.html

centos8 换源

1、运行以下命令备份之前的repo文件。

1
rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo

2、运行以下命令下载最新的repo文件。

1
2
wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo -O /etc/yum.repos.d/Centos-vault-8.5.2111.repo
wget https://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo

3、运行以下命令替换repo文件中的链接。

1
2
sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g'  /etc/yum.repos.d/Centos-vault-8.5.2111.repo &&  sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo
sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/epel-archive-8.repo

4、运行以下命令重新创建缓存。

1
yum clean all && yum makecache

yum源和epel源切换完成后,即可使用yum install命令在实例上安装您所需要的软件包。

可能会报错

1
2
3
4
5
[root@k8smaster ~]# yum clean all && yum makecache

Errors during downloading metadata for repository 'epel-archive':
- Curl error (6): Couldn't resolve host name for http://mirrors.cloud.aliyuncs.com/epel-archive/8/Everything/x86_64/repodata/repomd.xml [Could not resolve host: mirrors.cloud.aliyuncs.com]
错误:为仓库 'epel-archive' 下载元数据失败 : Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

运行以下命令替换repo文件中的链接,就是这一步出错了
官方提供的命令:

1
2
sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo
sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/epel-archive-8.repo

http://mirrors.cloud.aliyuncs.com 需要替换为http://mirrors.aliyun.com,但是官方提供的命令没替换完,如果有执行官方提供的命令还是不行的话执行下面的命令:

1
2
sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo
sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/epel-archive-8.repo

运行以下命令重新创建缓存
yum clean all && yum makecache
1

执行成果,yum install也可以正常使用了

参考文档

[CentOS 8 EOL如何切换源?](https://help.aliyun.com/document_detail/405635.html?spm=5176.21213303.J_6704733920.7.5f853edaVvXmqu&scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%40405635.S_os%2Bhot.ID_405635-RL_centos8%20%20All%20mirrors%20were%20tried-LOC_helpmain-OR_ser-V_2-P0_0_

https://www.cnblogs.com/wjma/p/15926966.html

我踩的坑

一、kube-reserved-cgroup及system-reserved-cgroup配置

最开始,我只对kubelet做了如下配置–kube-reserved, –system-reserved,我就以为kubelet会自动给kube和system创建对应的Cgroup,并设置对应的cpu share, memory limit等,然后高枕无忧了。

然而实际上并非如此,直到在线上有一次某个TensorFlow worker的问题,无限制的使用节点的cpu,导致节点上cpu usage持续100%运行,并且压榨到了kubelet组件的cpu使用,导致kubelet与APIServer的心跳断了,这个节点便Not Ready了。

接着,Kubernetes会在其他某个最优的Ready Node上启动这个贪婪的worker,进而把这个节点的cpu也跑满了,节点Not Ready了。

如此就出现了集群雪崩,集群内的Nodes逐个的Not Ready了,后果非常严重。

把kublet加上如下配置后,即可保证在Node高负荷时,也能保证当kubelet需要cpu时至少能有–kube-reserved设置的cpu cores可用。

–enforce-node-allocatable=pods,kube-reserved,system-reserved
–kube-reserved-cgroup=/kubelet.service
–system-reserved-cgroup=/system.slice

注意,因为kube-reserved设置的cpu其实最终是写到kube-reserved-cgroup下面的cpu shares。了解cpu shares的同学知道,只有当集群的cpu跑满需要抢占时才会起作用,因此你会看到Node的cpu usage还是有可能跑到100%的,但是不要紧,kubelet等组件并没有收到影响,如果kubelet此时需要更多的cpu,那么它就能抢到更多的时间片,最多可以抢到kube-reserved设置的cpu nums。

查看日志

一般来说,Kubernetes 的主要组件有两种部署方法

直接使用 systemd 等启动控制节点的各个服务
使用 Static Pod 来管理和启动控制节点的各个服务
使用 systemd 等管理控制节点服务时,查看日志必须要首先 SSH 登录到机器上,然后查看具体的日志文件。如

1
2
3
4
5
journalctl -l -u kube-apiserver
journalctl -l -u kube-controller-manager
journalctl -l -u kube-scheduler
journalctl -l -u kubelet
journalctl -l -u kube-proxy

或者直接查看日志文件

1
2
3
4
5
/var/log/kube-apiserver.log
/var/log/kube-scheduler.log
/var/log/kube-controller-manager.log
/var/log/kubelet.log
/var/log/kube-proxy.log

而对于使用 Static Pod 部署集群控制平面服务的场景,可以参考下面这些查看日志的方法。

kube-apiserver 日志

1
2
PODNAME=$(kubectl -n kube-system get pod -l component=kube-apiserver -o jsonpath='{.items[0].metadata.name}')
kubectl -n kube-system logs $PODNAME --tail 100

kube-controller-manager 日志

1
2
PODNAME=$(kubectl -n kube-system get pod -l component=kube-controller-manager -o jsonpath='{.items[0].metadata.name}')
kubectl -n kube-system logs $PODNAME --tail 100

kube-scheduler 日志

1
2
PODNAME=$(kubectl -n kube-system get pod -l component=kube-scheduler -o jsonpath='{.items[0].metadata.name}')
kubectl -n kube-system logs $PODNAME --tail 100

kube-dns 日志

1
2
PODNAME=$(kubectl -n kube-system get pod -l k8s-app=kube-dns -o jsonpath='{.items[0].metadata.name}')
kubectl -n kube-system logs $PODNAME -c kubedns

Kubelet 日志
查看 Kubelet 日志需要首先 SSH 登录到 Node 上。

journalctl -l -u kubelet
Kube-proxy 日志
Kube-proxy 通常以 DaemonSet 的方式部署

1
2
3
4
5
6
$ kubectl -n kube-system get pod -l component=kube-proxy
NAME READY STATUS RESTARTS AGE
kube-proxy-42zpn 1/1 Running 0 1d
kube-proxy-7gd4p 1/1 Running 0 3d
kube-proxy-87dbs 1/1 Running 0 4d
$ kubectl -n kube-system logs kube-proxy-42zpn

参考文档

官方文档:为系统守护进程预留计算资源

官方文档:节点压力驱逐

kubernetes集群节点资源预留

集群状态异常排错

为容器和 Pod 分配内存资源(有压力增长脚本)

Pod 问题排查

k8s节点资源预留与 pod 驱逐
kubernetes配置资源不足时的处理方式

k8s pod 中想要运行可以使pod内存自增的脚本

1
2
3
4
5
6
7
8
#!/bin/bash
mkdir -p /tmp/skyfans/memory
mount -t tmpfs -o size=10240M tmpfs /tmp/skyfans/memory
dd if=/dev/zero of=/tmp/skyfans/memory/block
sleep 60
rm /tmp/skyfans/memory/block
umount /tmp/skyfans/memory
rmdir /tmp/skyfans/memory

结果在mount 挂载的时候报错

1
mount: permission denied (are you root?)

简单修改pod权限即可

1
2
3
4
5
spec:
containers:
- securityContext:
capabilities:
add: ["SYS_ADMIN"]

参考文档:

https://blog.csdn.net/xzm5708796/article/details/90143416

https://cloud.tencent.com/developer/ask/sof/876479

bug起源

因为业务量不多,kafka服务器配置过高,故而降低aws上kafka服务器的配置,降配重启以后发现ip 外网的ip变了,但是kafka配置的KAFKA_ADVERTISED_LISTENERS用的是域名,所以直接更改了域名的解析ip,启动kafka docker,启动起来!

但是事实是,kafka是启动起来了,但是业务无法读取kafka信息

查看kafka内的数据 发现KAFKA_LOG_DIRS又形成了新的文件夹,并且文件夹中的meta.properties内的broker.id= 002 和 cluster id都变了,实际是形成了新的kafka集群 并没有读取旧的数据

阅读全文 »

在前面的几篇文章中,介绍了MYSQL主从复制相关的内容,包括主从环境搭建,具体文章可参考:

使用传统方式搭建MySQL 5.7 异步复制环境:http://www.seiang.com/?p=296

基于GTID方式搭建MySQL 5.7 主从复制环境:http://www.seiang.com/?p=334

最近遇到mysql开启gtid做复制时,主从同步断开,从库出现1236错误,导致同步无法进行,本文就这问题记录下处理步骤

Basic
1
2
3
4
Last_IO_Errno: 1236

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'

一般两种情况会出现以上现象

1.在主库上手动执行清除二进制日志文件

2.主库重启,重新同步时

阅读全文 »