وبلاگ مسعود حاجی حسن پور

راهکار های عملی اوراکل

راهکار های عملی اوراکل

این وبلاگ جهت به اشتراک گذاری تجربیات و راهکار های عملی در زمینه پایگاه داده اوراکل می باشد.

دستاوردها
طبقه بندی موضوعی

۲ مطلب با کلمه‌ی کلیدی «Clusterware» ثبت شده است

Oracle ACFS

ACFS

با سلام خدمت دوستان عزیز،
امروز قصد دارم کمی در مورد ASM Cluster File System, ACFS بنویسم.


ASM Volume چیست ؟
ASM Volume یک فایل است مانند دیگر فایل ها در ASM که از redundancy ASM پیروی میکند و extent های آن مانند فایل های دیگر بین disk ها برای IO بهتر توزیع میگردد. باید دقت گردد که یک Volume با استفاده از ASM Dynamic Volume Manager, ADVM به OS ارایه میگردد. با استفاده از ADVM مانند دیگر فایل سیستم ها، کاربران در سیستم عامل میتوانند به Volume درخواست IO داشته باشند. یک volume به عنوان یک block device به OS ارایه میگردد پس با دستور ها ای مانند mkfs میتواند آن را فرمت نمود. فایل سیستم ها ای مانند ext4, fat32, ntfs, xfs, acfs, ...


 ACFS چیست ؟
ACFS یک کلاستر فایل سیستم چند منظوره هست که شما در آن میتوانید انواع فایل ها از قبیل متن، عکس، موسیقی، ORACLE_HOME پایگاه داده و... را در آن ذخیره کنید که قسمتی از ASM می باشد. باید دقت داشت که در ACFS تقریبا همه چیز را میتوان ذخیره کرد به جز CRS_HOME, boot_device. یعنی باینری فایل های ASM در درون ACFS نمیتواند قرار گیرد چون برای load کردن ACFS نیاز به دسترسی به CRS_HOME میباشد که درصورتی که CRS_HOME درون ACFS باشد این مهم امکان پذیر نمیباشد. به درستی ACFS چون یک کلاستر فایل سیستم می باشد Managing Concurrency را انجام میدهد.

بیایید با یکدیگر یک سناریو ساخت ASCF را دنبال کنیم. شما به چند طریق میتوانید یک ACFS فایل سیستم ایجاد کنید :
  1. sqlplus
  2. asmcmd
  3. asmca
  4. enterprise manager
ما در اینجا از command line استفاده خواهیم گرد:

۱- در این مرحله اول یک volume در ASM diskgroup ایجدا میکنیم:

SQLPLUS Example:
[grid@rac1 ~]$ sqlplus / as sysasm
SQL> ALTER DISKGROUP DATA ADD VOLUME ACFSVOL3 SIZE 10G;

Diskgroup altered.

SELECT volume_name, volume_device FROM V$ASM_VOLUME 
     WHERE volume_name ='ACFSVOL3';
VOLUME_NAME VOLUME_DEVICE ----------------- -------------------------------------- ACFSVOL3 /dev/asm/acfsvol3-123 ASMCMD Example: [grid@rac1 ~]$ asmcmd volcreate -G data -s 10G ACFSVOL3 [grid@rac1 ~]$ asmcmd volinfo -G data ACFSVOL3 Diskgroup Name: DATA Volume Name: ACFSVOL3 Volume Device: /dev/asm/acfsvol3-123
State: ENABLED ...


۲- خوب تا الان یک volume در ASM diskgroup +DATA به حجم 10G ایجاد کردیم. حالا وقت این است که یک فایل سیستم برروی volume ایجاد کنیم که در اینجا ما یک ACFS برروی volume ایجاد خواهیم کرد. دقت کنید که از این پس volume با استفاده از ADVM به صورت یک block device به OS با آدرس /dev/asm/acfsvol3-123 ارایه شده است.


[grid@rac1 ~]$ /sbin/mkfs -t acfs /dev/asm/volume1-123

mkfs.acfs: version                   = 11.2.0.4.0.0
mkfs.acfs: on-disk version           = 39.0
mkfs.acfs: volume                    = /dev/asm/volume1-123
mkfs.acfs: volume size               = 10737418240
mkfs.acfs: Format complete.


