Adds two new options to kdump.conf to be able to configure fence_kdump
support for generic clusters:
fence_kdump_args <arg(s)>
- Command line arguments for fence_kdump_send (it can contain all
valid arguments except hosts to send notification to)
fence_kdump_nodes <node(s)>
- List of cluster node(s) separated by space to send fence_kdump
notification to (this option is mandatory to enable fence_kdump)
Bug-Url:
https://bugzilla.redhat.com/1079821
Signed-off-by: Martin Perina <mperina(a)redhat.com>
---
dracut-kdump.sh | 19 ++++++-----
dracut-module-setup.sh | 69 ++++++++++++++++++++++++++--------------
kdump-in-cluster-environment.txt | 35 +++++++++++++++++---
kdump-lib.sh | 8 +++++
kdump.conf | 11 +++++++
kdump.conf.5 | 15 +++++++++
kdumpctl | 2 +-
7 files changed, 119 insertions(+), 40 deletions(-)
diff --git a/dracut-kdump.sh b/dracut-kdump.sh
index 4bac088..cb13d92 100755
--- a/dracut-kdump.sh
+++ b/dracut-kdump.sh
@@ -246,6 +246,12 @@ read_kdump_conf()
kdump_post)
KDUMP_POST="$config_val"
;;
+ fence_kdump_args)
+ FENCE_KDUMP_ARGS="$config_val"
+ ;;
+ fence_kdump_nodes)
+ FENCE_KDUMP_NODES="$config_val"
+ ;;
default)
case $config_val in
shell)
@@ -289,20 +295,13 @@ read_kdump_conf()
fence_kdump_notify()
{
- local nodes
-
- if [ -f $FENCE_KDUMP_NODES_FILE ]; then
- if [ -f $FENCE_KDUMP_CONFIG_FILE ]; then
- . $FENCE_KDUMP_CONFIG_FILE
- fi
-
- read nodes < $FENCE_KDUMP_NODES_FILE
- $FENCE_KDUMP_SEND $FENCE_KDUMP_OPTS $nodes &
+ if [ -n "$FENCE_KDUMP_NODES" ]; then
+ $FENCE_KDUMP_SEND $FENCE_KDUMP_ARGS $FENCE_KDUMP_NODES &
fi
}
-fence_kdump_notify
read_kdump_conf
+fence_kdump_notify
if [ -z "$CORE_COLLECTOR" ];then
CORE_COLLECTOR=$DEFAULT_CORE_COLLECTOR
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index 7951121..cba3539 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -20,7 +20,7 @@ depends() {
_dep="$_dep drm"
fi
- if is_pcs_fence_kdump; then
+ if [ is_generic_fence_kdump -o is_pcs_fence_kdump ]; then
_dep="$_dep network"
fi
@@ -263,7 +263,8 @@ kdump_install_net() {
#install kdump.conf and what user specifies in kdump.conf
kdump_install_conf() {
- sed -ne '/^#/!p' /etc/kdump.conf > /tmp/$$-kdump.conf
+ # filter comments and fence_kdump settings
+ sed -ne '/^#\|^fence_kdump/!p' /etc/kdump.conf > /tmp/$$-kdump.conf
while read config_opt config_val;
do
@@ -282,10 +283,16 @@ kdump_install_conf() {
core_collector)
dracut_install "${config_val%%[[:blank:]]*}"
;;
+ fence_kdump_args)
+ FENCE_KDUMP_ARGS="$config_val"
+ ;;
+ fence_kdump_nodes)
+ FENCE_KDUMP_NODES="$config_val"
+ ;;
esac
done < /etc/kdump.conf
- kdump_check_fence_kdump
+ kdump_check_fence_kdump "/tmp/$$-kdump.conf"
inst "/tmp/$$-kdump.conf" "/etc/kdump.conf"
rm -f /tmp/$$-kdump.conf
}
@@ -431,33 +438,47 @@ get_list_of_nodes_to_notify() {
# setup fence_kdump in cluster
# setup proper network and install needed files
-# also preserve '[node list]' for 2nd kernel /etc/fence_kdump_nodes
+# save fence_kdump settings to kdump config file if fence_kdump is configured
kdump_check_fence_kdump () {
- local nodes
- is_pcs_fence_kdump || return 1
+ local kdump_cfg_file=$1
+
+ if [ -z "$FENCE_KDUMP_NODES" ]; then
+ if is_pcs_fence_kdump; then
+ # get cluster nodes from cluster cib, get interface and ip address
+ nodelist=`pcs cluster cib | xmllint --xpath
"/cib/status/node_state/@uname" -`
+
+ # nodelist is formed as 'uname="node1" uname="node2"
... uname="nodeX"'
+ # we need to convert each to node1, node2 ... nodeX in each iteration
+ for node in ${nodelist}; do
+ # convert $node from 'uname="nodeX"' to
'nodeX'
+ eval $node
+ FENCE_KDUMP_NODES="$FENCE_KDUMP_NODES $uname"
+ done
+ fi
+ fi
- # get cluster nodes from cluster cib, get interface and ip address
- nodelist=`pcs cluster cib | xmllint --xpath "/cib/status/node_state/@uname"
-`
+ FENCE_KDUMP_NODES=$( get_list_of_nodes_to_notify "$FENCE_KDUMP_NODES" )
- # nodelist is formed as 'uname="node1" uname="node2" ...
uname="nodeX"'
- # we need to convert each to node1, node2 ... nodeX in each iteration
- for node in ${nodelist}; do
- # convert $node from 'uname="nodeX"' to 'nodeX'
- eval $node
- nodes="$nodes $uname"
- done
+ if [ -n "$FENCE_KDUMP_NODES" ]; then
+ # setup network to reach each node
+ for node in ${FENCE_KDUMP_NODES}; do
+ kdump_install_net $node
+ done
- nodes=$( get_list_of_nodes_to_notify "$nodes" )
+ dracut_install $FENCE_KDUMP_SEND
- # setup network to reach each node
- for node in ${nodes}; do
- kdump_install_net $node
- done
- echo
+ echo "fence_kdump_nodes $FENCE_KDUMP_NODES" >> ${kdump_cfg_file}
- echo "$nodes" > ${initdir}/$FENCE_KDUMP_NODES_FILE
- dracut_install $FENCE_KDUMP_SEND
- dracut_install -o $FENCE_KDUMP_CONFIG_FILE
+ if [ -z "$FENCE_KDUMP_ARGS" ]; then
+ if [ -f $FENCE_KDUMP_CONFIG_FILE ]; then
+ . $FENCE_KDUMP_CONFIG_FILE
+ FENCE_KDUMP_ARGS=$FENCE_KDUMP_OPTS
+ fi
+ fi
+ if [ -n "$FENCE_KDUMP_ARGS" ]; then
+ echo "fence_kdump_options $FENCE_KDUMP_ARGS" >>
${kdump_cfg_file}
+ fi
+ fi
}
# Install a random seed used to feed /dev/urandom
diff --git a/kdump-in-cluster-environment.txt b/kdump-in-cluster-environment.txt
index c27a5d7..46c8614 100644
--- a/kdump-in-cluster-environment.txt
+++ b/kdump-in-cluster-environment.txt
@@ -34,9 +34,9 @@ recovery service, fence_kdump_send will periodically send messages to
all
cluster nodes. When the fence_kdump agent receives a valid message from the
failed nodes, fencing is complete.
-How to configure cluster environment:
+How to configure Pacemaker cluster environment:
-If we want to use kdump in cluster environment, fence-agents-kdump should be
+If we want to use kdump in Pacemaker cluster, fence-agents-kdump should be
installed in every nodes in the cluster. You can achieve this via the following
command:
@@ -61,6 +61,31 @@ Then enable stonith
How to configure kdump:
-Actually there is nothing special in configuration between normal kdump and
-cluster environment kdump. So please refer to Kexec-Kdump-howto file for more
-information.
+Actually there are two ways how to configure fence_kdump support:
+
+1) Pacemaker based clusters
+ If you have successfully configured fence_kdump in Pacemaker, there is
+ no need to add some special configuration in kdump. So please refer to
+ Kexec-Kdump-howto file for more information.
+
+2) Generic clusters
+ For other types of clusters there are two configuration options in
+ kdump.conf which enables fence_kdump support:
+
+ fence_kdump_nodes <node(s)>
+ Contains list of cluster node(s) separated by space to send
+ fence_kdump notification to (this option is mandatory to enable
+ fence_kdump)
+
+ fence_kdump_args <arg(s)>
+ Command line arguments for fence_kdump_send (it can contain
+ all valid arguments except hosts to send notification to)
+
+ These options will most probably be configured by your cluster software,
+ so please refer to your cluster documentation how to enable fence_kdump
+ support.
+
+Please be aware that these two ways cannot be combined and 2) has precedence
+over 1): if you specify fence_kdump_nodes option, it will be used to configure
+fence_kdump even if you configured fence_kdump in Pacemaker cluster!
+
diff --git a/kdump-lib.sh b/kdump-lib.sh
index 6f8b991..bbaba64 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -38,6 +38,14 @@ is_pcs_fence_kdump()
(pcs cluster cib | grep -q 'type="fence_kdump"') &>
/dev/null || return 1
}
+# Check if fence_kdump is configured using kdump options
+is_generic_fence_kdump()
+{
+ [ -x $FENCE_KDUMP_SEND ] || return 1
+
+ grep -q "^fence_kdump_nodes" /etc/kdump.conf
+}
+
get_user_configured_dump_disk()
{
local _target
diff --git a/kdump.conf b/kdump.conf
index a106462..08bbe2a 100644
--- a/kdump.conf
+++ b/kdump.conf
@@ -123,6 +123,15 @@
# dracut_args <arg(s)>
# - Pass extra dracut options when rebuilding kdump
# initrd.
+#
+# fence_kdump_args <arg(s)>
+# - Command line arguments for fence_kdump_send (it can contain
+# all valid arguments except hosts to send notification to).
+#
+# fence_kdump_nodes <node(s)>
+# - List of cluster node(s) separated by space to send fence_kdump
+# notification to (this option is mandatory to enable fence_kdump).
+#
#raw /dev/vg/lv_kdump
#ext4 /dev/vg/lv_kdump
@@ -141,3 +150,5 @@ core_collector makedumpfile -l --message-level 1 -d 31
#default shell
#force_rebuild 1
#dracut_args --omit-drivers "cfg80211 snd" --add-drivers "ext2 ext3"
+#fence_kdump_args -p 7410 -f auto -c 0 -i 10
+#fence_kdump_nodes node1 node2
diff --git a/kdump.conf.5 b/kdump.conf.5
index 7eaf9dd..69628bd 100644
--- a/kdump.conf.5
+++ b/kdump.conf.5
@@ -177,6 +177,21 @@ Kdump uses dracut to generate initramfs for second kernel. This
option
allows a user to pass arguments to dracut directly.
.RE
+
+.B fence_kdump_args <arg(s)>
+.RS
+Command line arguments for fence_kdump_send (it can contain all valid
+arguments except hosts to send notification to).
+.RE
+
+
+.B fence_kdump_nodes <node(s)>
+.RS
+List of cluster node(s) separated by space to send fence_kdump notification
+to (this option is mandatory to enable fence_kdump).
+.RE
+
+
.SH DEPRECATED OPTIONS
.B net <nfs mount>|<user@server>
diff --git a/kdumpctl b/kdumpctl
index 3058171..6e02328 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -166,7 +166,7 @@ function check_config()
case "$config_opt" in
\#* | "")
;;
- raw|ext2|ext3|ext4|minix|btrfs|xfs|nfs|ssh|sshkey|path|core_collector|kdump_post|kdump_pre|extra_bins|extra_modules|default|force_rebuild|dracut_args)
+ raw|ext2|ext3|ext4|minix|btrfs|xfs|nfs|ssh|sshkey|path|core_collector|kdump_post|kdump_pre|extra_bins|extra_modules|default|force_rebuild|dracut_args|fence_kdump_args|fence_kdump_nodes)
[ -z "$config_val" ] && {
echo "Invalid kdump config value for option $config_opt."
return 1;
--
1.8.3.1