之前多篇文章皆有介紹多種不同高可用性的 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,都是手動的方式,所以在連線時,需要特別指定連線到主要節點,還是連線到次要節點,所以在前端的部份,也是需要特別的注意。
沒有留言:
張貼留言