Application Read-Only Access on an Availability Replica

February 17, 2016

ערן חדד

 

DBA בכיר בחברת ביטוח מטעם נאיה טכנולוגיות.

 

אחד היתרונות החזקים ביותר בAlwaysOn- הוא האפשרות להגדיר Readable Secondary.

Readable Secondary מאפשר לנו לפנות לבסיס הנתונים שלנו ברפליקה הנוספת למטרות קריאה.

מה שיכול להוביל להורדה משמעותית בעומס ע"י הפניה של דוחות למשל לעותק שפתוח לקריאה, צמצום האפשרות של נעילות וכו'.

 

 

ניקח לדוגמא שני שרתים שמוגדרים בתצורת AlwaysON:

HHW-RGIN

HHW-HZIN

הקמנו Availability Group אחד בשם AG-IN ו-Listener בשם HHW-LSIN.

סימנו במאפיינים של ה- Availability Group ב-Yes את האופציה של Readable Secondary

לצורך העניין, ה-AG מוגדר כ-Secondary בשרת HHW-RGIN

 

שלב ראשון - ApplicationIntent=ReadOnly:

על פניו, כל ההגדרות נראות תקינות.

כדי לפנות לצד הקריא, הלא הוא ה-Readable Secondary שלנו, יש לגשת ל-Listener ובנוסף יש להוסיף ל- Connection String שלנו את המאפיין ApplicationIntent=ReadOnly

 

נבצע התחברות דרך ה- Management Studio ל-Listener שלנו

 נלחץ על Options ונוסיף את המאפיין של ApplicationIntent=ReadOnly

 כעת מה שהיינו מצפים הוא כשנבצע שליפה היא תתבצע אל מול ה-Secondary (במקרה שלנו שרת HHW-RGIN)

 

נרים פרופיילר על שני השרתים ונראה מה קורה:

 ניתן לראות שהשאילתה מתבצעת מול שרת HHW-HZIN, שהוא אמור לתפקד כ-Primary Replica במערך ה-AlwaysOn שלנו.

 

שלב שני - Read-Only Routing URL:

מסתבר אם כך, שלא מספיק לאפשר Readable Secondary ולפנות בעזרת Connection String מתאים עם האופציה של ApplicationIntent=ReadOnly

דבר נוסף שצריך להגדיר עבור ה-Availability Group הוא Read-Only Routing.

מדובר ביכולת של SQL Server לנתב Connections של קריאה בלבד לרפליקה של ה-ReadOnly.

כיום, לא ניתן לבצע זאת בעזרת ה-GUI.

-- Read only routing URL

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-RGIN' WITH

(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://HHW-RGIN.domain.com:1433'));

 

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-HZIN' WITH

(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://HHW-HZIN.domain.com:1433'));

 

-- Read only routing List

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-RGIN' WITH

(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('HHW-HZIN','HHW-RGIN')));

 

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-HZIN' WITH

(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('HHW-RGIN','HHW-HZIN')));

GO

 

בעצם הגדרנו 2 דברים:

Read only routing URL - השמה של Routing URL עבור כל רפליקה שמוגדרת כ-Readable Secondary. במקרה שלנו 2 הרפליקות מוגדרת כ-Readable Secondary.

Read only routing List – מכילה עבור כל רפליקה את כל הרפליקות שמוגדרות כ-Readable Secondary, כאשר עבור כל רפליקה, היא עצמה תופיע בסוף הרשימה.

 

כעת נתחבר שוב וננסה לבצע את השליפה

 וכעת ניתן לראות שאכן השליפה מתבצעת משרת ה-Secondary שלנו HHW-RGIN.

Please reload

Featured Posts

I'm busy working on my blog posts. Watch this space!

Please reload

Recent Posts

October 31, 2017

October 29, 2017

Please reload

Archive
Please reload

Search By Tags