กลุ่มความพร้อมใช้งานเสมอให้เปลี่ยนเส้นทางผู้ใช้ไปยังอินสแตนซ์อ่านอย่างเดียวเสมอ


9

เรามีกลุ่มความพร้อมใช้งานตลอดเวลาซึ่งมีกลุ่มหลักและกลุ่มรองที่เปิดใช้งานการอ่าน เรามีผู้ใช้สำหรับทีมดำเนินการที่ใช้ฐานข้อมูลเพื่อตรวจสอบความถูกต้องของข้อมูลที่พวกเขาตั้งใจจะใส่ไว้ในฐานข้อมูล

ผู้ใช้มีสิทธิ์อ่านจากฐานข้อมูลเท่านั้น แต่เมื่อพวกเขาเชื่อมต่อ (ผ่าน SSMS) ผ่าน AG Listener พวกเขาจะเชื่อมต่อกับโหนดที่ใช้งานอยู่เสมอ

ฉันพยายามให้พวกเขาเข้าถึงอินสแตนซ์อ่านอย่างเดียวโดยตรง แต่พวกเขาติดอยู่ในหนทางของพวกเขาและหลังจากหนึ่งหรือสองวันพวกเขาก็กลับมาใช้งานโหนดอีกครั้ง

มีวิธีใดที่ SQL Server จะบอกว่าผู้ใช้รายนี้มักจะตั้งใจอ่านอย่างเดียวและเปลี่ยนเส้นทางไปที่นั่นหรือไม่?

หมายเหตุ: ฉันได้ลองตั้งค่า 'ApplicationIntent = ReadOnly' ในพารามิเตอร์การเชื่อมต่อเพิ่มเติม แต่ดูเหมือนจะไม่เปลี่ยนเส้นทางไปยังโหนดที่สองและไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบเนื่องจากพวกเขาจะลืมตั้งค่าสำหรับผู้เริ่มต้นใหม่อย่างหลีกเลี่ยงไม่ได้

SQL Server 2012 Enterprise, กลุ่มความพร้อมใช้งานหลัก 1, รอง 1 ที่สามารถอ่านได้พร้อมการส่งข้อมูลแบบซิงโครนัส

ฉันไม่ต้องการให้ผู้ใช้เชื่อมต่อกับเซิร์ฟเวอร์ที่เชื่อมโยงหรือผ่านเซิร์ฟเวอร์อื่น ๆ ผู้ใช้เชื่อมต่อโดยตรงกับฐานข้อมูลผ่าน SSMS (ไม่มีแอปพลิเคชันอื่น) และฉันต้องการให้ AG Listener (หรือบางสิ่งที่อยู่รอบ ๆ ) สามารถนำผู้ใช้นั้นไปยังโหนดที่สองได้หากมีอยู่ (เนื่องจากมีการเข้าถึงแบบอ่านเท่านั้น ไม่มีประเด็นที่จะเข้าถึงข้อมูลหลัก) โดยที่ผู้ใช้ไม่ต้องทำอะไรเนื่องจากพวกเขาย้ายไปรอบ ๆ เครื่องและจะลืมที่จะเพิ่มความตั้งใจของแอปพลิเคชัน นอกจากนี้ฉันพบว่าการเพิ่มลงในพารามิเตอร์การเชื่อมต่อเพิ่มเติมไม่ได้นำคุณไปยังโหนดรองเสมอ


นอกเหนือจากความคิดเห็นด้านล่างคุณจะต้องระบุฐานข้อมูลใน AG ที่คุณกำลังเชื่อมต่อ
swasheck

คำตอบ:


4

