麒麟开发日志

麒麟开发日志

前期环境配置

sysbench安装过程中遇到的问题、解决办法;

如何利用sysbench对mySQL进行压力测试:
参见对话24/6/13 Kylin

docker的安装和配置

solution在最后一步。

1.按照gpt给出的提示尝试安装依赖

sudo dnf -y install dnf-plugins-core

但是麒麟没有这个包

2.尝试改用Fedora系统的安装步骤,

sudo dnf -y install dnf-plugins-core

系统已经有这个包,看来走的方向对了

3.设置稳定版的 Docker 仓库

sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

4.安装 Docker:

sudo dnf install docker-ce docker-ce-cli containerd.io

结果遇到了报错

[xjbo@TestKylin ~]$ sudo dnf install docker-ce docker-ce-cli containerd.io
Docker CE Stable - x86_64                       192  B/s | 384  B     00:02    
Errors during downloading metadata for repository 'docker-ce-stable':
  - Status code: 404 for https://download.docker.com/linux/fedora/10/x86_64/stable/repodata/repomd.xml (IP: 128.121.243.77)
Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

于是尝试将/etc/yum.repos.d/docker-ce.repo当中的所有fedora都换成centos/7,但依然重复了相同的报错

5.尝试用官方的自动安装脚本进行安装,结果不支持kylin

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

遇到报错:

[xjbo@TestKylin Download]$ sudo sh ./get-docker.sh 
# Executing docker install script, commit: 1ce4e39c9502b89728cdd4790a8c3895709e358d

ERROR: Unsupported distribution 'kylin'

6.于是去官网手动下载rpm包,下载链接:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

下载了以下包:

containerd.io-1.2.0-3.el7.x86_64.rpm
docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
docker-ce-cli-18.09.0-3.el7.x86_64.rpm

(ce是community release,el7: 表示该 RPM 包是为 CentOS 7 或 RHEL 7 编译的)

然后又遇到了依赖问题:

[xjbo@TestKylin Download]$ sudo rpm -ivh docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm 
警告:docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
错误:依赖检测失败:
    docker-ce-selinux >= 17.03.0.ce-1.el7.centos 被 docker-ce-17.03.0.ce-1.el7.centos.x86_64 需要

于是继续安装它需要的依赖

7.wget获取包

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

然后安装这个包的时候,又出现了依赖问题()

[xjbo@TestKylin Download]$ sudo rpm -ivh docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
警告:docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
错误:依赖检测失败:
    policycoreutils-python 被 docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch 需要

但是麒麟也没有提供这个包,于是再去wget下载

wget http://vault.centos.org/7.9.2009/os/x86_64/Packages/policycoreutils-python-2.5-34.el7.x86_64.rpm

但是接下来遇到了海量的依赖问题,dnf命令也找不到相关的依赖。。。。

这条路似乎走不通。。。。

8.找到一个参考博客

但这里给出的大体步骤与之前类似,而且最后还是遇到了从docker库获取元数据失败的报错

9.然后找到了stackoverflow的一篇帖子

按照最高赞回帖的步骤,执行了一下sed文本替换,但是依然元数据获取失败。

10.试图为麒麟安装epel-release支持,但是因为安装不了依赖项redhat-release最终失败

11.尝试手动安装所有依赖,需要的依赖:

nothing provides libapol.so.4()(64bit) needed by policycoreutils-python-2.5-34.el7.x86_64
nothing provides libapol.so.4(VERS_4.0)(64bit) needed by policycoreutils-python-2.5-34.el7.x86_64
nothing provides libqpol.so.1()(64bit) needed by policycoreutils-python-2.5-34.el7.x86_64
nothing provides libqpol.so.1(VERS_1.2)(64bit) needed by policycoreutils-python-2.5-34.el7.x86_64
nothing provides libqpol.so.1(VERS_1.4)(64bit) needed by policycoreutils-python-2.5-34.el7.x86_64
nothing provides policycoreutils = 2.5-34.el7 needed by policycoreutils-python-2.5-34.el7.x86_64
nothing provides setools-libs >= 3.3.8-4 needed by policycoreutils-python-2.5-34.el7.x86_64

