summaryrefslogtreecommitdiffstats
path: root/geo-replication/src
diff options
context:
space:
mode:
authorKotresh HR <khiremat@redhat.com>2015-01-16 14:32:09 +0530
committerVenky Shankar <vshankar@redhat.com>2015-01-21 22:58:41 -0800
commitf3ad194918dbbf00dcc9aebb226728294161ed7a (patch)
treeb7bb5ec817d849818108cd95893f22b8cc4bdb06 /geo-replication/src
parent27f2b8839e4d3ebe9ccbde071864b3e8016a3c4d (diff)
geo-rep: Handle copying of common_secret.pem.pub to slave correctly.
Current Behaviour: 1. Geo-replication gsec_create creates common_secret.pem.pub file containing public keys of the all the nodes of master cluster in the location /var/lib/glusterd/ 2. Geo-replication create push-pem copies the common_secret.pem.pub to the same location on all the slave nodes with same name. Problem: Wrong public keys might get copied on to slave nodes in multiple geo-replication sessions simultaneosly. E.g. A geo-rep session is established between Node1(vol1:Master) to Node2 (vol2:Slave). And one more geo-rep session where Node2 (vol3) becomes master to Node3 (vol4) as below. Session1: Node1 (vol1) ---> Node2 (vol2) Session2: Node2 (vol3) ---> Node3 (vol4) If steps followed to create both geo-replication session is as follows, wrong public keys are copied on to Node3 from Node2. 1. gsec_create is done on Node1 (vol1) -Session1 2. gsec_create is done on Node2 (vol3) -Session2 3. create push-pem is done Node1 - Session1. -This overwrites common_secret.pem.pub in Node2 created by gsec_create in second step. 4. create push-pem on Node2 (vol3) copies overwrited common_secret.pem.pub keys to Node3. -Session2 Consequence: Session2 fails to start with Permission denied because of wrong public keys Solution: On geo-rep create push-pem, don't copy common_secret.pem.pub file with same name on to all slave nodes. Prefix master and slave volume names to the filename. NOTE: This brings change in manual steps to be followed to setup non-root geo-replication (mountbroker). To copy ssh public keys, extra two arguments needs to be followed. set_geo_rep_pem_keys.sh <mountbroker_user> <master vol name> \ <slave vol name> Path to set_geo_rep_pem_keys.sh: Source Installation: /usr/local/libexec/glusterfs/set_geo_rep_pem_keys.sh Rpm Installatino: /usr/libexec/glusterfs/set_geo_rep_pem_keys.sh Change-Id: If38cd4e6f58d674d5fe2d93da15803c73b660c33 BUG: 1183229 Signed-off-by: Kotresh HR <khiremat@redhat.com> Reviewed-on: http://review.gluster.org/9460 Reviewed-by: Aravinda VK <avishwan@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Venky Shankar <vshankar@redhat.com> Tested-by: Venky Shankar <vshankar@redhat.com>
Diffstat (limited to 'geo-replication/src')
-rw-r--r--geo-replication/src/peer_add_secret_pub.in24
-rwxr-xr-xgeo-replication/src/set_geo_rep_pem_keys.sh23
2 files changed, 35 insertions, 12 deletions
diff --git a/geo-replication/src/peer_add_secret_pub.in b/geo-replication/src/peer_add_secret_pub.in
index 97011f204d2..5a9fd9ac347 100644
--- a/geo-replication/src/peer_add_secret_pub.in
+++ b/geo-replication/src/peer_add_secret_pub.in
@@ -1,18 +1,26 @@
#!/bin/bash
-if [ "$1" == "" ]; then
- user="root"
- home_dir=`getent passwd root | cut -d ':' -f 6`;
-else
- user=$1
- home_dir=`getent passwd $1 | cut -d ':' -f 6`;
-fi
+user=$1
+mastervol=$2
+slavevol=$3
if [ "$user" == "" ]; then
echo "Invalid User";
exit 1;
fi
+if [ "$mastervol" == "" ]; then
+ echo "Invalid master volume";
+ exit 1;
+fi
+
+if [ "$slavevol" == "" ]; then
+ echo "Invalid slave volume";
+ exit 1;
+fi
+
+home_dir=`getent passwd $user | cut -d ':' -f 6`;
+
if [ "$home_dir" == "" ]; then
echo "Invalid home dir";
exit 1;
@@ -30,4 +38,4 @@ if [ ! -d $home_dir/.ssh/authorized_keys ]; then
chown $user: $home_dir/.ssh/authorized_keys;
fi
-cat "$GLUSTERD_WORKDIR"/geo-replication/common_secret.pem.pub >> $home_dir/.ssh/authorized_keys;
+cat "$GLUSTERD_WORKDIR"/geo-replication/${mastervol}_${slavevol}_common_secret.pem.pub >> $home_dir/.ssh/authorized_keys;
diff --git a/geo-replication/src/set_geo_rep_pem_keys.sh b/geo-replication/src/set_geo_rep_pem_keys.sh
index 7b825693fad..c7cbdf36e4b 100755
--- a/geo-replication/src/set_geo_rep_pem_keys.sh
+++ b/geo-replication/src/set_geo_rep_pem_keys.sh
@@ -10,11 +10,26 @@
function main()
{
user=$1
+ master_vol=$2
+ slave_vol=$3
+
if [ "$user" == "" ]; then
echo "Please enter the user's name"
exit 1;
fi
+ if [ "$master_vol" == "" ]; then
+ echo "Invalid master volume name"
+ exit 1;
+ fi
+
+ if [ "$slave_vol" == "" ]; then
+ echo "Invalid slave volume name"
+ exit 1;
+ fi
+
+ COMMON_SECRET_PEM_PUB=${master_vol}_${slave_vol}_common_secret.pem.pub
+
if [ "$user" == "root" ]; then
echo "This script is not needed for root"
exit 1;
@@ -27,10 +42,10 @@ function main()
exit 1;
fi
- if [ -f $home_dir/common_secret.pem.pub ]; then
- cp $home_dir/common_secret.pem.pub ${GLUSTERD_WORKDIR}/geo-replication/
- gluster system:: copy file /geo-replication/common_secret.pem.pub
- gluster system:: execute add_secret_pub $user
+ if [ -f $home_dir/${COMMON_SECRET_PEM_PUB} ]; then
+ cp $home_dir/${COMMON_SECRET_PEM_PUB} ${GLUSTERD_WORKDIR}/geo-replication/
+ gluster system:: copy file /geo-replication/${COMMON_SECRET_PEM_PUB}
+ gluster system:: execute add_secret_pub $user ${master_vol} ${slave_vol}
else
echo "$home_dir/common_secret.pem.pub not present. Please run geo-replication command on master with push-pem option to generate the file"
exit 1;