۳- در مرحله فوق اگر دقت کرده باشبد ما با کاربر grid  فایل سیستم ابجاد کردیم. دقت کنید که بعد از ساخت block device مالک آن چه کسی هست ؟! در اینحا مالک asmadmin میباشد پس مالک یا کاربر root میتواند filesystem  ایجاد کند که با با استفاده از مالک چنین کاری انجام دادیم. حالا وقت آن است که یک mount point  ایجاد کرده و block device فرمت شده را بر روی یک مسیر mount کنیم.


[root@rac1 ~]$ /bin/mount -t acfs /dev/asm/volume1-123 /u01/app/acfsmounts/myacfs


۴- در مرحله فوق ما عملیات mount را انجام دادیم. دقت کنید تنها با کاربر root این امکان وجود دارد که عملیات mount  را انجام بدید. این مرحله را روی تمام node های کلاستر باید تک تک انجام بدید. ولی یک کار ساده تر وجود دارد که خود clusterware شروع میکند به mount کردن block device برروی mount point ها بر روی تمام نود ها. دقت کنید که این مرحله یک مرحله optional هست. اسم این مرحله acfs registery می باشد.


[grid@rac1 ~]$ /sbin/acfsutil registry -a /dev/asm/volume1-123 /u01/app/acfsmounts/myacfs

acfsutil registry: mount point /u01/app/acfsmounts/myacfs successfully added 
  to Oracle Registry


دقت کنید در مرحله فوق oracle clusterware عملیات mounting و مانیتور کردن آن را به صورت automatic انجام میدهد. چگونگی کار به این صورت است که clusterware آن را به صورت یک resource در OCR ثبت میکند، پس به صورت خودکار در هنگام بالا آمدن شروع به mount کردن block device ها در mount point ها میکند، و در هنگام پایین آمدن کلاستر، clusterware با رعایت ترتیب وابستگی ها شروع به dismount کردن block device ها میکند. پس این گونه هست که از ACFS میتوان به عنوان shared oracle db home استفاده کرد. لازم به ذکر است، در حالت نصب standalone, چنین چیزی بی معنی است چون OCR وجود ندارد و حتما block device ها باید به صورت دستی mount گردد.


[root@rac1 ~]$ /u01/app/11.2.0.4/grid/bin/crsctl stat res ora.registry.acfs
NAME=ora.registry.acfs
TYPE=ora.registry.acfs.type
TARGET=ONLINE        , ONLINE        , ONLINE
STATE=ONLINE on rac1, ONLINE on rac2, ONLINE on rac3


اگر مسیر تمام mount point ها و block device  ها را ندانیم مشکلی نیست با دستور زیر با کاریر root میتوانی تمام آنها را mount کنیم:

[root@rac1 ~]$ /bin/umount -t acfs -a
[root@rac1 ~]$ /sbin/mount.acfs -o all

دوستان عزیز امیدوارم مطلب کاربردی بوده باشد.

شاد و پیروز باشید.

تغییر پورت listener و scan_listener در محیط RAC

RAC listener concepts
همانطور که میدانید در پایگاه داده های Oracle پراسس PMON به صورت پیش فرض سرویسی که به نام instance ایجاد شده رو بر روی listener موجود برروی پورت پیشفرض (۱۵۲۱) رجیستر (ثبت) می کند تا پایگاه داده از آن طریق برای کلاینت ها و اپلیکیشن ها قابل دسترس باشد. حال میخواهیم یک سناریو را دنبال کنیم که بدانیم چگونه میتوان listener , scan_listener رو بر روی پورتی بجز پورت ۱۵۲۱ (پورت پیشفرض) در محیط RAC رجیستر (ثبت) نمود.

اول وضعیت سیستم رو مشخص میکنیم:
Node 1:

Node name= rac1
asm instacne name= +ASM1

node 2:

Node name= rac2
asm instance name= +ASM2

olsnodes -n -s
rac1    1       Active
rac2    2       Active

حال وضعیت listener رو بررسی می کنیم:

srvctl config listener
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1521

srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): rac2,rac1

lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 29-APR-2017 17:23:17

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                29-APR-2017 17:05:42
Uptime                    0 days 0 hr. 17 min. 34 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0.4/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.174.110)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.174.50)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
The command completed successfully

sqlplus / as sysasm

SQL*Plus: Release 11.2.0.4.0 Production on Sat Apr 29 17:51:06 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SYS@+ASM1> show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string       (DESCRIPTION=(ADDRESS_LIST=(A
                                                 DDRESS=(PROTOCOL=TCP)(HOST=192
                                                 .168.174.50)(PORT=1521))))