wget安装这些包:

wget http://vault.centos.org/7.9.2009/os/x86_64/Packages/setools-libs-3.3.8-4.el7.x86_64.rpm
wget http://vault.centos.org/7.9.2009/os/x86_64/Packages/policycoreutils-2.5-34.el7.x86_64.rpm
wget http://vault.centos.org/7.9.2009/os/x86_64/Packages/policycoreutils-python-2.5-34.el7.x86_64.rpm
wget http://vault.centos.org/7.9.2009/os/x86_64/Packages/libapol-3.3.8-4.el7.x86_64.rpm
wget http://vault.centos.org/7.9.2009/os/x86_64/Packages/libqpol-3.3.8-4.el7.x86_64.rpm

但是全部都404了

12.solution

最后询问了麒麟的老师,原来通过docker-ce,docker-ce-cli,container-io的安装方式安装的是新版docker,而旧版docker只需要一个docker-engine即可;

而麒麟的软件源本身是含有这个docker-engine包的。

因此直接用dnf命令安装即可。

 MYsql配置

sudo mysqld_safe --skip-grant-tables & mysql -u root

cd /usr/local/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql123456';

ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql123456';

[xjbo@TestKylin bin]$ sudo sysbench --db-driver=mysql --mysql-db=sbtest --mysql-user=root --mysql-password=mysql123456 --table-size=1000000 --tables=10 /usr/share/sysbench/oltp_read_write.lua prepare
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

sysbench --db-driver=mysql --mysql-db=sbtest --mysql-user=your_username --mysql-password=your_password --tables=10 /usr/share/sysbench/oltp_read_write.lua cleanup

 

mysql community库的添加

sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

安装这个.rpm包之后,就能够将

mysql-connectors-community MySQL Connectors Community
mysql-tools-community MySQL Tools Community
mysql80-community MySQL 8.0 Community Server

添加到系统的repolist当中

 数据收集脚本

在data_sample.py当中,一开始出现了这样的情况:

复制代码
def get_pid_sum(dicts, pid_list):
    res = create_default(dicts)
    for name, data in dicts.items():
        for k, v in data.items():
            pid = str(k.value)
            if pid in pid_list:
                val = v.value
                res[name] = val
    return res

def get_proc_sum(dicts):
    pid_dict = defaultdict(lambda: create_default(dicts))
    for name, data in dicts.items():
        for k, v in data.items():
            pid = str(k.value)
            val = v.value
            pid_dict[pid][name] = val
    return pid_dict
复制代码

利用get_pid_sum单独测量mysql进程的数据,发现结果都是零;但是用get_proc_sum测量所有进程的总数据,又是有输出的:

这说明eBPF程序和采集数据本身肯定是正确的;

最后发现错误出在一个很细节的地方:我传入的pid_list是一个int的list,而这里

pid = str(k.value)

用的却是str,所以无论哪个进程,这个if判断的结果都为假;

只要把这里改为int即可。

 mysql重装/修改配置文件

mysql修改配置文件之后,
systemctl restart mysql无法正常重启mysql
解决方案:
之前的mysql进程没有清理干净,把所有和mysql相关的进程都清理掉,然后重启即可。

离线调优

系统不支持sysctl某参数

在mysql-sysbench调优过程中,发现该系统不支持sysctl的某个参数,但是让用户手动删除太麻烦,解决方案:

在optimizer.go的CheckServerPrj函数中,添加配置项检查功能,检查当前系统是否支持这个配置项,若否则直接跳过这一项(尚未实验求证效果)

go_gc

能够直接运行

memory

能够直接运行

mysql-sysbench

在调优过程中,get_eval中这段代码可能会产生问题(这是已经修改后的版本)

