[步骤] Linux Kdump 的开启 (用于收集内核崩溃时的信息) (openSUSE & SLES 版)

步骤一:确保 crash 和 kernel-debuginfo 两个软件包已安装

# rpm -qa | grep crash || zypper install crash ; rpm -qa | grep kernel-debug || zypper install kernel-debug

(注意:此方法只有 openSUSE & SLES 可以使用)

步骤二:给 Kdump 预留内存

2.1 给 Kdump 预留内存

2.1.1 方法一:通过在 /etc/default/grub 配置文件里修改 crashkernel 参数

2.1.1.1 在 /etc/default/grub 配置文件里修改 crashkernel 参数
# vim /etc/default/grub

在这一行里:

.....
GRUB_CMDLINE_LINUX_DEFAULT="......"
.....

确保有:

.....
GRUB_CMDLINE_LINUX="crashkernel=auto......"
.....

并确保此文件其他地方没有和 crashkernel= 相关的参数


补充:这里的 auto 代表系统会根据内存大小自动设置一个值,也可以指定一个值,例如:crashkernel=128M,high、crashkernel=256M,high 等等。如果设置成一个固定值,建议
1) 1 GB 到 4 GB 内存设置成 160 M
2) 4 GB 到 64 GB 内存设置成 192 M
3) 64 GB 到 1 TB 内存设置成 256 M
4) 大于 1 TB 内存设置成 512 M

2.1.1.2 让刚刚修改的内核参数生效
# grub2-mkconfig -o /boot/grub2/grub.cfg

2.1.2 方法二:通过 yast 工具修改 crashkernel 参数

2.1.2.1 方法二:通过 yast 工具修改 crashkernel 参数
# yast kdump

之后将 –Start-Up 中的 Kdump Low Memory [MiB] (72 – 3069) 修改为 256,将 –Start-Up 中的 Kdump High Memory [MiB] (0 – 7168) 修改为 512,之后再选择 [ OK ]

(补充:当 Kdump Low Memory 设置为 256,Kdump High Memory 设置为 512 时更易触发 Kdump)

(注意:此方法只有 openSUSE & SLES 可以使用)

2.1.2.2 让刚刚修改的内核参数生效
# reboot

2.2 显示给 Kdump 预留内存的大小

# makedumpfile --mem-usage /proc/kcore

步骤三:修改 Kdump 的配置信息

3.1 修改 Kdump 的配置文件

# vim /etc/kdump.conf

将以下内容:

......
path /var/crash
core_collector makedumpfile -l --message-level 1 -d 31
......

修改为:

......
path /var/crash
core_collector makedumpfile -c -l --message-level 1 -d 31
default reboot
......


补充:
1) path /var/crash
2) -c 参数会对搜集的内核崩溃时的信息进行压缩
3) default reboot 参数会让 KDUMP 收集完内核崩溃时的信息后重启

3.2 让刚刚修改的 Kdump 配置文件生效

# systemctl enable kdump.service ; systemctl restart kdump.service

步骤四:测试 Kdump

4.1 造成系统内核崩溃

# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger

(注意:此时系统会自动崩溃并重启)

4.2 显示 Kdump 生成内核崩溃信息

# ls /var/crash/<date>/vmcore

(补充:这里的内核崩溃信息存放目录 /var/crash/,是刚刚在 /etc/kdump.conf 文件里指定的)

[步骤] VMware Workstation Player 的安装 (CentOS Linux & RHEL 版)

软件准备:

在 VMware 的官网上下载软件 VMware Workstation Player(本次使用的是 VMware-Player-15.5.6-16341506.x86_64.bundle):

https://my.vmware.com/cn/web/vmware/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/16_0

正文:

步骤一:系统环境要求

服务器系统要配置好可用的软件源

步骤二:安装 VMware 虚拟化平台的依赖软件

# yum -y install perl gcc kernel-devel libX11 libXinerama libXcursor libXtst elfutils-libelf-devel

步骤三:给 VMware 安装包执行权限

# chmod u+x VMware-Player-15.5.6-16341506.x86_64.bundle

(补充:本次添加权限的是 VMware-Player-15.5.6-16341506.x86_64.bundle)

步骤四:安装 VMware 虚拟化平台

# ./VMware-Player-15.5.6-16341506.x86_64.bundle