و وضعیت instance و services رو بررسی میکنیم. لازم به ذکر است که ما اینجا پایگاه داده نداریم و ASM Instance ها هستند (فعلا فقط clusterwarwe نصب شده است)

select instance_name from v$instance;

INSTANCE_NAME
----------------
+ASM1

select name from v$services;

NAME
----------------------------------------------------------------
+ASM
SYS$BACKGROUND
SYS$USERS
خوب تا اینجا همه چی به صورت پیشفرض هست و ما هم هیچ کاری انجام ندادیم. الان میخواهیم اول تکلیف listener را مشخص کنیم و پورتی که listen میکند را به 30300 تغییر بدیم. برای این کار لازم هست که یک tns بسازیم و از instance بخواهیم که به آدرس و پورتی که توی tns اشاره شده سرویس ها رو رجیستر (ثبت) کند.

  • ساخت TNS
In rac1
vim $ORACLE_HOME/network/admin/tnsnames.ora

ASM =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac1.mydomain.nps)(PORT = 30300))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = +ASM)
    )
  )
In rac2 vim $ORACLE_HOME/network/admin/tnsnames.ora ASM = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac2.mydomain.nps)(PORT = 30300)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = +ASM) ) )
  • ایجاد تغییرات در هر دو instance
sqlplus / as sysasm

SQL*Plus: Release 11.2.0.4.0 Production on Sat Apr 29 19:22:45 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SYS@+ASM1> alter system set local_listener='ASM' scope=both sid='*';

System altered.

show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      ASM

  • تغییرات بر روی listener
srvctl stop listener

srvctl modify listener -p 30300

srvctl start listener

srvctl config listener
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:30300

srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): rac2,rac1

lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 29-APR-2017 19:29:06

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                29-APR-2017 19:28:04
Uptime                    0 days 0 hr. 1 min. 1 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0.4/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.174.110)(PORT=30300)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.174.50)(PORT=30300)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
The command completed successfully
همانگونه که مشاهده نمودید ما تغییرات رو بر روی listener انجام دادیم. یک نکته اینکه توی پایگاه داده ای که RAC هم نیست به همین سادگی شما میتوانید پورت پیشفرض رو تغییر بدید و اصول کار به همین صورت هست.

خوب حالا میمونه ایجاد تغییر بر روی scan_listener این مورد هم کار خیلی ساده هست. که با دستورات زیر دنبال میکنیم:
 
  • بررسی وضعیت scan و scan_listener:
srvctl config scan
SCAN name: mas-scan.mydomain.nps, Network: 1/192.168.174.0/255.255.255.0/eth0
SCAN VIP name: scan1, IP: /mas-scan.mydomain.nps/192.168.174.251
SCAN VIP name: scan2, IP: /mas-scan.mydomain.nps/192.168.174.253
SCAN VIP name: scan3, IP: /mas-scan.mydomain.nps/192.168.174.252

srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac2
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node rac1
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node rac1

srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521

srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node rac2
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node rac1
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node rac1

  • حالا scan_listener رو تغییر میدیم:
srvctl modify scan_listener -p 30301

srvctl stop scan_listener

srvctl start scan_listener

srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:30301
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:30301
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:30301

بسیار خوب در آخر از روی OS بررسی میکنیم ببینیم واقعا همین پورت ها درحال listen شدن هستند یا خیر و وضعیت CW رو چک میکنیم:

netstat -ntl | grep --color 30300
tcp        0      0 192.168.174.50:30300        0.0.0.0:*                   LISTEN
tcp        0      0 192.168.174.110:30300       0.0.0.0:*                   LISTEN

netstat -ntl | grep --color 30301
tcp        0      0 192.168.174.252:30301       0.0.0.0:*                   LISTEN
tcp        0      0 192.168.174.253:30301       0.0.0.0:*                   LISTEN

crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.FRA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac2
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       rac1
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac2
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.scan1.vip
      1        ONLINE  ONLINE       rac2
ora.scan2.vip
      1        ONLINE  ONLINE       rac1
ora.scan3.vip
      1        ONLINE  ONLINE       rac1

دوستان عزیز امیدوارم مطلب کاربردی بوده باشد.

موفق باشید.