[PATCH 6/6] fence_kdump for generic clusters v3: Add fence_kdump support for generic clusters
Martin Perina
mperina at redhat.com
Fri Mar 28 10:22:46 UTC 2014
----- Original Message -----
> From: "Vivek Goyal" <vgoyal at redhat.com>
> To: "Martin Perina" <mperina at redhat.com>
> Cc: kexec at lists.fedoraproject.org
> Sent: Thursday, March 27, 2014 10:40:15 PM
> Subject: Re: [PATCH 6/6] fence_kdump for generic clusters v3: Add fence_kdump support for generic clusters
>
> On Wed, Mar 26, 2014 at 10:24:12AM +0100, Martin Perina wrote:
> > 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 at 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
>
> Why should we get rid of fence_kdump options?
Because we have to check if it doesn't contain hostname. But as mentioned
below, I will move hostname check to kdumpctl so this won't be needed at all.
>
> Even if we have to please do it in two lines. Retain the old line of
> getting rid of comments. It is just easier to read.
>
> >
> > 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 () {
>
> Can we rename above function to kdump_configure_fence_kdump().
OK
>
> > - local nodes
> > - is_pcs_fence_kdump || return 1
> > + local kdump_cfg_file=$1
> > +
> > + if [ -z "$FENCE_KDUMP_NODES" ]; then
>
> Why do we need to check for zero FENE_KDUMP_NODES? Will following call
> of is_pcs_fence_kdump() not take care of it.
Configuration using fence_kdump_nodes option in kdump.conf has higher priority,
so when it's configured, we will ignore old Pacemaker configuration
>
> > + 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
>
> Can we move this code in a function. In general how about following
> structure.
>
> kdump_configure_fence_kdump()
> {
> if !is_generic_fence_kdump || !is_pcs_fence_kdump
> return;
>
> if is_generic_fence_kdump;then
> nodes = get_generic_fence_kdump_nodes();
> else
> nodes = get_pcs_fence_kdump_nodes;
>
> for node in $nodes
> kdump_install_net $node
>
> dracut_install $FENCE_KDUMP_SEND
>
> /* Take care of installing pcs cluster nodes in kdump.conf */
> if is_pcs_fence_kdump
> install_nodes_in_kdump_conf;
> }
>
OK, I will fix this
> And we should not have to modify /etc/kdump.conf in case of generic
> cluster. Nodes are already configured by user.
>
> If you like in kdumpctl, you can go through that list and do some error
> checking making sure host is not listed as node to notify.
Ok, I will move the hostname check to kdumpctl
>
> >
> > - # 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
>
> In fedora we should be able to change the behavior to enforce pcs users
> to specify options in kdump.conf instead of a file. I don't think any
> tool saves options in a file? Does it?
>
> > + 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.
>
> Doesn't user need to specify options to fence_kdump_send in
> /etc/sysconfig/fence_kdump* file?
/etc/sysconfig/fence_kdump is needed only, if user want to change defaults
(port, protocol, timeout).
>
> > +
> > +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!
>
> So for the vdsm case, don't we have fence_kdump running somewhere which
> receives messages from fence_kdump_send.
Yes, configuration of this listener will be part of oVirt, but it doesn't
have any direct impact on kdump configuration.
>
> > +
> > 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 at 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
>
More information about the kexec
mailing list