dhodovsk / source-git / pacemaker

Forked from source-git/pacemaker 3 years ago
Clone
Text Blame History Raw

OpenStack CTS setup

If we ever get the OpenStack networking sorted out to the point where Corosync can use it, this documents the process of getting a Pacemaker cluster set up for testing with CTS.

Prep

Install python-novaclient

yum install -y python-novaclient

Export your OpenStack credentials

export OS_REGION_NAME=...
export OS_TENANT_NAME=...
export OS_AUTH_URL=...
export OS_USERNAME=...
export OS_PASSWORD=...

export IMAGE_USER=fedora

Allocate 5 floating IPs. For the purposes of the setup instructions (and probably your sanity), they need to be consecutive and to remain sane, should ideally start with a multiple of 10. Below we will assume 10.16.16.60-64

for n in `seq 1 5`; do nova floating-ip-create; done

Create some variables based on the IP addresses nova created for you:

export IP_BASE=10.16.16.60

and a function for calculating offsets

function nth_ipaddr() {
    echo $IP_BASE | awk -F. -v offset=$1 '{ printf "%s.%s.%s.%s\n", $1, $2, $3, $4 + offset }'
}

function ip_net() {
    echo $IP_BASE | awk -F. '{ printf "%s.%s.%s.*\n", $1, $2, $3 }'
}

Upload a public key that we can use to log into the images we create. I created one especially for cluster testing and left it without a password.

nova keypair-add --pub-key ~/.ssh/cluster Cluster

Make sure it gets used when connecting to the CTS master

cat << EOF >> ~/.ssh/config
Host cts-master \`echo $IP_BASE | awk -F. '{ printf "%s.%s.%s.*", \$1, \$2, \$3 }'\`
     User               root
     IdentityFile       ~/.ssh/cluster
     UserKnownHostsFile ~/.ssh/known.openstack
EOF

Punch a hole in the firewall for SSH access and ping

nova secgroup-add-rule default tcp 23 23 10.0.0.0/8
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0

Add the CTS master to /etc/hosts

cat << EOF >> /etc/hosts
`nth_ipaddr 0` cts-master
EOF

Create helper scripts on a local host

cat << END > ./master.sh

echo export OS_REGION_NAME=$OS_REGION_NAME >> ~/.bashrc
echo export OS_TENANT_NAME=$OS_TENANT_NAME >> ~/.bashrc
echo export OS_AUTH_URL=$OS_AUTH_URL >> ~/.bashrc
echo export OS_USERNAME=$OS_USERNAME >> ~/.bashrc
echo export OS_PASSWORD=$OS_PASSWORD >> ~/.bashrc

function nth_ipaddr() {
    echo $IP_BASE | awk -F. -v offset=\$1 '{ printf "%s.%s.%s.%s\n", \$1, \$2, \$3, \$4 + offset }'
}

yum install -y python-novaclient git screen pdsh pdsh-mod-dshgroup

git clone --depth 0 git://github.com/beekhof/fence_openstack.git
ln -s /root/fence_openstack/fence_openstack /sbin

mkdir -p  /root/.dsh/group/
echo export cluster_name=openstack >> ~/.bashrc

rm -f /root/.dsh/group/openstack
for n in `seq 1 4`; do
    echo "cluster-\$n" >> /root/.dsh/group/openstack
    echo \`nth_ipaddr \$n\` cluster-\$n >> /etc/hosts
done

cat << EOF >> /root/.ssh/config
    Host cts-master \`echo $IP_BASE | awk -F. '{ printf "%s.%s.%s.*", \$1, \$2, \$3 }'\`
    User       root
    IdentityFile ~/.ssh/cluster
EOF

END

Some images do not allow root to log in by default and insist on a 'fedora' user. Create a script to disable this "feature":

cat << EOF > fix-guest.sh
#!/bin/bash
# Re-allow root to log in
sudo sed -i s/.*ssh-/ssh-/ /root/.ssh/authorized_keys
EOF

CTS master (Fedora-18)

Create and update the master

nova boot --poll --image "Fedora 18" --key_name Cluster --flavor m1.tiny cts-master
nova add-floating-ip cts-master `nth_ipaddr 0`

If your image does not allow root to log in by default, disable this "feature" with the script we created earlier:

scp fix-guest.sh $IMAGE_USER@cts-master:
ssh -l $IMAGE_USER -t cts-master -- bash ./fix-guest.sh

Now we can set up the CTS master with the script we created earlier:

scp ~/.ssh/cluster cts-master:.ssh/id_rsa
scp master.sh cts-master:
ssh cts-master -- bash ./master.sh

Create the Guests

First create the guests

for n in `seq 1 4`; do
   nova boot --poll --image "Fedora 18" --key_name Cluster --flavor m1.tiny cluster-$n;
   nova add-floating-ip cluster-$n `nth_ipaddr $n`
done

Then wait for everything to settle

sleep 10

Fix the Guests

If your image does not allow root to log in by default, disable this "feature" with the script we created earlier:

for n in `seq 1 4`; do
   scp fix-guest.sh $IMAGE_USER@`nth_ipaddr $n`:
   ssh -l $IMAGE_USER -t `nth_ipaddr $n` -- bash ./fix-guest.sh;
done

Run CTS

Prep

Switch to the CTS master

ssh cts-master

Clone Pacemaker for the latest version of CTS:

git clone --depth 0 git://github.com/ClusterLabs/pacemaker.git
echo 'export PATH=$PATH:/root/pacemaker/extra:/root/pacemaker/cts' >> ~/.bashrc
echo alias c=\'cluster-helper\' >> ~/.bashrc
. ~/.bashrc

Now set up CTS to run from the local source tree

cts local-init

Configure a cluster (this will install all needed packages and configure corosync on the guests in the $cluster_name group)

cluster-init -g openstack --yes --unicast --hosts fedora-18

Run

cd pacemaker
cts clean run --stonith openstack