复制代码
if [ -f "PATH/sysbench_oltp_read_write.log" ]; then
        QPS=$(grep 'queries:' PATH/sysbench_oltp_read_write.log | awk -F '(' '{print $2}' | awk -F ' ' '{print $1}')
        
        # Check if QPS is a valid number
        if [[ ! -z "$QPS" ]] && [[ "$QPS" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
            echo "$QPS"
            exit 0
        fi
    fi
复制代码

GPT给出的解释和相应的解决办法:

你的 get_eval.sh 脚本的逻辑是等待一个文件出现,并在文件中找出包含 queries: 的行,然后提取括号内的第一个数值。这个值应该是 QPS。然而,脚本有可能在文件未生成前就结束循环,导致返回空值。

为了确保脚本在文件生成并获取到正确的 QPS 值之前不会退出,可以做以下改进:

  1. 增加最大等待时间。
  2. 确保输出是一个有效的浮点数。
  3. 增加一些调试信息以便更容易排查问题。

按照这些建议修改后,得到最终版本

并发数过多导致的死锁问题

经过多次控制变量的实验之后,发现可能是.py文件执行命令和.sh文件执行命令逻辑不同导致的:

通过.py文件发起sysbench压测mysql,无论线程数开到多少都没有问题;但是.sh文件一旦线程数稍大,就会出现死锁的情况,具体原因尚不清楚,目前只能对症下药:

减少并发数

测试时一般采用一到两个

修改my.cnf后,情况似乎有所改善,但没有测试高并发的情况

丰富功能

增加undo脚本,可以把文件内容和脚本所做的改动还原,方便用户重置操作,或在多个机器间灵活转移

 

突发状况

在没有对系统和代码做任何改动的情况下,突然出现了错误:

modprobe: FATAL: Module kheaders not found in directory /lib/modules/4.19.90-89.11.v2401.ky10.x86_64
Unable to find kernel headers. Try rebuilding kernel with CONFIG_IKHEADERS=m (module) or installing the kernel development package for your running kernel version.
<built-in>:1:10: fatal error: './include/linux/kconfig.h' file not found
#include "./include/linux/kconfig.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~

 


原因是我安装的kernel-devel包是.14的,但是当前运行的内核版本是.11,注意在系统GRUB界面选的内核版本要和这个包相对应

 

编译pcm

需要先安装包libasan 和 libasan-static

 

a-tune启动失败的常见原因

类似于collector,a-tune经常因为采集的硬件选错导致报错,在启动前要注意检查,尤其是network设备,因为它经常变动
在ip addr的输出当中,state显示为DOWN的设备就是为启用,要选择UP状态的.

本文作者:Gold_stein

本文链接:https://www.cnblogs.com/smartljy/p/18246312

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Gold_stein  阅读(70)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 逃离地面 RAD & 三浦透子
逃离地面 - RAD & 三浦透子
00:00 / 00:00
An audio error has occurred.

作词 : 野田洋次郎

作曲 : 野田洋次郎

空飛ぶ羽根と引き換えに 繋ぎ合う手を選んだ僕ら

それでも空に魅せられて 夢を重ねるのは罪か

夏は秋の背中を見て その顔を思い浮かべる

憧れなのか、恋なのか 叶わぬと知っていながら

重力が眠りにつく 1000年に一度の今日

太陽の死角に立ち 僕らこの星を出よう

彼が眼を覚ました時 連れ戻せない場所へ

「せーの」で大地を蹴って ここではない星へ

行こう

もう少しで運命の向こう もう少しで文明の向こう

もう少しで運命の向こう もう少しで

夢に僕らで帆を張って 来たるべき日のために夜を超え

いざ期待だけ満タンで あとはどうにかなるさと 肩を組んだ

怖くないわけない でも止まんない

ピンチの先回りしたって 僕らじゃしょうがない

僕らの恋が言う 声が言う

「行け」と言う