Compare commits
3 Commits
6362a3b40f
...
7d329708bc
Author | SHA1 | Date | |
---|---|---|---|
7d329708bc | |||
574af89a18 | |||
38a6437bbc |
@@ -146,45 +146,6 @@ pvc_sriov_enable: False
|
||||
# Lowering the stack limit may cause poor performance or crashes in Zookeeper during some tasks.
|
||||
#pvc_zookeeper_stack_limit: 256M # 1/4 of default
|
||||
|
||||
# CPU pinning configuration via cset
|
||||
# > ADVANCED TUNING: For most users, this is unnecessary and PVC will run fine with the default scheduling.
|
||||
# Uncomment these options only for testing or if you are certain you meet the following conditions.
|
||||
# > These options will tune cpuset (installed by default) to limit Ceph OSDs to certain CPU cores, while
|
||||
# simultaneously limiting other system tasks and VMs to the remaining CPU cores. In effect it dedicates the
|
||||
# specified CPU cores to Ceph OSDs only to ensure those processes can have dedicated CPU time.
|
||||
# > Generally speaking, except in cases where extremely high random read throughput is required and in which
|
||||
# the node(s) have a very large number of physical cores, this setting will not improve performance, and
|
||||
# may in fact hurt performance. For more details please see the documentation.
|
||||
# > For optimal performance when using this setting, you should dedicate exactly 2 cores, and their
|
||||
# respective SMT threads if applicable, to each OSD. For instance, with 2 OSDs, 4 real cores (and their
|
||||
# corresponding SMT threads if applicable) should be specified. More cores has been seen to, in some cases
|
||||
# drop performance further. For more details please see the documentation.
|
||||
# > Use the 'virsh capabilities' command to confim the exact CPU IDs (and SMT "siblings") for these lists.
|
||||
#
|
||||
pvc_shield_osds_enable: False
|
||||
#pvc_shield_osds_cset:
|
||||
# # This example host has 2x 6-core SMT-enabled CPUs; we want to use cores 0 (+SMT 12) and 2 (+SMT 14), which are
|
||||
# # both on physical CPU 0, for 1x OSD.
|
||||
# - hostname: pvchv1
|
||||
# osd_cset:
|
||||
# - 0
|
||||
# - 2
|
||||
# - 12
|
||||
# - 14
|
||||
# # These example hosts have 1x 8-core SMT-enabled CPUs; we want to use cores 0 (+SMT 8) and 1 (+SMT 9) for 1x OSD.
|
||||
# - hostname: pvchv2
|
||||
# osd_cset:
|
||||
# - 0
|
||||
# - 1
|
||||
# - 8
|
||||
# - 9
|
||||
# - hostname: pvchv3
|
||||
# osd_cset:
|
||||
# - 0
|
||||
# - 1
|
||||
# - 8
|
||||
# - 9
|
||||
|
||||
# Configuration file networks
|
||||
# > Taken from base.yml's configuration; DO NOT MODIFY THIS SECTION.
|
||||
pvc_upstream_device: "{{ networks['upstream']['device'] }}"
|
||||
|
@@ -638,11 +638,14 @@
|
||||
state: directory
|
||||
tags: base-backups
|
||||
|
||||
- name: install daily backup script
|
||||
- name: install daily backup scripts
|
||||
template:
|
||||
src: etc/cron.daily/pvc-backup.j2
|
||||
dest: /etc/cron.daily/pvc-backup
|
||||
src: "etc/cron.daily/{{ item }}.j2"
|
||||
dest: "/etc/cron.daily/{{ item }}"
|
||||
mode: 0755
|
||||
with_items:
|
||||
- pvc-backup
|
||||
- mon-backup
|
||||
tags: base-backups
|
||||
|
||||
- name: install IPMI network interfaces fragment
|
||||
|
24
roles/base/templates/etc/cron.daily/mon-backup.j2
Executable file
24
roles/base/templates/etc/cron.daily/mon-backup.j2
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Backup the Ceph monitor data
|
||||
# {{ ansible_managed }}
|
||||
|
||||
set -o errexit
|
||||
|
||||
BACKUP_DIR="/srv/backups"
|
||||
DATE="$( date +%Y%m%d )"
|
||||
HOSTNAME="$( hostname -s )"
|
||||
|
||||
if [[ ! -d ${BACKUP_DIR} ]]; then
|
||||
mkdir -p ${BACKUP_DIR}
|
||||
fi
|
||||
|
||||
pushd ${BACKUP_DIR} &>/dev/null
|
||||
|
||||
MON_BACKUP_FILENAME_BASE="ceph-mon-backup"
|
||||
MON_BACKUP_FILENAME="${BACKUP_DIR}/${MON_BACKUP_FILENAME_BASE}.${DATE}.tar.xz"
|
||||
|
||||
tar -cJf ${MON_BACKUP_FILENAME} /var/lib/ceph/mon
|
||||
find ${BACKUP_DIR} -type f -name "${MON_BACKUP_FILENAME_BASE}*" -mtime +7 -exec rm {} \;
|
||||
|
||||
popd &>/dev/null
|
@@ -138,56 +138,4 @@
|
||||
command: ceph osd crush rule create-replicated replicated_rule default osd
|
||||
when: "{{ pvc_nodes | length }} == 1"
|
||||
|
||||
# System OSD CPU shielding activation
|
||||
- block:
|
||||
- name: install packages
|
||||
apt:
|
||||
name:
|
||||
- cpuset
|
||||
- numactl
|
||||
state: latest
|
||||
|
||||
- name: install ceph-osd-cpuset controller config
|
||||
template:
|
||||
src: ceph/ceph-osd-cpuset-enable.j2
|
||||
dest: /etc/default/ceph-osd-cpuset
|
||||
|
||||
- name: install ceph-osd-cpuset script
|
||||
template:
|
||||
src: ceph/ceph-osd-cpuset.j2
|
||||
dest: /usr/local/sbin/ceph-osd-cpuset
|
||||
mode: 0755
|
||||
|
||||
- name: install ceph-osd-cpuset service unit
|
||||
template:
|
||||
src: ceph/ceph-osd-cpuset.service.j2
|
||||
dest: /etc/systemd/system/ceph-osd-cpuset.service
|
||||
register: systemd_file_cpuset
|
||||
|
||||
- name: create ceph-osd override dropin directory
|
||||
file:
|
||||
dest: /etc/systemd/system/ceph-osd@.service.d
|
||||
state: directory
|
||||
|
||||
- name: install ceph-osd override dropin
|
||||
template:
|
||||
src: ceph/ceph-osd-cpuset.conf.j2
|
||||
dest: /etc/systemd/system/ceph-osd@.service.d/cpuset.conf
|
||||
register: systemd_file_osd
|
||||
|
||||
- name: reload systemd to apply previous changes
|
||||
command: "systemctl daemon-reload"
|
||||
when: systemd_file_cpuset.changed or systemd_file_osd.changed
|
||||
|
||||
- name: enable ceph-osd-cpuset service
|
||||
service:
|
||||
name: ceph-osd-cpuset
|
||||
enabled: yes
|
||||
|
||||
- debug:
|
||||
msg: "NOTICE: Any cpuset configs have NOT been applied to the running system. This node must be rebooted to apply these changes."
|
||||
tags: pvc-ceph-cpuset
|
||||
when:
|
||||
- pvc_shield_osds_enable is defined
|
||||
|
||||
- meta: flush_handlers
|
||||
|
@@ -1 +0,0 @@
|
||||
{{ pvc_shield_osds_enable }}
|
@@ -1,5 +0,0 @@
|
||||
# ceph-osd@.service overrides for cpuset
|
||||
# {{ ansible_managed }}
|
||||
[Service]
|
||||
ExecStart =
|
||||
ExecStart = /usr/bin/cset proc --set=osd --exec /usr/bin/ceph-osd -- -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph
|
@@ -1,79 +0,0 @@
|
||||
#!/bin/bash
|
||||
# PVC Ceph OSD cpuset preparation script
|
||||
# {{ ansible_managed }}
|
||||
|
||||
# This script is designed to prepare the cpusets for use by Ceph OSDs, VMs, and other system resources.
|
||||
# Libvirt does not make this easy with any way to globally set its CPUs, so we must do this trickery.
|
||||
{% if pvc_shield_osds_cset is defined %}
|
||||
{% set cset_host = pvc_shield_osds_cset | selectattr('hostname', 'equalto', inventory_hostname) %}
|
||||
|
||||
A_OSD_CPUS=( {{ cset_host[0]['osd_cset'] | join(' ') }} )
|
||||
A_SYS_CPUS=()
|
||||
{% else %}
|
||||
|
||||
A_OSD_CPUS=()
|
||||
A_SYS_CPUS=()
|
||||
{% endif %}
|
||||
|
||||
CPU_INFO="$( lscpu )"
|
||||
|
||||
# First, we must determine how many NUMA nodes we have
|
||||
NUMA_COUNT="$( grep '^NUMA node(s)' <<<"${CPU_INFO}" | awk '{ print $NF }' )"
|
||||
|
||||
# If we have 1 NUMA node, our SYS_MEMS is 0; otherwise it's 0-X
|
||||
# This is needed to explicitly set our memspec during the set
|
||||
if [[ ${NUMA_COUNT} -eq 1 ]]; then
|
||||
SYS_MEMS="0"
|
||||
else
|
||||
SYS_MEMS="0-$(( ${NUMA_COUNT} - 1 ))"
|
||||
fi
|
||||
|
||||
# We must determine which NUMA nodes our OSD CPUS are in for the memspec during the set
|
||||
A_OSD_MEMS=()
|
||||
for CPU in ${A_OSD_CPUS[@]}; do
|
||||
NODE="$( grep -E '^NUMA node[0-9]+ CPU' <<<"${CPU_INFO}" | grep -w "${CPU}" | awk '{ print $2 }' | sed 's/node//' )"
|
||||
if [[ ! " ${A_OSD_MEMS} " =~ " ${NODE} " ]]; then
|
||||
A_OSD_MEMS+=( $NODE )
|
||||
fi
|
||||
done
|
||||
|
||||
# Determine our CPU count
|
||||
CPU_COUNT="$( grep '^CPU(s)' <<<"${CPU_INFO}" | awk '{ print $NF }' )"
|
||||
|
||||
# Loop through all the CPUs in the count; if they are not in OSD_CPUS, add them to the SYS_CPUS array
|
||||
for i in $( seq 0 $(( ${CPU_COUNT} - 1 )) ); do
|
||||
if [[ ! " ${A_OSD_CPUS[*]} " =~ " ${i} " ]]; then
|
||||
A_SYS_CPUS+=( $i )
|
||||
fi
|
||||
done
|
||||
|
||||
{% raw %}
|
||||
if [[ $( cat /etc/default/ceph-osd-cpuset ) == "True" && ${#A_OSD_CPUS[@]} -gt 0 ]]; then
|
||||
{% endraw %}
|
||||
# Convert arrays into CSV
|
||||
OSD_MEMS="$( IFS=, ; echo "${A_OSD_MEMS[*]}" )"
|
||||
OSD_CPUS="$( IFS=, ; echo "${A_OSD_CPUS[*]}" )"
|
||||
SYS_CPUS="$( IFS=, ; echo "${A_SYS_CPUS[*]}" )"
|
||||
else
|
||||
# Configs installed but disabled, so use all CPUs for everything
|
||||
OSD_MEMS="${SYS_MEMS}"
|
||||
OSD_CPUS="0-$(( ${CPU_COUNT} - 1 ))"
|
||||
SYS_CPUS="0-$(( ${CPU_COUNT} - 1 ))"
|
||||
fi
|
||||
|
||||
echo "Enabled: $( cat /etc/default/ceph-osd-cpuset )"
|
||||
echo "CPU count: ${CPU_COUNT}"
|
||||
echo "OSD CPUs: ${OSD_CPUS}"
|
||||
echo "OSD Mems: ${OSD_MEMS}"
|
||||
echo "System/VM CPUs: ${SYS_CPUS}"
|
||||
echo "System/VM Mems: ${SYS_MEMS}"
|
||||
|
||||
# Create the system cpuset and move everything currently running into it
|
||||
/usr/bin/cset set --cpu=${SYS_CPUS} --mem=${SYS_MEMS} system
|
||||
/usr/bin/cset proc --move --force --threads root --toset=system
|
||||
|
||||
# Create our Libvirt cpuset (identical to system cpuset)
|
||||
/usr/bin/cset set --cpu=${SYS_CPUS} --mem=${SYS_MEMS} machine
|
||||
|
||||
# Create our OSD cpuset
|
||||
/usr/bin/cset set --cpu=${OSD_CPUS} --mem=${OSD_MEMS} osd
|
@@ -1,12 +0,0 @@
|
||||
# PVC Ceph OSD cpuset service unit
|
||||
# {{ ansible_managed }}
|
||||
[Unit]
|
||||
Description = Ceph OSD cpuset shield creation
|
||||
Before = ceph-osd@.service libvirtd.service
|
||||
|
||||
[Service]
|
||||
Type = oneshot
|
||||
ExecStart = /usr/local/sbin/ceph-osd-cpuset
|
||||
|
||||
[Install]
|
||||
WantedBy = ceph.target
|
Reference in New Issue
Block a user