SQL Server 2016 + AlwaysOn 無域集羣

[========]sql

AlwaysOn

AlwaysOn 可用性組概述 (SQL Server)數據庫

搭建 WSFC

配置計算機的 DNS 後綴

  1. 配置計算機的 DNS 後綴,注意在同個工做組



    windows

  2. 每一個節點的機器都要作域名解析,修改 host 文件C:\Windows\System32\drivers\etc
    服務器

安裝故障轉移集羣

  1. 節點服務器添加故障轉移羣集功能
    網絡

  2. 等待安裝完成負載均衡

驗證集羣

  1. 打開故障轉移集羣管理工具
  2. 點擊驗證配置
  3. 添加集羣節點
  4. 運行全部測試
  5. 能夠點擊查看驗證報告,勾選當即使用通過驗證的節點建立集羣

建立集羣

  1. 配置集羣的管理名稱和管理IP
    工具

  2. 等待配置完成
    測試

  3. 能夠查看集羣報告,稍後配置文件共享見證.net

建立文件共享見證

因爲咱們是兩個節點的故障轉移集羣,因此須要加上共享文件夾,若是是奇數節點,這一步是不須要作的!

  1. 配置集羣仲裁
  2. 選擇文件共享見證

  3. 在集羣節點以外的一臺服務器上建立共享文件夾\\XIANGMU4TEST01\share,並設置 Everyone 徹底控制的權限

配置 AlwaysOn

  1. 開啓 AlwaysOn

  2. 須要重啓 SQL Server 服務

  3. 檢查,若是 AlwaysOn 啓用成功,在服務器屬性裏能夠看到啓用HADR爲True

  4. 查看各節點的投票數
SELECT * FROM  sys.dm_hadr_cluster_members;

  1. 查看 cluster
SELECT * FROM SYS.[dm_hadr_cluster]

新建可用性組

可是既然節點沒有加入AD,那麼久不能用域認證,只能用證書認證,所以須要建立證書和端點。在配置可用性組前各節點進行證書認證信任。

  1. 修改 SQL 服務登錄帳號爲本機管理員帳號

  2. 建立證書,兩個節點都要建立證書,注意修改證書名稱
--節點二:建立主密鑰/證書,備份證書。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'AAA111aaa';
GO
CREATE CERTIFICATE Cert_server228
WITH SUBJECT = 'Cert_server228',
START_DATE = '2017-01-01',EXPIRY_DATE = '2099-12-30';
GO
BACKUP CERTIFICATE Cert_server228
TO FILE = 'C:\Storage\Cert_server228.cer';
GO

注意:備份證書的文件夾要先建立好,而且賦予權限

  1. 將建立好的證書放到另外一臺節點服務器,並加入證書
--節點二:建立其餘節點證書
USE master;
GO
CREATE CERTIFICATE Cert_server227
FROM FILE = 'C:\Storage\Cert_server227.cer';
GO

證書建立好後以下

  1. 從新建立端點,受權帳號設置爲本機管理員帳號,驗證方式使用上面建立的證書
--節點:建立端點
CREATE ENDPOINT [testag_endpoint]
    AUTHORIZATION [POSTEST2-2016\Administrator]
    STATE=STARTED
    AS TCP (LISTENER_PORT = 5023, LISTENER_IP = ALL)
    FOR DATA_MIRRORING
    (ROLE = ALL,AUTHENTICATION = CERTIFICATE Cert_server228, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

若是存在已有的端點,則須要將已有端點刪除

  1. 在主節點服務器操做新建可用性組。

  2. 設置可用性組名稱,建議勾選數據庫級別運行情況檢測。
  • 在以前的 AlwaysOn 2012 和 2014 中,若是實例健康出現問題,將觸發故障轉移。若是有一個數據庫有問題,只要實例OK,可用性組就不會故障轉移。
  • 在 AlwaysOn 2016 中,勾選以後,不管是一個實例有問題,仍是一個或多個數據庫有問題,都會發生故障轉移。
  1. 選擇數據庫,要求數據庫已經進行了完整備份

  2. 添加副本節點,並勾選自動故障轉移,設置輔助副本爲可讀副本

  3. 將端點 URL 設置爲 IP 方式,這裏端點會顯示爲咱們上面建立的端點,登錄帳號爲咱們上面設置的帳號

  4. 「備份首選項」和「偵聽器」不須要設置,保持默認就行,可用性偵聽器咱們後面再添加,能夠直接點擊「下一步」

  5. 數據同步這裏建議使用完整的數據庫和日誌備份的方式更方便,須要有一個共享文件夾,而且節點服務器要有相同的數據庫文件目錄結構

  6. 等待可用性組建立成功

  7. 建立成功後數據庫狀態顯示爲已同步

    故障轉移集羣會顯示擁有一個羣集角色

  8. 顯示面板能夠查看集羣信息

建立偵聽器

一個偵聽器包括虛擬IP地址、虛擬網絡名稱、端口號三個元素,一旦建立成功,虛擬網絡名稱會註冊到DNS中,同時爲可用性組資源添加IP地址資源和網絡名稱資源。用戶就可使用此名稱來鏈接到可用性組中。

  1. 添加偵聽器

  2. 選擇使用靜態 IP

  3. 建立成功後,在故障轉移集羣管理器裏的角色節點,能夠看到客戶端訪問名稱和 IP 地址

  4. 鏈接數據庫時使用偵聽器的地址

可讀副本的負載均衡

SQL Server 2016 支持多個只讀副本負載分擔只讀操做。

右鍵一個可用性副本能夠查看副本的只讀性設置:

主角色中的鏈接

主角色中支持的鏈接訪問類型:

  • 容許全部鏈接(ALL):主數據庫同時容許讀寫鏈接和只讀鏈接。這是主角色的默認行爲。
  • 僅容許讀/寫鏈接(READ_WRITE):容許 ApplicationIntent=ReadWrite 或未設置鏈接條件的鏈接。不容許 ApplicationIntent=ReadOnly 的鏈接。僅容許讀寫鏈接可幫助防止客戶錯誤地將讀意向工做負荷鏈接到主副本。

修改腳本:

USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE))
GO

可讀輔助副本

輔助角色支持的鏈接訪問類型:

  • 無鏈接(NO):不容許任何用戶鏈接。輔助數據庫不可用於讀訪問。這是輔助角色中的默認行爲。
  • 僅讀意向鏈接(READ_ONLY):輔助數據庫僅接受鏈接參數 ApplicationIntent=ReadOnly 的鏈接,其它的鏈接方式沒法鏈接。
  • 容許任何只讀鏈接(ALL):輔助數據庫所有可用於讀訪問鏈接。此選項容許較低版本的客戶端進行鏈接。

修改腳本:

USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))
GO

設置數據庫實例監聽端口

  1. Sql Server 配置管理工具找到數據庫實例的網絡配置,

  2. 右鍵 TCP/IP,默認配置的是動態端口

  3. 這裏修改成固定端口 1433

  4. 最後須要重啓 Sql Server 服務。

配置可用性組只讀路由

執行下面 sql 獲取可用性組名稱:

select name,* from  sys.availability_groups

執行下面 sql 獲取要配置的可用性副本名稱(服務器實例):

select replica_server_name,* from sys.availability_replicas
  1. 爲可用性副本(服務器實例)配置只讀路由 URL,路由地址能夠填 IP 或者計算機名,端口填數據庫實例綁定的 TCP/IP 端口。
    執行腳本:
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = N'TCP://10.98.98.227:1433'))
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST2-2016\POSTEST' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = N'TCP://10.98.98.228:1433'))
GO

也能夠右鍵可用性組選擇屬性,經過 UI 方式更改

  1. 每一個自動轉移副本配置只讀路由列表
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON
N'POSTEST1-2016\POSTEST' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('POSTEST2-2016\POSTEST'),'POSTEST1-2016\POSTEST')));
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON
N'POSTEST2-2016\POSTEST' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('POSTEST1-2016\POSTEST'),'POSTEST2-2016\POSTEST')));
GO

使用「()」對只讀路由列表進行分組,
List 1: 'POSTEST1-2016\POSTEST'
List 2: 'POSTEST2-2016\POSTEST'
按以下方式工做:

  1. 路由到第一個列表中的副本,若是第一個列表存在多個副本,則對讀取鏈接進行輪詢分發。
  2. 若是第一列表中任一副本不可用了,路由將繼續到第一個列表中的其餘可用副本。
  3. 若是第一個列表中的全部副本都不可訪問,將會路由到下一個列表
  4. 若是第一個列表中的任一副本可用,將會恢復路由到第一個列表

  5. 測試只讀路由效果,sqlcmd 使用 Readonly 指定爲只讀鏈接,
sqlcmd -S 10.98.98.231 -K Readonly -d test -Q "select @@servername" -e

只讀鏈接被鏈接到輔助副本

使用 SSMS 或者 EF 等須要在鏈接字符串設置參數ApplicationIntent=ReadOnly

注意:
想要使用輔助副本負載讀操做,必需要在鏈接字符串中配置爲只讀鏈接,而後在程序中指定使用只讀鏈接進行數據庫讀取操做,AlwaysOn 自身不能自動負載均衡。

配置帳號

爲每一個數據庫節點配置登錄帳號,而後經過監聽器使用該帳號登錄數據庫。

  1. 主副本建立登錄帳號 satest

  2. 查看主庫上該帳號的 sid 爲庫名
SELECT * FROM [test]..sysusers
  1. 在副本數據庫上建立對應帳號,其中 sid對應的值是主庫上所查到的sid的值
CREATE LOGIN [satest] WITH PASSWORD=N'xxxxxxx',
SID =0x99AD266AFD26F841B3E49EF9633B0D4B, DEFAULT_DATABASE=[test],
 CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

使用故障轉移

建議使用 SSMS 中 AlwaysOn 進行手動故障轉移。

文章參考:
SQL Server 2016 無域羣集配置 AlwaysON 可用性組
SQL Server 2016 AlwaysOn 安裝及配置介紹
SQL SERVER 2016 AlwaysOn 無域集羣+負載均衡搭建與簡測 https://www.cnblogs.com/ajiangg/p/3668936.html

相關文章
相關標籤/搜索