Active IQ Unified Manager Discussions
Active IQ Unified Manager Discussions
I am setting up a workflow to create a volume with cascaded protection:
I know there is a canned workflow for cascading Vault+Mirror but that has the freedom to chose destination clusters and destinations SVM:s and will create cluster/SVM peering if needed. I would like to look up the existing SVM peer relationships and only display a list of those to aviod any mistakes. The information is in the vserver_peer table in WFA but I cannot figure out how to stitch it all together in an SQL query: "give me a list of all the SVM:s that are peered with $PrimaryVserver - and when I select one SVM, show me a list of aggregates in the cluster where it resides". Any advice?
Best regards
Richard
Solved! See The Solution
Hello Richard,
I have used the search and define function so i first check the peer cluster of the primary cluster and then used to search the peer SVM of a primary SVM.
Query to select the peer SVM of a selected Primary SVM is:
SELECT
vserver.name,
cluster.primary_address AS 'cluster.primary_address'
FROM
cm_storage.cluster cluster,
cm_storage.vserver vserver,
(
Select
cm_storage.vserver_peer.peer_vserver_id as 'peer_svm_id'
From
cm_storage.vserver_peer,
cm_storage.vserver
Where
cm_storage.vserver_peer.vserver_id = cm_storage.vserver.id
And cm_storage.vserver.name = '${PrimarySVM}' ) as peersvmid
where
vserver.cluster_id = cluster.id
AND cluster.name = '${bkpcluster}'
AND vserver.is_repository IS NOT TRUE
AND (
vserver.type = 'clustear'
OR vserver.type = 'data'
)
AND vserver.name NOT LIKE '${bkpcluster}%'
and vserver.operational_state = 'running'
AND vserver.name NOT LIKE "%mc"
and vserver.id = peersvmid.peer_svm_id
and vserver.name not like '${PrimarySVM}'
ORDER BY
vserver.name ASC
Query to Select peer cluster of a primary cluster is:
SELECT
cluster.name, -- cluster.is_metrocluster,
cluster.primary_address AS 'primary_address'
FROM
cm_storage.cluster,
(
Select
cm_storage.cluster_peer.peer_cluster_id as 'peer_cluster_id'
From
cm_storage.cluster_peer,
cm_storage.cluster
Where
cm_storage.cluster_peer.primary_cluster_id = cm_storage.cluster.id
And (
cm_storage.cluster.name = '${cluster}'
Or cm_storage.cluster.primary_address = '${cluster}'
)) as peerid
WHERE
cluster.id = peerid.peer_cluster_id
ORDER BY
name ASC
It has worked for me so far.
,Sheel
Hello Richard,
I have used the search and define function so i first check the peer cluster of the primary cluster and then used to search the peer SVM of a primary SVM.
Query to select the peer SVM of a selected Primary SVM is:
SELECT
vserver.name,
cluster.primary_address AS 'cluster.primary_address'
FROM
cm_storage.cluster cluster,
cm_storage.vserver vserver,
(
Select
cm_storage.vserver_peer.peer_vserver_id as 'peer_svm_id'
From
cm_storage.vserver_peer,
cm_storage.vserver
Where
cm_storage.vserver_peer.vserver_id = cm_storage.vserver.id
And cm_storage.vserver.name = '${PrimarySVM}' ) as peersvmid
where
vserver.cluster_id = cluster.id
AND cluster.name = '${bkpcluster}'
AND vserver.is_repository IS NOT TRUE
AND (
vserver.type = 'clustear'
OR vserver.type = 'data'
)
AND vserver.name NOT LIKE '${bkpcluster}%'
and vserver.operational_state = 'running'
AND vserver.name NOT LIKE "%mc"
and vserver.id = peersvmid.peer_svm_id
and vserver.name not like '${PrimarySVM}'
ORDER BY
vserver.name ASC
Query to Select peer cluster of a primary cluster is:
SELECT
cluster.name, -- cluster.is_metrocluster,
cluster.primary_address AS 'primary_address'
FROM
cm_storage.cluster,
(
Select
cm_storage.cluster_peer.peer_cluster_id as 'peer_cluster_id'
From
cm_storage.cluster_peer,
cm_storage.cluster
Where
cm_storage.cluster_peer.primary_cluster_id = cm_storage.cluster.id
And (
cm_storage.cluster.name = '${cluster}'
Or cm_storage.cluster.primary_address = '${cluster}'
)) as peerid
WHERE
cluster.id = peerid.peer_cluster_id
ORDER BY
name ASC
It has worked for me so far.
,Sheel
It looks like Sheel has a workable option for you, but I figured I would throw in mine for reference. I am using this strictly for SnapMirror, but I think it will work for your purposes since the peering should be the same. If not, hopefully a little tweaking would get it there. My standard disclaimer: I am not a SQL query guru by any stretch, but at least this seems to work for me.
For the peered cluster:
SELECT
dest_cluster.name AS "Destination Custer"
FROM
cm_storage.vserver_peer,
cm_storage.cluster src_cluster,
cm_storage.vserver src_vserver,
cm_storage.cluster dest_cluster,
cm_storage.vserver dest_vserver
WHERE
vserver_peer.peer_vserver_id = src_vserver.id
AND vserver_peer.vserver_id = dest_vserver.id
AND dest_vserver.cluster_id = dest_cluster.id
AND vserver_peer.peer_state = 'peered'
AND vserver_peer.peer_vserver_local_name = '${sourcesvm}'
AND dest_vserver.is_repository IS NOT TRUE
AND (
dest_vserver.type = 'cluster'
OR dest_vserver.type = 'data'
)
AND dest_vserver.admin_state='running'
GROUP BY
dest_cluster.name ASCFor the peered SVM:
SELECT
dest_vserver.name AS "Destination SVM"
FROM
cm_storage.vserver_peer,
cm_storage.cluster src_cluster,
cm_storage.vserver src_vserver,
cm_storage.cluster dest_cluster,
cm_storage.vserver dest_vserver
WHERE
vserver_peer.peer_vserver_id = src_vserver.id
AND vserver_peer.vserver_id = dest_vserver.id
AND vserver_peer.peer_state = 'peered'
AND vserver_peer.peer_vserver_local_name = '${sourcesvm}'
AND dest_vserver.is_repository IS NOT TRUE
AND (
dest_vserver.type = 'cluster'
OR dest_vserver.type = 'data'
)
AND dest_vserver.admin_state='running'
GROUP BY
dest_vserver.name ASCAnd an aggregate selection based on those showing only what that SVM can see, which may have way more info than you need (this assumes peered cluster variable of $destcluster and peered SVM variable of $destsvm) – I normally use Search or Define steps to determine aggregates anymore:
SELECT
aggregate.name AS 'Aggregate Name',
node.name AS ' Node',
aggregate.size_mb/1048576 AS 'Total Size (TB)',
aggregate.used_size_mb/1048576 AS 'Used Size (TB)',
aggregate.available_size_mb/1048576 AS 'Available Size (TB)',
IFNULL(aggregate.volume_count,
0) AS 'Volume Count',
REPLACE(disk_info_table.disk_type,
',',
' and ') AS 'Disk Type',
IF (aggregate.is_hybrid IS NULL,
'Not available',
IF (aggregate.is_hybrid,
'True',
'False')) AS 'Is FlashPool'
FROM
cm_storage.cluster,
cm_storage.node,
cm_storage.vserver,
(
SELECT
GROUP_CONCAT(DISTINCT(disk.type)) AS disk_type,
disk_aggr.aggregate_id AS aggr_id
FROM
cm_storage.disk DISK,
cm_storage.disk_aggregate disk_aggr
WHERE
disk_aggr.disk_id = disk.id
GROUP BY
disk_aggr.aggregate_id) AS disk_info_table,
cm_storage.aggregate
WHERE
cluster.name = '${destcluster}'
AND node.cluster_id = cluster.id
AND aggregate.node_id = node.id
AND aggregate.name NOT LIKE '%aggr0%'
AND (
aggregate.has_local_root IS NULL || aggregate.has_local_root = 0
)
AND (
aggregate.has_partner_root IS NULL || aggregate.has_partner_root = 0
)
AND disk_info_table.aggr_id = aggregate.id
AND vserver.name = '${destsvm}'
AND (
vserver.restricted_aggregate_count = 0 || aggregate.id IN (
SELECT
aggregate_id
FROM
cm_storage.vserver_allowed_aggregate
WHERE
vserver_id = vserver.id
AND vserver.cluster_id = cluster.id
)
)
ORDER BY
aggregate.name ASC,
node.name,
aggregate.size_mb,
aggregate.used_size_mb,
aggregate.available_size_mb,
disk_info_table.disk_typeHopefully there is some useful info in there.
-Matt
Awesome, both solutions worked like a charm - many thanks to both of you!
Cheers / Richard