从青铜到王者第一周(修订版本)

224 阅读11分钟

灵感来源:刻意练习:如何从新手到大师

日拱一卒,只管去做。

我是小王同学,保持健康工作,今天就是美好一天。

image.png

提问13:CTDB入门

ctdb.samba.org/

CTDB是集群Samba中的集群数据库组件,可提供高可用性负载共享CIFS服务器集群

samba+ctdb+分布式文件系统

CTDB本身不是HA解决方案,但与集群文件系统相结合,它可以提供简单且高效的HA集群解决方案: 集群配置两组IP:Private IP用于heartbeat和集群内部通信。

Public IP用于对外提供虚拟访问IP,当内部的节点发生宕机故障时,CTDB将调度其他可用节点接管其原先分配的Public IP,故障节点恢复后,漂移的Public IP会重新被接管,保证服务不中断。 这个过程对客户端是透明的,保证应用不会中断,也就是我们这里所说的高可用HA。

提问12:

cap是MDS分配给client对inode的操作能力权限

cephfs cap组成

每个元数据可以按照内容划分为5个部分,

p - pin指该inode存在

A - 代表Auth,即对于mode、uid、gid的操作能力

L - Link,即inode和dentry相关的count的操作能力

X - 代表Xattrs,即对于扩展属性的操作能力

F -代表File,即对文件大小(size)、文件数据和mtime的操作能力

另外每个部分最多对应有6种对应操作能力

s - shared 共享能力,即改数据可由多客户端获得,1对多的模型

x - exclusive 独占能力,只有该客户端

r - read 具有读能力

w -write 具有写能力

c -cache 读具有缓存能力,可以在客户端缓存读数据

b - buffer 客户端有缓存写的能力,即写的数据可以缓存在本地客户端

几种常见举例

一般ALX对应s或者x

AsLsXs - 只有客户端可以读和本地缓存相关的元数据状态

AxLxXx - 只有该客户端可以读和改变相关的元数据状态

Fs - 可以在本地缓存和读取mtime和文件大小的能力

Fx - 拥有在本地写mtime和文件大小的能力

Fr -可同步地从OSD中读取数据

Fc -可从缓存读取客户端中的数据

Fw - 拥有同步地写入OSD中数据的能力

Fb - 拥有优先写入缓存的能力,即先入objectcacher然后异步写入OSD

作者:要厉害的 链接:www.jianshu.com/p/ce476ac6e… 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

后端存储ObjectStore|BlueStore

www.talkwithtrend.com/Article/242…

Ceph数据存储原理

https://www.talkwithtrend.com/home/attachment/201811/13/926467_154208014230724.jpg

rrmtnr41efil

File:client读写的文件 object:是将File切块后的存储实体 oid:(object id) = ino(File的ID)+ono(切块序号) mask:PG总数m(m为2的整数幂)-1 PG(Placement Group):放置组(标识为 PGID)是一个逻辑的概念,一个PG存放多个对象,每个存储节点有上百个PG。 OSD(Object Storage Device):对象存储设备,提供存储资源。

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 1.png)

提问8:linux使用dd命令快速生成1G大文件

dd if=/dev/zero of=/tmp/test bs=1M count=1024

青铜提问7:

window 如何通过任务管理计划做开机启动 一个软件?

1. bat启动.exe程序

2. 设置任务管理器

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 2.png)

青铜提问6:

javascript 过程中 知识需要了什么

在学习JavaScript的过程中,你需要掌握以下知识:

  1. 语法和基本概念:了解JavaScript的语法结构,包括变量、数据类型、运算符、条件语句、循环和函数等基本概念。

  2. DOM(文档对象模型)操作:学习如何使用JavaScript与HTML文档进行交互,通过操作DOM元素来改变页面内容、样式和结构。

  3. 事件处理:理解事件处理机制,学习如何监听和响应用户的交互行为,例如点击、鼠标移动、键盘输入等。

  4. 异步编程:掌握JavaScript中的异步编程模式,包括回调函数、Promise、async/await等,以处理网络请求、定时器和其他异步操作。

  5. 函数和作用域:深入理解JavaScript中的函数概念,包括函数的定义、调用、参数和返回值,以及作用域、闭包和变量提升等相关概念。

  6. 数组和对象:熟悉JavaScript中的数组和对象,了解它们的特性、常见操作和遍历方法。

  7. 错误处理和调试:学会处理JavaScript代码中的错误,并掌握调试工具和技巧,以快速定位和修复问题。

  8. AJAX和HTTP请求:了解如何使用JavaScript进行AJAX(异步JavaScript和XML)通信,发送HTTP请求和处理响应数据。

  9. 浏览器对象模型(BOM):学习与浏览器窗口、历史记录、定时器和浏览器事件等相关的JavaScript API。

  10. ES6+特性:熟悉ES6(ECMAScript 2015)及其后续版本的新特性,如箭头函数、模板字面量、解构赋值、模块化等。

  11. Web开发工具和框架:掌握常用的Web开发工具和框架,如Webpack、Babel、React、Vue等,以提高开发效率和代码质量。

  12. 安全性和最佳实践:了解常见的Web安全问题和防范措施,学习编写安全的JavaScript代码和遵循最佳实践。