ฉันไม่มีคำตอบสำหรับคำถามทั้งหมดของคุณ (แม้ว่าฉันจะให้คำตอบสำหรับคำถามที่คล้ายกันในวันนี้https://dba.stackexchange.com/a/137844/36812 ) แต่คุณบอกว่าการใช้ ApplicationIntent = ReadOnly ไม่ทำงาน อย่างถูกต้อง

คุณตั้งค่า URL เส้นทางแบบอ่านอย่างเดียวแล้วหรือยัง เพราะมันไม่ได้ทำออกมานอกกรอบและหากคุณไม่ทำมันการตั้งค่าเหล่านี้และการตั้งค่าสถานะนั้นจะไม่ทำงาน ฉันคิดว่าถ้าคุณทำงานอย่างนั้นคุณสามารถเริ่มประเมินความต้องการของคุณอีกครั้ง

คำแนะนำเกี่ยวกับ MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspxและทำได้ง่ายที่สุดใน PowerShell

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"

Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica

1

ผลิตสิ่งที่คุณต้องการคือวิธีการแก้ปัญหาจุดและคลิกหรือการตั้งค่าบางแห่ง น่าเสียดายที่ปัจจุบันไม่มีสิ่งเหล่านี้อยู่ในรูปแบบ "ปิดชั้นวาง" มันจะดีมากถ้า Microsoft รวมสิ่งนี้ไว้ในการตั้งค่าการเชื่อมต่อสำหรับเซิร์ฟเวอร์ที่ลงทะเบียนดังนั้นจึงสามารถบันทึกได้แต่ทว่ามันก็ไม่ได้

สิ่งนี้ทำให้คุณมีหนึ่งในสองตัวเลือก:

  • เขียนบางสิ่งบางอย่างด้วยตัวเอง
  • เปลี่ยนพฤติกรรมผู้ใช้

ฉันวิ่งข้ามดาวน์โหลด Microsoft สำหรับ SNAC - ไคลเอนต์ Native Access SQL ค้นหาสิ่งที่อาจตอบสนองความต้องการของคุณ สิ่งนี้จะช่วยให้คุณสามารถเขียนรหัสเล็กน้อยเพื่อให้ผู้ใช้ปุ่มสามารถเข้าถึงโดยตรงไปยังรองอ่านอย่างเดียวได้โดยตรง https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

ความเป็นไปได้อื่นคือบังคับให้ผู้ใช้กรอกข้อมูลในกล่องโต้ตอบพารามิเตอร์การเชื่อมต่อเมื่อเชื่อมต่อผ่าน SSMS ในการบังคับใช้พฤติกรรมนี้คุณจะต้องแก้ไขการเข้าสู่ระบบในเซิร์ฟเวอร์หลักและเซิร์ฟเวอร์รองปฏิเสธการเชื่อมต่อกับเซิร์ฟเวอร์หลักและอนุญาตให้เชื่อมต่อกับเซิร์ฟเวอร์ที่สอง คุณสามารถใช้งาน SQL Agent เพื่อตรวจสอบสถานะของเซิร์ฟเวอร์และตั้งค่าการเข้าสู่ระบบได้

เป็นที่ยอมรับว่าฉันไม่ได้พยายามที่จะทำหลัง แต่ในทางทฤษฎีมันควรจะทำงาน


-2

ดูเหมือนว่าตอนนี้จะเป็นฟีเจอร์ใน SQL Server 2019

จากการเปลี่ยนเส้นทางการเชื่อมต่อแบบอ่าน / เขียนแบบรองไปยังแบบจำลองหลัก (กลุ่มการมีอยู่เสมอ)ในเอกสารอย่างเป็นทางการ:

ดูตัวอย่าง SQL Server 2019 CTP 2.0 แนะนำการเปลี่ยนเส้นทางการเชื่อมต่อการอ่าน / เขียนแบบจำลองหลักสำหรับกลุ่มที่มีสถานะพร้อมใช้ตลอดเวลา การเปลี่ยนเส้นทางการเชื่อมต่อแบบอ่าน / เขียนมีอยู่ในแพลตฟอร์มระบบปฏิบัติการใด ๆ อนุญาตให้ไคลเอ็นต์เชื่อมต่อแอปพลิเคชันไปยังเรพลิคาหลักโดยไม่คำนึงถึงเซิร์ฟเวอร์เป้าหมายที่ระบุในสตริงการเชื่อมต่อ

ตัวอย่างเช่นสายอักขระการเชื่อมต่อสามารถกำหนดเป้าหมายเป็นแบบจำลองรอง ขึ้นอยู่กับการกำหนดค่าของแบบจำลองกลุ่มความพร้อมใช้งาน (AG) และการตั้งค่าในสายอักขระการเชื่อมต่อการเชื่อมต่อสามารถถูกเปลี่ยนเส้นทางโดยอัตโนมัติไปยังแบบจำลองหลัก


ฉันไม่แน่ใจว่าฉันจะเห็นว่าคุณลักษณะใหม่นี้เกี่ยวข้องกับที่นี่ได้อย่างไร สถานการณ์ของ OP ดูเหมือนจะแตกต่างจากที่ใช้ในฟีเจอร์นี้ OP ต้องการเปลี่ยนเส้นทางการเชื่อมต่อแบบอ่านอย่างเดียวไปยังโหนดที่สอง (อ่านอย่างเดียว) ในขณะที่เอกสารสำหรับคุณสมบัติใหม่นี้บอกว่ามันเป็นการเปลี่ยนเส้นทางการเชื่อมต่อแบบอ่าน / เขียนไปยังโหนดหลัก คุณช่วยอธิบายรายละเอียดเกี่ยวกับวิธีการใช้งานฟังก์ชั่นใหม่เพื่อแก้ปัญหาที่เกิดขึ้นได้ไหม?
Andriy M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.