(补充:本次安装的是 VMware-Player-15.5.6-16341506.x86_64.bundle)

[步骤] TeamViewer 的安装 (CentOS Linux & RHEL)

软件准备:

在 TeamViewer 的官网上下载软件 TeamViewer:

https://www.teamviewer.cn/cn/download/linux/

正文:

步骤一:系统环境要求

服服务器系统要配置好可用的软件源

步骤二:安装 EPEL 软件库

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/e/epel-release-8-8.el8.noarch.rpm

步骤三:安装图形系统桌面

3.1 安装图形系统桌面

# yum groupinstall -y "Server with GUI"

3.2 禁止图形系统桌面以 Wayland 的方式启动

# vim /etc/gdm/custom.conf

将以下内容:

#WaylandEnable=false

修改为:

WaylandEnable=false

(补充:此步骤是为了避免让 TeamViewer 连接时出现黑屏)

3.3 设置系统开机进入图形系统桌面

# systemctl set-default graphical.target

步骤四:安装 TeamViewer

# yum -y localinstall teamviewer_15.9.5.x86_64.rpm

(补充:这里以安装 15.9.5.x86_64 版本的 teamviewer 为例)

步骤四:重启系统

# reboot

[内容] Ansible 执行脚本 Playbook 的循环

注意:

在使用 Ansible Playbook 之前,要先安装 Ansible、添加被 Ansible 管理的主机,并且需要 root 权限

正文:

内容一:在 Ansible Playbook 里使用循环

1.1 在 Ansible Playbook 里使用简单的单循环

# vim test.yml

创建以下内容:

---
- name: test
  hosts: all
  tasks:
  - name: install rpms
    yum:
    - php
    - nginx
    - mariadb


补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test,
3) 在所有服务器上执行,
4) 安装 php、nginx 和 mariadb,
的 Playbook 为例

1.2 在 Ansible Playbook 里使用数组实现单组循环

# vim test.yml

创建以下内容:

---
- name: test
  hosts: all
  tasks:
  - user:
      name: "{{item.name}}"
      group: "{{item.group}}"
      password: "{{'1' | password_hash('sha512',mysecretsalt)}}"
    with_items:
    - {name: "a1", group: "users"}
    - {name: "a2", group: "mail"}
    - {name: "a3", group: "wheel"}
    - {name: "a4", group: "root"}


补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test
3) 在所有服务器上执行
4) 创建 1 个循环组的用户
的 Playbook 为例

1.3 在 Ansible Playbook 里使用变量实现单组循环

# vim test.yml

创建以下内容:

---
- name: test
  hosts: all
  vars:
    issue_all
    - issue_name: a
      issue_cont: 1
    - issue_name: b
      issue_cont: 2
    - issue_name: c
      issue_cont: 3
    - issue_name: d
      issue_cont: 4
    - issue_name: e
      issue_cont: 5
  tasks:
  - name: issue
    shell: "echo {{ item.issue_name }}={{ item.issue_cont }}"
    loop: "{{ issue_all }}"


补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test
3) 在所有服务器上执行
4) 输出 1 个循环组的信息
的 Playbook 为例

1.4 在 Ansible Playbook 里使用数组实现多组循环

# vim test.yml

创建以下内容:

---
- name: test
  hosts: all
  remote_user: root
  vars:
    name: [a, b, c]
    id: [1, 2, 3]
  tasks:
  - shell: echo {{item}}
    with_nested:
    - "{{name}}"
    - "{{id}}"


补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test
3) 在所有服务器上执行
4) 循环输出两个循环组的信息(本案例会输出信息:a1、a2、a3、b1、b2、b3、c1、c2、c3)
的 Playbook 为例

内容二:在 JSON 文档上使用单组循环

2.1 在 JSON 文档上使用单组循环

# vim hosts.j2

创建以下内容:

{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['hostname'] }} {{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }}
{% endfor %}

(补充:这里以创建所有服务器名和 IP 地址对应的关系,名为 hosts.j2 的 json 文件为例)

2.2 使用 JSON 文档的 Ansible Playbook

# vim test.yml

添加以下内容:

......
  - name: template
    template:
      src: hosts.j2
      dest: /root/hosts.txt
......

(补充:这里以在 test.yml 中,使用 hosts.j2 创建 /root/hosts.txt 为例)