Hybrid cloud MS SQL 混合 Mirror (地端 + 雲端)

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek
5 min readFeb 19, 2021

最近很流行地雲混(地端 + 任一套雲端平台),MS-SQL Mirror 算是最簡單的設計,但MS SQL 管理套件”SSMS”眾多的Bug,常讓不少IT被虐的不要不要的

混合雲是趨勢

提到雲端,這已經是相當成熟的架構,但混合雲會是大勢所趨,地端、雲端各有各的優缺點,因此混合雲目前發展大致上分兩種分類

  • 地雲混 : 私有雲 + 公有雲
  • 雲雲混 : 跨雲架構,類似 AWS + Azure + GCP…

至於要選擇哪一種架構,就需要看企業本身的系統架構、財務能力、資料掌控規範、資安規範、IT維運組織架構而定。

本篇算是MS SQL 地雲混的介紹,其實MS SQL地雲混設定很簡單,透過MS SQL內建的鏡像(Mirror)就可以簡單佈署,但最的就是Mircosoft 提供的MS SQL管理套件 SQL Management Studio (SSMS)SSMS本身Bug 雷眾多,最近剛好公司有個MS SQL地雲混的小case,看著工程師被SSMS的地雷虐到,有感而發,打這篇教學當作紀念一下 XD

1、前置

  • 確定主體 / 鏡像 的 SQL Server 版本一致
  • 主體 / 鏡像的SQL login 帳密、權限一致,也要跟 Service login 帳密一致
  • SQL Service / SQL Agent Service 都用用一樣的Account Login(從Service 修改)
  • Firewall 開通1433、5022

2、流程

  • 設定Service權限
  • 把Service login 的Account 設定入SQL Login Account
  • 在Firewall 上TCP 1433、5022開啟
  • 主體SQL上將Data、交易Log “分開”備出
  • 到鏡像SQL 上選擇 “RESTORE WITH NORECOVERY” 將備份還原

---- 以上都很簡單,以下是雷區,附上掃雷方式 -----

  • 在主體SQL 上 資料庫 → 工作 → 鏡像 → 進入鏡像精靈模式
  • 精靈模式內設定主體login 帳密 → 設定鏡像login帳密

地雷1. 主體 / 鏡像 Service login的帳密,以及SQL login的帳密都要一樣”,不然會出現error 1418 or 102 or 1499

  • 隨著鏡像精靈設定完成後,再把鏡像功能打開時 “一定”會出現 sql error 1418, messeng : 伺服器網路位址 “%.*ls” 無法連上或不存在。 請檢查網路位址名稱,並檢查本機和遠端端點的連接埠是否可正常運作。

地雷2. 如果前置準備有確實完成,這邊的1418就不用查了,因為是SSMS的BUG,繼續下面流程做就好,如果沒開firewall port,就要去查一下是不是主體、鏡像之間port 沒通,也有可能是Account 沒有對應好

ERROR 1418問題範圍很大~除錯不容易
  • 點ok,關掉錯誤訊息
  • 到鏡像SQL 上執行以下query,關閉鏡像SQL 上的 mirror status
ALTER DATABASE DBNAME SET PARTNER OFF
  • 然後在鏡像SQL 上,再執行以下query,讓鏡像去呼叫主體SQL
ALTER DATABASE DBNAME SET PARTNER = 'TCP://IPADDRESS OR FQDN:5022'DBNAME ==> 資料庫名稱
IPADDRESS OR FQDN ==> 主體SQL的IP 或 FQDN
  • 最後到主體SQL上執行以下query,讓mirror 管道串上
ALTER DATABASE DBNAME SET PARTNER = 'TCP://IPADDRESS OR FQDN:5022'DBNAME ==> 資料庫名稱
IPADDRESS OR FQDN ==> 鏡像SQL的IP 或 FQDN

注意 : DBNAME 如果有符號字元的話(-+_!@#%),需要用雙引號,舉例 : "NAME-CD11"

  • 做到這部份就大功告成了

--

--

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek

I am Kirin., I was ShellFans AI Technology’s CTO. Our team specializes in IoT, Blockchain, Cloud and Ai. | https://www.shell.fans