持续学习和实践是掌握JavaScript的关键。通过编写代码、阅读文档、参与项目和与其他开发者交流,不断拓展你的JavaScript知识和技能。

青铜提问5:理解 JavaScript 的 async/await

zhuanlan.zhihu.com/p/172378607

青铜提问4:VMware ESXi6.7 自定义镜像及安装

how:

[root@VM-8-8-centos ~]# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 1**0.0.8.**1 0.0.0.0 UG 0 0 0 eth0 10.0.8.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0

  • 断网的情况下 如何使用本地ios镜像提供安装包

  • 在VMware挂载本地iso光盘镜像、配置yum软件仓库

方式1;挂载 iso 文件 : 将iso文件拷贝到系统
mkdir  /media/iso     # 建立挂载点目录
mount -o loop  /home/user/xxxx.ios    /media/iso    #执行挂载

方式2:挂载光驱: 将cdrom 放入光驱。
 mkdir  /media/cdrom     # 建立挂载点目录
 mount  /dev/cdrom   /media/cdrom    #挂载光驱,
可能是其他设备 sr0
/dev/sr0是光驱的设备名,/dev/cdrom代表光驱

cdrom是sr0的软链接.你ll /dev/cdrom和ll /dev/sr0看看显示

vi /etc/yum.repos.d/beegfs-local.repo
[baseos]
name=Rocky Linux $releasever - Media - BaseOS
baseurl=file:///var/rocky84/BaseOS
gpgcheck=0
enabled=1

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 3.png)

  • lsblk

  • mkfs.ext4 /dev/sdb

  • mount /dev/sdb /mnt/mydisk

青铜提问3: 我有三个节点,如何通过ceph-deploy部署ceph集群,请给出具体操作命令

docs.ceph.com/projects/ce…

www.scaleway.com/en/docs/tut…

why

执行步骤 :ceph-deploy disk zap node12:sdb

问题:[ceph_deploy][ERROR ] RuntimeError: zap command needs both HOSTNAME and DISK but got "None node12:sdb"

解决办法:ceph-deploy disk zap node12 /dev/sdb注意中间是空格,一个是名称,一个是设备

执行步骤 :ceph-deploy osd create --data /dev/ssd

问题:

github.com/rook/rook/d…

[error: /dev/sda1 is a partition,](error: /dev/sda1 is a partition,)

access.redhat.com/solutions/6…

askubuntu.com/questions/9…

disk lvm part区别

解决办法:

  1. 删除逻辑卷

dmsetup remove –force [lvm名称];

  1. 格式化磁盘

sgdisk –z /dev/sdc

  1. 重新执行ceph-deploy disk zap node1 /dev/sdc

解决办法:

青铜提问2:

  1. what

stackoverflow.com/questions/2…

int Thread::join(void **prval)
{
  int status = pthread_join(thread_id, prval); //返回值35
  
  //在Linux系统中,一个程序返回35的状态码通常表示一个称为EDEADLK(死锁)的错误。
  //在使用pthread_join函数时,如果等待的线程与调用线程相同,则会出现死锁。因此,当您在等待线程结束时,需要确保调用线程与等待线程不同。
  
  if (status != 0) { //35 不等于0 true
    char buf[256];
    snprintf(buf, sizeof(buf), "Thread::join(): pthread_join "
             "failed with error %d\n", status);
    dout_emergency(buf);
    ceph_assert(status == 0); //true 符合条件 ,程序继续,false 触发core
       如果计算结果为false,则断言失败,抛出AssertionError
  }

  thread_id = 0;
  return status;
}
  1. why 问题拆分

2.1 低于gdb7 如何打印 map值

sourceware.org/gdb/wiki/ST…

  • GDB 7.0 will include support for writing pretty-printers in Python.

    ~/.gdbinit.

  • gdb-stl-views is a set of GDB macros that can display the contents of many STL containers

  • 验证上面效果不好,直接p (MDSRank)地址,地址是map中元素地址

思考: 发现是变量不对,但是为什么不对呢,代码明明已经处理了?

3 how

青铜提问1:发送邮件报错AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘

what

配置

  • 云主机 Centos8

  • Python3.11

smtpObj = smtplib.SMTP_SSL(mail_host)  # 启用SSL发信, 端口一般是465
          ^^^^^^^^^^^^^^^^ 
 AttributeError: module 'smtplib' has no attribute 'SMTP_SSL'

在其他环境可用说明代码没有问题。手工进行验证

Last login: Sun Jul  2 12:34:26 2023 from 58.56.96.29
[root@VM-8-8-centos ~]# python3
Python 3.11.0 (main, Apr 15 2023, 14:31:30) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18)] on linux
>>> from smtplib import SMTP_SSL

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'SMTP_SSL' from 'smtplib' (/usr/local/python311/lib/python3.11/smtplib.py)
>

why

stackoverflow.com/questions/6…

cat /usr/local/python311/lib/python3.11/smtplib.py)

查找smtplib.SMTP_SSL的源码,

发现SMTP_SSL类是在have_ssl为True时才成立,

而have_ssl这个变量需要ssl的依赖才为True,

那么问题找到了,linux上并没有ssl依赖

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 4.png)

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 5.png)

how

  1. 安装部署
//命令方式:尝试结果不行
yum install openssl openssl-devel
openssl version -a 
Modules/_ssl.c:4575: undefined reference to `SSL_CTX_get_cert_store


//源码方式:更高版本
wget https://github.com/openssl/openssl/releases/download/openssl-3.1.1/openssl-3.1.1.tar.gz

yum -y install perl-IPC-Cmd zlib-devel  gcc-c++
 dnf install perl


./config --prefix=/usr/local/openssl  --libdir=lib enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers -DOPENSSL_NO_GOST zlib shared  

make install

openssl 编译参数选项
shared
no-shared
是否生成动态连接库。


备份和替换

mv /usr/bin/openssl /usr/bin/openssl.old mv /usr/include/openssl /usr/include/openssl.old ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf ldconfig

  • pyton3.11 重新编译安装
进入你的python3.11目录(我的源码按照目录)
cd /root/bin/Python-3.11.0/Modules

修改Setup文件,改动如下,将147行处的5行代码取消注释
vim Setup

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 6.png)

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 7.png)

编译

./configure --prefix=/usr/local/python311  --with-openssl=/usr/local/openssl 
make && make install


 ln -sf /usr/local/python311/bin/python3.11 /usr/bin/python3
ln -sf /usr/local/python311/bin/pip3.11 /usr/bin/pip3

/configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl 

最终还是没有解决: openssl python311最后 编译后提示 步正确:

pyton3.11 源码编译改为命令安装

yum install epel-release

dnf remove python3

dnf install python3.11

curl bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py

白银回答: 源码编译 ssl+py3 并没有解决问题,centos8默认是3.6,但是通过dnf install python3.11

dnf search python3.11 确定是存在安装包的.

![image.png](从青铜到王者第一周+d040c5fd-6dc4-4f89-a77c-873bfef5475e/image 8.png)

青铜提问2:

青铜提问2:

在centos中如何查看子网掩码和网关?

www.talkwithtrend.com/Article/242…

cephfs cap组成

每个元数据可以按照内容划分为5个部分,

p - pin指该inode存在

A - 代表Auth,即对于mode、uid、gid的操作能力

L - Link,即inode和dentry相关的count的操作能力

X - 代表Xattrs,即对于扩展属性的操作能力

F -代表File,即对文件大小(size)、文件数据和mtime的操作能力

另外每个部分最多对应有6种对应操作能力

s - shared 共享能力,即改数据可由多客户端获得,1对多的模型

x - exclusive 独占能力,只有该客户端

r - read 具有读能力

w -write 具有写能力

c -cache 读具有缓存能力,可以在客户端缓存读数据

b - buffer 客户端有缓存写的能力,即写的数据可以缓存在本地客户端

几种常见举例

一般ALX对应s或者x

AsLsXs - 只有客户端可以读和本地缓存相关的元数据状态

AxLxXx - 只有该客户端可以读和改变相关的元数据状态

Fs - 可以在本地缓存和读取mtime和文件大小的能力

Fx - 拥有在本地写mtime和文件大小的能力

Fr -可同步地从OSD中读取数据

Fc -可从缓存读取客户端中的数据

Fw - 拥有同步地写入OSD中数据的能力

Fb - 拥有优先写入缓存的能力,即先入objectcacher然后异步写入OSD

作者:要厉害的 链接:www.jianshu.com/p/ce476ac6e… 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文由mdnice多平台发布