การกำหนดค่า Balancer การโหลดภายในของ SQL Server Alwayson สำหรับฟังไคลเอ็นต์ใน Azure Resource Manager (ARM) Deployment Model #Sqlpass
เลือกรูปแบบการปรับใช้ของคุณได้สองแบบ
สิ่งที่เราจะไปถึงในบทความนี้คือการกำหนดค่า SQL Server Alwayson ภายใน balancer โหลดในรูปแบบการปรับใช้ Resource Manager
ในกรณีที่คุณไม่ทราบ Azure มีสองรูปแบบการปรับใช้ ได้แก่ Resource Manager (ARM) และ Classic Deployment การใช้งานแบบคลาสสิกเป็นวิธีการ "เก่า" ในการทำสิ่งต่างๆและ ARM เป็นวิธีใหม่ในการทำสิ่งต่างๆ มีประโยชน์มากมายในการใช้ ARM ตามที่อธิบายไว้ในบทความ Azure การใช้งานการจัดการตัวจัดการทรัพยากรและการใช้งานแบบคลาสสิก อย่างไรก็ตามหนึ่งในคุณลักษณะใหม่ที่ฉันชอบของ ARM คือความสามารถในการกำหนดโดเมนความผิดพลาดสามชุดต่อหนึ่งชุดข้อมูลดีฟอลต์แทนที่จะเป็นเพียงแค่โดเมนโดเมนข้อบกพร่องสองแห่งที่คุณได้รับด้วยโมเดลการใช้งานแบบคลาสสิก นี่คือคุณลักษณะที่สำคัญสำหรับ SQL Server High Availability
แบบจำลองการปรับใช้รีซอร์ส Manager
คุณสามารถตรวจสอบให้แน่ใจว่าโหนดคลัสเตอร์แต่ละโหนดในโหนดคลัสเตอร์ 2 โหนดและพยัญชนะแชร์ไฟล์ทั้งหมดจะอยู่ในโดเมน fault fault ที่แตกต่างกัน การทำเช่นนี้จะช่วยลดความเป็นไปได้ที่ความล้มเหลวของโดเมนฟอรัมเดียวจะส่งผลกระทบต่อคะแนนเสียงในโควรัมมากกว่าหนึ่งคะแนน
รูปแบบการปรับใช้แบบคลาสสิก
ในโมเดล Deployment แบบคลาสสิกที่มีโดเมนข้อผิดพลาดสองแห่งคุณสามารถใส่โหนดคลัสเตอร์ได้เพียงสองชุดเท่านั้นในชุดพร้อมใช้งาน เพื่อความพร้อมสูงสุดคุณจำเป็นต้องวางพยานแชร์ไฟล์ไว้ในตำแหน่งทางภูมิศาสตร์ที่ต่างกัน ไม่มีการรับประกันว่าจะไม่มีการสิ้นสุดในโดเมนความผิดเดียวกันกับหนึ่งโหนดคลัสเตอร์และถ้าคุณเก็บไว้ในตำแหน่งทางภูมิศาสตร์เดียวกัน ซึ่งหมายความว่าการล้มเหลวของโดเมนความผิดพลาดหนึ่ง ๆ อาจส่งผลกระทบต่อ 2 ใน 3 คะแนนที่นับองค์ประชุม จะทำให้กลุ่มทั้งหมดของคุณลดลง ARM สามโดเมนข้อบกพร่องช่วยลดความเป็นไปได้
ผู้จัดการทรัพยากร Azure
ARM เป็นทางเลือกที่จะก้าวไปในฐานะที่เป็นคุณลักษณะใหม่ของ Azure ใน ARM เท่านั้น อย่างไรก็ตามเอกสารมีความสว่างและคุณลักษณะบางอย่างยังไม่ค่อยมีอยู่ รวมถึงสิ่งต่างๆเช่นเอกสารสนับสนุน ExpressRoute ทั้งสองปัญหานี้ดีขึ้นเกือบทุกวัน แต่ผู้ที่ใช้งานช่วงต้นต้องทำงานหนักมากขึ้นจนกว่า Azure จะสามารถจับได้ อีกปัญหาหนึ่งคือคุณไม่สามารถผสมผสานการใช้งานแบบคลาสสิกกับ ARM ได้ ถ้าคุณเริ่มต้นใช้งานแบบเดิม ๆ คุณจะต้องเริ่มต้นจากพื้นฐานด้วย Resource Manager เมื่อคุณเปลี่ยน ถ้าคุณสามารถจัดการความเจ็บปวดเล็กน้อยตอนนี้ก็จะช่วยให้คุณหลีกเลี่ยงอาการปวดหัวที่มีขนาดใหญ่ในปีหน้า โดยเฉพาะอย่างยิ่งเมื่อคุณพบว่าคุณต้องการคุณลักษณะใหม่เฉพาะใน ARM
การเข้าถึง SQL Server พร้อมใช้งานสูง
ฉันหวังว่าบทความนี้จะช่วยคุณในการปรับใช้ ARM อย่างน้อยหนึ่งด้านซึ่งจะทำให้สามารถใช้งาน SQL Server ได้อย่างเต็มที่ ตามที่ได้มีการระบุไว้ในบทความก่อนหน้าการปรับใช้ AlwaysOn Availability Groups และ AlwaysOn Failover Cluster Instances ใน Azure "Classic" ต้องใช้ Azure Load Balancer (ภายในหรือภายนอก) สำหรับการเปลี่ยนเส้นทางไคลเอ็นต์ การกำหนดค่าใน Classic Azure ไม่ใช่ตรงไปตรงมา แต่เป็นเอกสารที่ดีพอที่ผู้ดูแลระบบใด ๆ ที่คุ้นเคยกับ Azure, Failover Clustering, SQL Server และ PowerShell สามารถทำให้การทำงานได้
การกำหนดค่า ILB และการอัพเดตทรัพยากร IP แบบคลัสเตอร์ SQL
AlwaysOn Availability Groups และ AlwaysOn Failover Cluster Instances โดยใช้รูปแบบการปรับใช้ ARM ยังต้องใช้ Azure Load Balancer สำหรับการเปลี่ยนเส้นทางไคลเอ็นต์ อย่างไรก็ตามขั้นตอนในการสร้างและกำหนดค่า balancer โหลดนั้นแตกต่างกันอย่างสิ้นเชิง ณ วันนี้ยังไม่ได้ระบุไว้เป็นอย่างดี
ในบทความนี้ฉันจะเน้นขั้นตอนที่จำเป็นในการกำหนดค่า SQL Server AlwaysOn Internal Load Balancer และอัปเดตทรัพยากร IP ของคลัสเตอร์ SQL ในบทความต่อไปผมจะนำคุณสู่ขั้นตอนทั้งหมดโดยขั้นตอนจากพื้นฐานจากการสร้าง vNet เพื่อติดตั้ง SQL และสร้างคลัสเตอร์
ไปเลย
ก่อนที่เราจะเริ่มต้นฉันกำลังตั้งสมมติฐานต่อไปนี้ว่าคุณได้ทำสิ่งต่อไปนี้:
- สร้าง vNet โดยใช้ ARM
- จัดเตรียม VMs 3 เครื่องบน ARM (DC, SQL1, SQL2)
- ใส่ DC, SQL1 และ SQL2 ในชุดการจัดหาพื้นที่และกลุ่มทรัพยากรเดียวกัน
- สร้างคลัสเตอร์ด้วย SQL1 และ SQL2 และใช้ DC เพื่อเป็นพยานร่วมกันของไฟล์
- สร้างกลุ่มความพร้อมใช้งาน AlwaysOn หรือ AlwaysOn Failover Cluster กับ SIOS DataKeeper Cluster Edition ไม่ว่าในกรณีใดคุณจะติดต่อกับผู้ฟังไคลเอนต์ซึ่งประกอบด้วยทรัพยากรชื่อและทรัพยากร IP เซ็ตอัพ AlwaysOn AG และ Failover Cluster Instances ถึงจุดที่สร้าง balancer load จะเหมือนกับที่ใช้ใน Azure Classic deployment model เป็นเอกสารบนเว็บในหลายแห่งรวมทั้งโพสต์บล็อกของฉันเอง
เคล็ดลับง่ายๆ
ตอนนี้คุณมี AlwaysOn AG หรือ Failover Cluster Instances ที่มีการกำหนดค่าอย่างเต็มที่แล้วคุณอาจสังเกตเห็นว่าคุณไม่สามารถเชื่อมต่อกับชื่อคลัสเตอร์จากเซิร์ฟเวอร์อื่นใดนอกจากโหนดที่โฮสต์ทรัพยากรชื่อคลัสเตอร์ SQL อยู่ ฉันได้รับแจ้งว่าเนื่องจากเครือข่าย Azure ไม่สนับสนุน ARPS ที่ไม่ให้เปล่า ไคลเอนต์ไม่สามารถสื่อสารโดยตรงกับที่อยู่ IP ของคลัสเตอร์ได้ แทนที่จะต้องติดต่อลูกค้ากับ ILB และ ILB จะเปลี่ยนเส้นทางการรับส่งข้อมูลไปยังโหนดที่ใช้งานอยู่ ขั้นตอนที่ 1 คือการสร้าง ILB ณ ตอนนี้ไม่สามารถทำได้ผ่าน Azure Portal ดังนั้นเราจะใช้คำสั่ง Azure PowerShell ต่อไปนี้
[1/6/2016 Update – The directions below assume you are using Azure PowerShell pre-version 1. The script if you are using Azure PowerShell Version 1 or later is detailed in my blog post here.]
Switch-AzureMode -Name AzureResourceManager
เลือก - AzureSubscription - สมัครสมาชิก "MSDN Azure"
# ชื่อการสมัครรับข้อมูลใดก็ตามที่คุณใช้เพื่อสร้าง vNet และ VM ของคุณ
#Declare ตัวแปรของคุณโดยใช้ค่าที่เกี่ยวข้องกับการปรับใช้ของคุณ
$ ResourceGroupName = 'SIOS-EAST-RG'
# Resource Group Name ซึ่งมีการใช้งานโหนด SQL
$ FrontEndConfigurationName = 'FE'
# บอกทุกอย่างที่คุณชอบ
$ BackendConfiguratioName = 'BE'
# บอกทุกอย่างที่คุณชอบ
$ LoadBalancerName = 'ILB'
#Provide ชื่อสำหรับวัตถุสมดุลภายในภายใน
$ Location = 'eastus2'
# ใส่ตำแหน่งศูนย์ข้อมูลของ SQL VM ของคุณ
$ subname = 'PUBLIC'
# ระบุชื่อซับเน็ตที่มีโหนด SQL อยู่
$ ILBIP = '10 .0.0.201 '
# ระบุที่อยู่ IP สำหรับ Listener หรือ Load Balancer
$ subnet = Get-AzureVirtualNetwork -ResourceGroupName $ ResourceGroupName |
Get-AzureVirtualNetworkSubnetConfig -name $ subname
$ FEConfig = New-AzureLoadBalancerFrontendIpConfig
-Name $ FrontEndConfigurationName -PrivateIpAddress $ ILBIP-SubnetId $ subnet.Id
$ BackendConfig = New-AzureLoadBalancerBackendAddressPoolConfig
- ชื่อ $ BackendConfiguratioName
# สร้าง ILB
New-AzureLoadBalancer -Name $ LoadBalancerName -ResourceGroupName
$ ResourceGroupName -Location $ Location
-FrontendIpConfiguration $ FEConfig -BackendAddressPool $ BackendConfig
สร้าง ILB แล้ว
เราควรจะเห็นใน Azure Portal ถ้าเราแสดงรายการออบเจกต์ทั้งหมดในกลุ่มทรัพยากรของเราดังที่แสดงด้านล่าง
ส่วนที่เหลือของการกำหนดค่าที่ฉันแน่ใจได้นอกจากนี้ยังสามารถทำได้ผ่าน PowerShell แต่ฉันจะใช้ GUI ในตัวอย่างของฉัน ถ้าคุณต้องการใช้ PowerShell คุณอาจเขียนสคริปต์ร่วมกันโดยดูที่บทความเริ่มต้นการกำหนดค่า balancer การโหลดภายในโดยใช้ Azure Resource Manager สุจริตบทความที่ทำให้ฉันปวดหัว ฉันจะคิดออกบางวันและพยายามที่จะจัดทำเอกสารในรูปแบบที่เป็นมิตรกับผู้ใช้ ตอนนี้ฉันคิดว่า GUI ดีสำหรับขั้นตอนถัดไป
ทำตามพร้อมกับภาพหน้าจอด้านล่าง ถ้าคุณสูญหายทำตามคำแนะนำในการนำทางที่ด้านบนของ Azure Portal เพื่อดูว่าเราอยู่ที่ไหน
คลิกแท็บการตั้งค่าแบ็กเอนด์แบ็กเอนด์ เลือกพูลย่อยสำรองเพื่ออัพเดตชุดค่าว่างและเครื่องเสมือน บันทึกการเปลี่ยนแปลงของคุณ
ตั้งค่า Balancer's Balancer's Probe โดยคลิก Add บนแท็บ Probe ให้ตั้งชื่อและกำหนดค่าให้ใช้ TCP Port 59999 ฉันได้ทิ้งช่วงเวลาการตรวจสอบและกำหนดเกณฑ์ที่ไม่เหมาะสมต่อการตั้งค่าเริ่มต้น ซึ่งหมายความว่าจะใช้เวลา 10 วินาทีก่อนที่ ILB จะเอาโหนดพาสซีฟออกจากรายการโหนดที่ใช้งานอยู่หลังจากที่ failover นอกจากนี้ยังหมายความว่าลูกค้าของคุณอาจใช้เวลาถึง 10 วินาทีในการเปลี่ยนเส้นทางไปยังโหนดที่ใช้งานใหม่ อย่าลืมบันทึกการเปลี่ยนแปลงของคุณ
ไปที่แท็บ Load Balancing Rule และเพิ่มกฎใหม่ กำหนดกฎชื่อที่สมเหตุสมผล (SQL1433 หรือบางอย่าง) เลือก TCP protocol port 1433 (สมมติว่าคุณใช้อินสแตนซ์เริ่มต้นของ SQL Server) เลือก 1433 สำหรับแบ็กเอนด์พอร์ตด้วย สำหรับแบ็กเอนด์แบ็คเอนด์เราจะเลือกแบ็กเอนด์แบ็คเอนด์ที่เราสร้างไว้ก่อนหน้านี้ (BE) ถัดไปสำหรับ Probe เราจะเลือก Probe ที่เราสร้างไว้ก่อนหน้านี้ เราไม่ต้องการเปิดใช้งานการเก็บข้อมูลของเซสชัน แต่เราต้องการเปิดการใช้งาน Floating IP (Direct Server Return) ฉันได้ตั้งค่าหมดเวลาที่ไม่ได้ใช้งานไว้เป็นค่าดีฟอลต์ แต่คุณอาจต้องการพิจารณาการเพิ่มมูลค่าให้สูงสุด ฉันได้เห็นแอ็พพลิเคชันบางอย่างเช่นข้อความแสดงข้อผิดพลาดของ SAP ล็อกแต่ละครั้งที่การเชื่อมต่อถูกทิ้งและจำเป็นต้องได้รับการจัดตั้งใหม่
ณ จุดนี้มีการกำหนดค่า ILB มีเพียงขั้นตอนสุดท้ายที่ต้องใช้เท่านั้น เราจำเป็นต้องอัพเดตทรัพยากร IP คลัสเตอร์ของ SQL แบบเดียวกับที่เรามีในแบบจำลองการปรับใช้แบบคลาสสิก เมื่อต้องการทำเช่นนั้นคุณจะต้องเรียกใช้สคริปต์ PowerShell ต่อไปนี้ในโหนดคลัสเตอร์เพียงหนึ่งโหนด และจดบันทึกว่า SubnetMask = "255.255.255.255" ไม่ใช่ข้อผิดพลาด ใช้หน้ากาก 32 บิตโดยไม่คำนึงถึงว่าหน้ากากเครือข่ายจริงของคุณคืออะไร
# สคริปต์นี้ควรจะทำงานบนโหนดคลัสเตอร์หลักหลังจากที่ สร้าง balancer โหลดภายใน # กำหนดตัวแปร $ ClusterNetworkName = "เครือข่ายคลัสเตอร์ 1" # ชื่อเครือข่ายคลัสเตอร์ $ IPResourceName = "ที่อยู่ IP ของ SQL 1 (SQLCluster1)" # ชื่อที่อยู่ IP Address $ CloudServiceIP = "10.0.0.201" # IP address ของ Internal Balancer โหลดของคุณ การนำเข้าโมดูล FailoverClusters # หากคุณใช้ Windows 2012 หรือสูงกว่า ใช้คำสั่ง Get-Cluster Resource ถ้าคุณกำลังใช้ Windows 2008 R2, ใช้คำสั่ง res คลัสเตอร์ที่ถูกแสดงความคิดเห็นออก Get-ClusterResource $ IPResourceName Set-ClusterParameter -Multiple @ {"Address" = "$ CloudServiceIP"; "ProbePort" = "59999"; SubnetMask = "255.255.255.255"; "เครือข่าย" = "$ ClusterNetworkName"; "OverrideAddressMatch" = 1; "EnableDHCP" = 0} # cluster res $ IPResourceName / priv enabledhcp = 0 overrideaddressmatch = 1 address = $ CloudServiceIP probeport = 59999 SubnetMask = 255.255.255.255
บันทึกย่อฉบับสุดท้าย
ในการทดสอบครั้งแรกฉันยังคงไม่สามารถเชื่อมต่อกับชื่อรีซอร์ส SQL แม้หลังจากทำตามขั้นตอนทั้งหมดข้างต้นแล้ว หลังจากพุ่งหัวเข้ากับผนังไม่กี่ชั่วโมงฉันพบว่าด้วยเหตุผลบางประการทรัพยากร SQL Cluster Name ไม่ได้ลงทะเบียนไว้ใน DNS ฉันไม่แน่ใจว่าเกิดขึ้นหรือไม่หรือว่าจะเกิดขึ้นอย่างสม่ำเสมอหรือไม่ หากคุณมีปัญหาในการเชื่อมต่อฉันจะตรวจสอบ DNS อย่างแน่นอน นอกจากนี้เพิ่มชื่อคลัสเตอร์ SQL และที่อยู่ IP เป็นระเบียนใหม่หากยังไม่ได้มีอยู่ในนั้น
และแน่นอนว่าอย่าลืมดีล Windows Firewall ที่ดี คุณต้องทำข้อยกเว้นสำหรับ 1433 และ 59999 หรือเพียงแค่ปิดเครื่องจนกว่าคุณจะได้รับการกำหนดค่าอย่างถูกต้องเช่นเดียวกับฉัน คุณอาจต้องการยกระดับ Azure Network Security Groups แทน Windows Firewall ในระบบเพื่อให้ได้ประสบการณ์แบบครบวงจรในทรัพยากร Azure ทั้งหมดของคุณ
ขอให้โชคดีและแจ้งให้เราทราบว่าการตั้งค่า SQL Server AlwaysOn Internal Load Balancer ด้วย Resource Manager เป็นอย่างไร
ทำซ้ำโดยได้รับอนุญาตจาก https://clusteringformeremortals.com/2015/10/29/configuring-the-sql-server-alwayson-ilb-for-the-client-listener-in-azure-resource-manager-arm-deployment- รุ่น sqlpass /