برگشت خودکار سرویس به preferred instance در اوراکل 19c

همانطور که می دانید در محیط RAC و در زمان ایجاد یک سرویس، می توان preferred instance و available instance را مشخص کرد در این صورت، سرویس بصورت پیش فرض در preferred instance اجرا خواهد شد.

اگر به هر دلیلی preferred instance دچار مشکل شود و یا به صورت کلی، نود مربوط به آن، از دسترس خارج شود، سرویس هم به available instance منتقل خواهد شد و حتی با استارت مجدد preferred instance، اصطلاحا failbackای برای این سرویس رخ نخواهد داد و سرویس کماکان در همان available instance به کارش ادامه خواهد داد و برای انتقال ان به  preferred instance، باید به صورت دستی، عملیات relocate را انجام داد.

مثال زیر را ببینید.

مثال: در این مثال، سرویسی با نام mysrv را در اوراکل 11g ایجاد می کنیم:

 [grid@node1 ~]$   crsctl query crs releaseversion

Oracle High Availability Services release version on the local node is [11.2.0.4.0]

[oracle@node1 ~]$ srvctl add service -d mydb -s mysrv  -r instance1 -a instance2

بعد از ایجاد سرویس، ان را استارت کرده و خواهیم دید که این سرویس در preferred instance در حال اجرا است:

[oracle@node1 ~]$ srvctl start service -d mydb -s mysrv

[oracle@node1 ~]$ srvctl status  service -d mydb -s mysrv

Service mysrv is running on instance(s) instance1

سوال؟! در صورتی که preferred instance دچار مشکل شود، چه اتفاقی برای این سرویس رخ خواهد داد؟

[oracle@node1 ~]$ srvctl stop instance –d mydb –I instance1 –f

با مشاهده وضعیت سرویس mysrv، خواهیم دید که این سرویس به صورت خودکار، به instance دوم منتقل شده است:

 [oracle@node1 ~]$ srvctl status  service –d mydb –s mysrv

Service mysrv is running on instance(s) instance2

همچنین با استارت مجدد instance1، کماکان سرویس در همان instance شماره دو، باقی خواهد ماند و به instance اول که اصطلاحا برای این سرویس، preferred می باشد، بر نمی گردد:

[oracle@node1 ~]$ srvctl start instance -d mydb -i instance1

[oracle@node1 ~]$ srvctl status  service -d mydb -s mysrv

Service mysrv is running on instance(s) instance2

برای relocate دستی این سرویس به instance1، می توان دستور زیر را اجرا نمود:

[oracle@node1 ~]$ srvctl relocate service -d mydb -s mysrv -i instance2 -t instance1

[oracle@node1 ~]$ srvctl status  service -d mydb -s mysrv

Service mysrv is running on instance(s) instance1

همانطور که می بینید، با اجرای دستور srvctl relocate service، سرویس از instance2 به instance1 منتقل شده است.

در اوراکل 19c، پارامتری به نام failback به دستور srvctl add service اضافه شد که امکان relocate خودکار سرویس را در چنین شرایطی فراهم می کند. مثال زیر ببینید.

مثال: قصد داریم با دستور زیر، دو سرویس با نامهای srv_nonfailback و  srv_failback را ایجاد کنیم که قابلیت failback صرفا برای سرویس srv_failback فعال می باشد:

[grid@node1 ~]$ crsctl query crs releaseversion

Oracle High Availability Services release version on the local node is [19.0.0.0.0]

[oracle@node1 ~]$ srvctl add service -d db19c -service srv_nonfailback -preferred instance1 -available instance2

[oracle@node1 ~]$ srvctl add service -d db19c -service srv_failback -preferred instance1 -available instance2 -failback YES

 [oracle@node1 ~]$ srvctl config service -d db19c|egrep -i ‘Service name|instances’

Service name: srv_failback

Preferred instances: instance1

Available instances: instance2

Service name: srv_nonfailback

Preferred instances: instance1

Available instances: instance2

با اجرای دستور srvctl start service، خواهیم دید که هر دو این سرویسها، در instance1 اجرا خواهند شد:

[oracle@node1 ~]$ srvctl start service -d db19c -s srv_nonfailback,srv_failback

[oracle@node1 ~]$ srvctl status service -d db19c -s srv_nonfailback,srv_failback

Service srv_nonfailback is running on instance(s) instance1

Service srv_failback is running on instance(s) instance1

قصد داریم با down کردن نود اول، رفتار این دو سرویس را مورد بررسی قرار دهیم به همین جهت، با دستور reboot، نود اول را به صورت کلی از دسترس خارج می کنیم:

[root@node1 ~]# reboot

با down شدن این نود، سرویس به instance2، نقل مکان خواهد کرد:

 [oracle@node2 ~]$ srvctl status service -d db19c

Service srv_failback is running on instance(s) instance2

Service srv_nonfailback is running on instance(s) instance2

با استارت مجدد نود اول، به صورت خودکار، سرویس srv_failback  به این نود relocate خواهد شد اما سرویس srv_nonfailback  کماکان در instance دوم در حال اجرا خواهد ماند:

[oracle@node1 ~]$ srvctl status service -d db19c

Service srv_failback is running on instance(s) instance1

Service srv_nonfailback is running on instance(s) instance2

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

Comment (1)

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.