On 23/12/13 08:21 AM, Vladislav Bogdanov wrote:
23.12.2013 05:39, Digimer wrote:
On 22/12/13 09:28 PM, Digimer wrote:
On 22/12/13 06:05 AM, Patrick Lists wrote:
Hi Digimer,

On 12/22/2013 07:46 AM, Digimer wrote:
Hi all,

    I am testing RHEL 7 and DRBD. I grabbed drbd from the Fedora 19
repos
as EPEL isn't up yet. It installed fine, but I can't seem to 'modprobe
drbd'.

    Has anyone tried to get DRBD running on RHEL 7 yet? Mind sharing the
secret sauce, if so? If not, I'll try installing from source.

Have you checked the logs? Watch the output of 'journalctl -f' when you
modprobe drbd and it should tell you what's going on.

Instead of installing from source I would just grab the source rpm,
check the spec file for any obvious incompatibilities with EL7, fix any
and rebuild it.

Regards,
Patrick

Ok, I realized that '--without-km' was set in the spec. I changed that
to '--with-km' and tried building it again, but it failed this time. I'm
not much of a programmer, so I'm hoping you (or others) might be able to
help here.

Here is the error, so far as I can tell:

====
gcc -O2 -g -Wall -I. -I../drbd -I../drbd/compat   -c -o drbdadm_parser.o
drbdadm_parser.c
    UPD     /root/rpmbuild/BUILD/drbd-8.4.3/drbd/compat.h
    CC [M]  /root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_buildtag.o
    CC [M]  /root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_bitmap.o
gcc -O2 -g -Wall -I. -I../drbd -I../drbd/compat   -c -o drbdadm_main.o
drbdadm_main.c
In file included from
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_bitmap.c:35:0:
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_int.h:2515:0: warning:
"idr_for_each_entry" redefined [enabled by default]
   #define idr_for_each_entry(idp, entry, id)    \
   ^
In file included from include/linux/cgroup.h:19:0,
                   from include/net/netprio_cgroup.h:16,
                   from include/linux/netdevice.h:48,
                   from include/net/sock.h:51,
                   from include/linux/connector.h:30,
                   from
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/linux/drbd.h:28,
                   from
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_bitmap.c:28:
include/linux/idr.h:132:0: note: this is the location of the previous
definition
   #define idr_for_each_entry(idp, entry, id)   \
   ^
    CC [M]  /root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_proc.o
gcc -O2 -g -Wall -I. -I../drbd -I../drbd/compat   -c -o drbdadm_adjust.o
drbdadm_adjust.c
gcc -O2 -g -Wall -I. -I../drbd -I../drbd/compat   -c -o
drbdtool_common.o drbdtool_common.c
In file included from
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_proc.c:34:0:
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_int.h:2515:0: warning:
"idr_for_each_entry" redefined [enabled by default]
   #define idr_for_each_entry(idp, entry, id)    \
   ^
In file included from include/linux/cgroup.h:19:0,
                   from include/net/netprio_cgroup.h:16,
                   from include/linux/netdevice.h:48,
                   from include/net/sock.h:51,
                   from include/linux/connector.h:30,
                   from
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/linux/drbd.h:28,
                   from
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_proc.c:33:
include/linux/idr.h:132:0: note: this is the location of the previous
definition
   #define idr_for_each_entry(idp, entry, id)   \
   ^
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_proc.c: In function
'drbd_proc_open':
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_proc.c:320:3: error: implicit
declaration of function 'PDE' [-Werror=implicit-function-declaration]
     return single_open(file, drbd_seq_show, PDE(inode)->data);
     ^
/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_proc.c:320:53: error: invalid
type argument of '->' (have 'int')
     return single_open(file, drbd_seq_show, PDE(inode)->data);
                                                       ^
cc1: some warnings being treated as errors
make[3]: *** [/root/rpmbuild/BUILD/drbd-8.4.3/drbd/drbd_proc.o] Error 1
make[2]: *** [_module_/root/rpmbuild/BUILD/drbd-8.4.3/drbd] Error 2
make[2]: Leaving directory `/usr/src/kernels/3.10.0-54.0.1.el7.x86_64'
make[1]: *** [kbuild] Error 2
make[1]: Leaving directory `/root/rpmbuild/BUILD/drbd-8.4.3/drbd'
make: *** [module] Error 2
====

I'll keep poking at it and report back if I make progress... As of now
though, I'm stuck. :)

Building from 8.4.3 source errors out with the same problem.

