將Sql Server遷移到Always on集群 - 賬號的同步


Always on環境的建立,網上資料很多,主要是windows集群的建立以及Sql Server Always on的建立,略


容易忽略的是Sql server賬號同步問題(Always on能實現數據庫內部的同步,但是沒法實現instance級別的同步,比如job、賬號等)


下面來說說幾種解決方式:

  1. SQL賬號采用域賬號,讓IIS運行於域賬號下
    1. 如果現狀下的本地sql賬號較少的話還好,否則推行困難,而且還要加入域
  2. SQL賬號采用域賬號,讓IIS運行於本地賬號下,但是在web.config或machine.config中配置模擬賬號
    1. 基本上與第一種相同
  3. SQL賬號采用本地賬號,客戶端連接字符串采用user/pwd方式連接,並且在windows集群中增加一個通用服務,目的是當主sql server服務遷移到另外一台服務器后執行一段sql腳本,這段腳本的作用是重新map本地sql賬號與db的權限關系
    1. 需要與集群的通用服務一起考慮
    2. 需要自己寫腳本,下載
    3. 麻煩
  4. SQL賬號采用本地賬號+域賬號公用方式,域賬號權限關聯到數據庫,並且設置本地sql賬號擁有模擬域賬號權限,同時客戶端使用user/pwd方式連接,並且還需要修改框架:讓每次執行sql操作時先執行切換上下文用戶:EXECUTE AS LOGIN 'domain\user1'
    1. 麻煩點轉移到了框架級別:C#的SqlHelper等需要注入一行SQL來模擬域賬號
    2. 配置也麻煩
  5. SQL賬號采用本地賬號,但是賬號的建立不是直接建立,步驟:從源SQL服務器上導出帶SID的腳本,然后在Always on數據庫中導入帶SID的腳本
    1. 初次時運行
    2. 增加user時,也需要運行
    3. 無需域賬號
    4. 對客戶端沒影響
    5. 這里的腳本用法說明
  6. 使用Always on插件,不成熟,也不清楚能否自動同步
    1. sqlskills.com插件
      1. 能實現user、job、User-defined Server Roles的同步
    2. 都是第三方的,不敢用
  7. 使用Contained Database,這種數據庫能將login user/pwd包含於db級別中,但是連接的時候必須指定具體數據庫名,否則無法建立連接
    1. sql 2012開始支持包含的數據庫
    2. 如果數據庫不多,這種最好
    3. 缺點是如果每個db的賬號多了,同步、維護這些賬號比較麻煩

 


性能方面的思考:

  • 采用了Always on后,所有的提交行為都由Master SQL來處理,因此Master的CPU占用很高(考慮到1台master,5台slave, 並且設置了3台提交成功才算整體的提交成功),而Slave的CPU幾乎閑置。因此最好是用讀寫分離來連接偵聽器IP(寫入)、以及讀取IP(哈西算法)
  • 主要功能是HA+中等的性能考慮
  • 不適用於非常高並發的場景(還是得拆分庫,或者寫DAL)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM