2023年12月7日 星期四

如何設定無網域與無叢集架構的 SQLServer AlwaysOn - 簡易可讀取性複本

        之前多篇文章皆有介紹多種不同高可用性的 AlwaysOn 架構,但通常標準的 AlwaysOn 需要加入網域與架設在叢集服務上,但如果用戶端只是希望可以將資料抄寫到另一個節點,增加可讀副本,也不想用網域與叢集的服務時,此篇的方式,就是一個很節省成本的作法。

在介紹前,我也要先說明一下這個作法的缺點,由於是沒有架設在叢集上,所以沒有自動 Failover 的功能,只能手動進行切換,而且 Listener 也無法使用,所以請在使用前先參考環境需求,再進行使用。

安裝說明:
============

1. 請在二台主機依照單機的方式直接安裝 SQL Server。

2. 在二台主機上,分別啟用 AlwaysOn 可用性群組。

3. 請在二台主機上新增登入與使用者,此帳號只用於 AlwaysON 端點(endpoint)溝通使用,只需要給連線到端點(endpoint)的權限即可。

CREATE LOGIN dbm_login WITH PASSWORD = '1234qwer!@#$';

CREATE USER dbm_user FOR LOGIN dbm_login;

PS: 權限稍後會設定

4. 通常二台主機在沒有加入網域的情況下,可以透過相同的帳號密碼或憑證進行溝通,但此部份我們選擇透過憑證來進行,這也是比較推薦的作法。在第一台主機上設定憑證。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'caryhsu@0316';

CREATE CERTIFICATE dba_certificate WITH SUBJECT = 'carytestclusterless';

BACKUP CERTIFICATE dba_certificate

  TO FILE = 'C:\cary-backup\dba_certificate.cer'

  WITH PRIVATE KEY (

          FILE = 'C:\cary-backup\dbm_certificate.pvk',

          ENCRYPTION BY PASSWORD = 'caryhsu@0316'

      );

PS: 上述的憑證很重要,請要小心保存,如果不見的話,會無法進行還原,其他的功能,如 TDE 也會用到此憑證來進行啟用。

5. 將上述的二個憑證檔案複制到第二台主機上,然後透過下列的指令進行建立憑證。

CREATE CERTIFICATE dba_certificate

AUTHORIZATION dbm_user

FROM FILE = 'C:\cary-backup\dba_certificate.cer'

WITH PRIVATE KEY (

FILE = 'C:\cary-backup\dbm_certificate.pvk',

DECRYPTION BY PASSWORD = 'caryhsu@19810316');

PS: 上述的 dbm_user 是在步驟三建立的使用者。

6. 在二台主機上分別建立端點 (endpoint),並且賦予連接至端點的權限。

CREATE ENDPOINT [Hadr_endpoint]

    AS TCP (LISTENER_PORT = 5022)

    FOR DATABASE_MIRRORING (

    ROLE = ALL,

    AUTHENTICATION = CERTIFICATE dba_certificate,

ENCRYPTION = REQUIRED ALGORITHM AES

);

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login];

PS: 由於我們是設定透過憑證進行驗證,所以此部份一定要透過指令的方式進行

一切設定完成後,我們就可以來設定啟用 AlwaysOn。 

7. 請在第一台主機上執行下列的指令進行建立可用性群組.

CREATE AVAILABILITY GROUP [ClusterlessAG]

WITH (CLUSTER_TYPE = NONE)

FOR REPLICA ON

N'ClusterlessAG1' WITH (

ENDPOINT_URL = N'tcp://ClusterLessAG1:5022',

AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,

FAILOVER_MODE = MANUAL,

SEEDING_MODE = AUTOMATIC,

SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)

),

N'ClusterlessAG2' WITH (

ENDPOINT_URL = N'tcp://ClusterLessAG2:5022',

AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,

FAILOVER_MODE = MANUAL,

SEEDING_MODE = AUTOMATIC,

SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)

);


ALTER AVAILABILITY GROUP [ClusterlessAG] GRANT CREATE ANY DATABASE;

  • 上述中的 SEEDING_MODE = AUTOMATIC 是代表建立後,如果資料庫加入時,會自動同步至另一個節點,如果資料庫過大時,建議設定成 SEEDING_MODE = MANUAL,代表建立後自行還原,藉以減少初使同步的時間。
  • 上述中的 CLUSTER_TYPE = NONE 代表就是沒有使用任何的叢集服務

8. 請在第二台主機上執行,將第二台主機加入可用性群組中。

ALTER AVAILABILITY GROUP [ClusterlessAG] JOIN WITH (CLUSTER_TYPE = NONE);

ALTER AVAILABILITY GROUP [ClusterlessAG] GRANT CREATE ANY DATABASE;

9. 請在第一台主機上執行,將資料庫加入到可用性群組中。

ALTER AVAILABILITY GROUP [ClusterlessAG] ADD DATABASE [testdb];

PS: 加入的資料庫請確認設定為完整的複原模式 (Full Recovery),而且已有進行一次完全備份( Full Backup)。

10. 嘗試要加入 Listener,是可以加入成功,但實際上是無法作用的,一來因為沒有網域,所以此 Listener 是無法進行註冊,而且也沒有自動 Failover,都是手動的方式,所以在連線時,需要特別指定連線到主要節點,還是連線到次要節點,所以在前端的部份,也是需要特別的注意。

沒有留言:

張貼留言