This one seems to be fixed (moved to drbd_wrappers.h and ifdef'ed) in 8.4.4.

I've got DRBD 8.4.4 installed and sync'ing on RHEL 7 beta! \o/

Here was the magic (based on a minimal install):

====
yum install -y gcc flex rpm-build wget kernel-devel
wget -c http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
tar -xvzf drbd-8.4.4.tar.gz
cd drbd-8.4.4
./configure \
  --prefix=/usr \
  --localstatedir=/var \
  --sysconfdir=/etc \
  --with-km \
  --with-udev \
  --with-pacemaker \
  --with-bashcompletion \
  --with-utils \
  --without-xen \
  --without-heartbeat
make
make install
modprobe drbd
====

Stuff that may or may not be relevant to someone later:

systemctl disable drbd.service

cat /etc/drbd.d/global_common.conf
====
# These are options to set for the DRBD daemon sets the default values for
# resources.
global {
        # This tells DRBD that you allow it to report this installation to
        # LINBIT for statistical purposes. If you have privacy concerns, set
        # this to 'no'. The default is 'ask' which will prompt you each time
        # DRBD is updated. Set to 'yes' to allow it without being prompted.
        usage-count no;

        # minor-count dialog-refresh disable-ip-verification
}

common {
        handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target 
/usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

                # Hook into Pacemaker's fencing.
                fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
        }

        startup {
                # wfc-timeout degr-wfc-timeout outdated-wfc-timeout 
wait-after-sb
        }

        options {
                # cpu-mask on-no-data-accessible
        }

        disk {
                # size max-bio-bvecs on-io-error fencing disk-barrier 
disk-flushes
                # disk-drain md-flushes resync-rate resync-after al-extents
                # c-plan-ahead c-delay-target c-fill-target c-max-rate
                # c-min-rate disk-timeout
                fencing resource-and-stonith;
        }

        net {
                # protocol timeout max-epoch-size max-buffers unplug-watermark
                # connect-int ping-int sndbuf-size rcvbuf-size ko-count
                # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
                # after-sb-1pri after-sb-2pri always-asbp rr-conflict
                # ping-timeout data-integrity-alg tcp-cork on-congestion
                # congestion-fill congestion-extents csums-alg verify-alg
                # use-rle

                # Protocol "C" tells DRBD not to tell the operating system that
                # the write is complete until the data has reach persistent
                # storage on both nodes. This is the slowest option, but it is
                # also the only one that guarantees consistency between the
                # nodes. It is also required for dual-primary, which we will
                # be using.
                protocol C;

                # Tell DRBD to allow dual-primary. This is needed to enable
                # live-migration of our servers.
                allow-two-primaries yes;

                # This tells DRBD what to do in the case of a split-brain when
                # neither node was primary, when one node was primary and when
                # both nodes are primary. In our case, we'll be running
                # dual-primary, so we can not safely recover automatically. The
                # only safe option is for the nodes to disconnect from one
                # another and let a human decide which node to invalidate. Of
                after-sb-0pri discard-zero-changes;
                after-sb-1pri discard-secondary;
                after-sb-2pri disconnect;
        }
}
====

cat /etc/drbd.d/r0.res

====
# This is the first DRBD resource. If will store the shared file systems and
# the servers designed to run on node 01.
resource r0 {
        # These options here are common to both nodes. If for some reason you
        # need to set unique values per node, you can move these to the
        # 'on <name> { ... }' section.

        # This sets the device name of this DRBD resouce.
        device /dev/drbd0;

        # This tells DRBD what the backing device is for this resource.
        disk /dev/sda5;

        # This controls the location of the metadata. When "internal" is used,
        # as we use here, a little space at the end of the backing devices is
        # set aside (roughly 32 MB per 1 TB of raw storage). External metadata
        # can be used to put the metadata on another partition when converting
        # existing file systems to be DRBD backed, when there is no extra space
        # available for the metadata.
        meta-disk internal;

        # NOTE: this is not required or even recommended with pacemaker. remove
        #       this options as soon as pacemaker is setup.
        startup {
                # This tells DRBD to promote both nodes to 'primary' when this
                # resource starts. However, we will let pacemaker control this
                # so we comment it out, which tells DRBD to leave both nodes
                # as secondary when drbd starts.
                #become-primary-on both;
        }

        # NOTE: Later, make it an option in the dashboard to trigger a manual
        #       verify and/or schedule periodic automatic runs
        net {
                # TODO: Test performance differences between sha1 and md5
                # This tells DRBD how to do a block-by-block verification of
                # the data stored on the backing devices. Any verification
                # failures will result in the effected block being marked
                # out-of-sync.
                verify-alg md5;

                # TODO: Test the performance hit of this being enabled.
                # This tells DRBD to generate a checksum for each transmitted
                # packet. If the data received data doesn't generate the same
                # sum, a retransmit request is generated. This protects against
                # otherwise-undetected errors in transmission, like
                # bit-flipping. See:
                # http://www.drbd.org/users-guide/s-integrity-check.html
                data-integrity-alg md5;
        }

        # WARNING: Confirm that these are safe when the controller's BBU is
        #          depleted/failed and the controller enters write-through
        #          mode.
        disk {
                # TODO: Test the real-world performance differences gained with
                #       these options.
                # This tells DRBD not to bypass the write-back caching on the
                # RAID controller. Normally, DRBD forces the data to be flushed
                # to disk, rather than allowing the write-back cachine to
                # handle it. Normally this is dangerous, but with BBU-backed
                # caching, it is safe. The first option disables disk flushing
                # and the second disabled metadata flushes.
                disk-flushes no;
                md-flushes no;
        }

        # This sets up the resource on node 01. The name used below must be the
        # named returned by "uname -n".
        on an-c03n01.alteeve.ca {
                # This is the address and port to use for DRBD traffic on this
                # node. Multiple resources can use the same IP but the ports
                # must differ. By convention, the first resource uses 7788, the
                # second uses 7789 and so on, incrementing by one for each
                # additional resource.
                address 10.10.30.1:7788;
        }
        on an-c03n02.alteeve.ca {
                address 10.10.30.2:7788;
        }
}
====

Thanks for the hint, Vladislav!

--
Digimer
Papers and Projects: https://alteeve.ca/w/
What if the cure for cancer is trapped in the mind of a person without access to education?
_______________________________________________
drbd-user mailing list
[email protected]
http://lists.linbit.com/mailman/listinfo/drbd-user

Reply via email to