當SQL Server愛上Linux:配置 SQL Server 2017 上的可用性組初體驗

2021-02-15 數據和雲

作者 | 張樂奕:Oracle ACE 總監,ACOUG (中國 Oracle 用戶組)聯合發起人。Oracle 資料庫高可用解決方案與  Exadata 一體機專家。長於資料庫故障診斷,性能調優。作為多家知名論壇版主,熱衷社區技術分享,同時也是 Exadata 用戶組的發起人,組織策劃並作為技術分享者的活動已超過百場。

當微軟認真起來,我們發現一切皆有可能。

雖然在關係型資料庫領域Oracle是當之無愧的王者,但是SQL Server卻也一直排在前三,下圖是5月DB-Engines上的資料庫流行度排行。

在2017年,微軟宣布SQL Server將可以運行在Linux上,擁抱開源讓微軟贏得了很多讚譽,SQL Server 也成為了 2016年 DB-Engines 的年度資料庫,我們也發表過一些文章,回顧參考:SQL Server for Linux 下一版本的公共預覽。

在之前的預覽版中,Public preview of the next release of SQL Server on Linux,Always On Availability Groups 還是不支持的功能,但是在最新的 SQL Server 2017 on Linux 中,該功能已經引入。 讓我們一起了解SQL Server的變化。

在 Always On AG 中如果需要自動 Failover 至少需要集群中有 3 臺伺服器,但是我只是測試功能,因此只使用了兩臺伺服器。並且本文不涉及任何 Pacemaker 的設置,完全是資料庫層面的 AG 配置。

我使用的是 Google Compute Engine 的2臺 VM,最低配的 1vCPU,3.75GB 內存。

如果要通過遠程客戶端配置 SQL Server,則需要在 VPC network 的 Firewall rules 中將 1433 埠開放,如果是在虛擬機本地的 sqlcmd 中操作,則無需配置。

$ cat /etc/centos-release

CentOS Linux release 7.4.1708 (Core)

在 /etc/hosts 中配置雙方伺服器的名稱和IP位址的解析,以保證兩臺機器可以通過伺服器名稱互相訪問。

重要!伺服器主機的 hostname 必須少於等於 15 個字符,否則在配置過程會出現各種莫名其妙的權限報錯。

SQL Server for Linux 的安裝非常簡單,可以參考我之前的這篇文章。


Public preview of the next release of SQL Server on Linux

執行範圍:在所有機器上執行

安裝完的 SQL Server,默認是沒有啟用 AlwaysOn AG 功能的,需要手工開啟,開啟的方法很簡單。開啟該功能需要重啟資料庫實例。

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1

sudo systemctl restart mssql-server

執行範圍:在所有機器上執行

這一步不是必須的。

ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);

執行範圍:在所有機器上執行

CREATE LOGIN dbm_login WITH PASSWORD = 『YourPassword』;

CREATE USER dbm_user FOR LOGIN dbm_login;

執行範圍:在 Primary Replica 機器上執行

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourPassword';

CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';

BACKUP CERTIFICATE dbm_certificate

   TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'

   WITH PRIVATE KEY (

   FILE = '/var/opt/mssql/data/dbm_certificate.pvk',

   ENCRYPTION BY PASSWORD = 'YourPassword'

   );

將生成的 dbm_certificate.cer 和 dbm_certificate.pvk 文件 scp 到另外一臺伺服器的相同位置並修改屬主,這臺伺服器就是 Secondary Replica。

cd /var/opt/mssql/data

chown mssql:mssql dbm_certificate.*

然後在這臺伺服器上導入認證。

執行範圍:在 Secondary Replica 機器上執行

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourPassword';

CREATE CERTIFICATE dbm_certificate

AUTHORIZATION dbm_user

FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'

WITH PRIVATE KEY (

FILE = '/var/opt/mssql/data/dbm_certificate.pvk',

DECRYPTION BY PASSWORD = 'YourPassword'

);

執行範圍:在所有機器上執行

CREATE ENDPOINT [Hadr_endpoint]

AS TCP (LISTENER_PORT = 5022)

FOR DATA_MIRRORING (

ROLE = ALL,

AUTHENTICATION = CERTIFICATE dbm_certificate,

ENCRYPTION = REQUIRED ALGORITHM AES

);

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

use master

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

創建 Availability Groups

執行範圍:在 Primary Replica 機器上執行

CREATE AVAILABILITY GROUP [ag1]

   WITH (CLUSTER_TYPE = EXTERNAL)

   FOR REPLICA ON

   N'centos1' WITH (

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

  AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

  FAILOVER_MODE = EXTERNAL,

  SEEDING_MODE = AUTOMATIC

   ),

   N'centos2' WITH (

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

  AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

  FAILOVER_MODE = EXTERNAL,

  SEEDING_MODE = AUTOMATIC

   );

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

在主庫上創建了 AG 之後,備庫需要加入 AG。

執行範圍:在 Secondary Replica 機器上執行

ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

這裡新建一個資料庫 db1,將它加入到 ag1 中。由於上面設置的 SEEDING_MODE 參數為 AUTOMATIC,因此這個 db1 資料庫將會在備庫實例中自動創建,後續對於該庫進行的任何操作也會自動複製到備庫中。

執行範圍:在 Primary Replica 機器上執行

CREATE DATABASE [db1];

ALTER DATABASE [db1] SET RECOVERY FULL;

BACKUP DATABASE [db1]

   TO DISK = N'/var/opt/mssql/data/db1.bak';

ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];

  允許 Secondary Replica 可以被只讀訪問

在以上的創建過程中創建出來的 AG 中的備庫是不允許被訪問的,如果要訪問將會遇到以下錯誤。

The target database, 『db1』, is participating in an availability group and is currently not accessible for queries. Either data movement is suspended or the availability replica is not enabled for read access. To allow read-only access to this and other databases in the availability group, enable read access to one or more secondary availability replicas in the group. For more information, see the ALTER AVAILABILITY GROUP statement in SQL Server Books Online.

執行範圍:在 Primary Replica 機器上執行,立刻生效。

use master

ALTER AVAILABILITY GROUP ag1

   MODIFY REPLICA ON

   N'centos2' WITH (

  SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL )

   );

在主庫中隨便創建一張新表,再插入幾條記錄。

1> use db1

2> select * into t_test from sys.databases;

3> insert into t_test select * from t_test;

4> GO

Changed database context to 'db1'.

(5 rows affected)

(5 rows affected)

在備庫中查詢,這張表已經複製成功。

1> use db1

2> select count(*) from t_test;

3> GO

Changed database context to 'db1'.

--

 10

(1 rows affected)

如果在備庫中嘗試更新數據,將會遇到以下錯誤。

1> delete from t_test;

2> GO

Msg 3906, Level 16, State 2, Server centos2, Line 1

Failed to update database "db1" because the database is read-only.

通過以下這些視圖可以監控 AG 中各個部分的狀態。

group的監控

select * from sys.availability_groups;

select * from sys.availability_groups_cluster;

select * from sys.dm_hadr_availability_group_states;

replica 的監控

select * from sys.availability_replicas;

select * from sys.dm_hadr_availability_replica_states;

select * from sys.dm_hadr_availability_replica_cluster_nodes;

select * from sys.dm_hadr_availability_replica_cluster_states;

在 AG 中的 database 的監控

select * from sys.availability_databases_cluster;

select * from sys.dm_hadr_database_replica_states;

select * from sys.dm_hadr_database_replica_cluster_states;

select name,database_id,replica_id,group_database_id from sys.databases;


參考文檔

本文配置步驟的參考文檔為:

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-configure-ha?view=sql-server-linux-2017

註:詳情請戳原文連結

關注公眾號:數據和雲(OraNews)回復關鍵字獲取

『2017DTC』,2017 DTC 大會 PPT

『DBALIFE』,「DBA 的一天」海報

『DBA04』,DBA 手記4 經典篇章電子書

『RACV1』, RAC 系列課程視頻及 PPT

『122ARCH』,Oracle 12.2 體系結構圖

『2017OOW』,Oracle OpenWorld 資料

『PRELECTION』,大講堂講師課程資料

相關焦點

  • SQL Server 2017 正式發布:同時支持 Windows 和 Linux
    -2017-on-windows-linux-and-docker-ga微軟在去年 3 月首次對外宣布了 Linux 版的 SQL Server,並於今年 7 月發布了首個公開 RC 版。前幾日在美國奧蘭多召開的微軟 Ignite 2017 大會上,微軟宣布 SQL Server 2017 將於10月2日正式發布。現在,SQL Server 2017 已正式發布。這是 SQL Server 歷史上首次同時發布 Windows 和 Linux 版。此外,微軟還發布了能使用 Docker 部署的容器版本。
  • Linux有問必答:如何在Linux Mint Cinnamon啟用桌面共享
    問題:我
  • 關於SQL Server 2016:企業CIO們所需要了解的
    其與Azure的充分集成整合為廣大企業用戶在雲服務中的可用性和性能的大幅提升帶來了一個新的方法。而微軟新版Power BI商業智能服務在今天也成為了一個選項,其在未來將成為SQL Server reporting的關鍵部分之一。另外,在該版本中,微軟將為您帶來Linux支持,為您企業組織從甲骨文資料庫的遷出提供了一個新的選擇。
  • A Problem : PAM Authentication failed - cannot start X server.
    But it failed and the following words show up: "xauth: file /home/XXX/.serverauth.3948 does not exist(EE)Fatal server error:(EE)PAM Authentication failed - cannot start xserver
  • 你們想要的:QQ跑在Linux上
    之前在寫《開源的macOS和linux版微信》時,有小夥伴問怎麼搞QQ,做為一個上了年紀的人,我已經不怎麼用QQ了。
  • elementaryOS: 2018最美Linux
    當然gentoo和arch還是有點門檻的,做為小白ubuntu也不是不好,起碼裝完就可以用了,而且debian這一套包管理系統還是相當不錯的,不過ubuntu也是安裝裝一大堆東西,然後如果你想編譯個軟體,你還會發現整一套工具鏈簡直是一個都沒裝,你裝上後,發現編譯起來也是各種缺庫,真不知道他裝辣麼大的系統都安裝了些什麼。還有unity我覺得非常難看和難用,還好unity已死。
  • 深度探索Hyperledger技術與應用之超級帳本初體驗(附部署代碼)
    2017-08-09 14:49:04.652 UTC [msp] GetLocalMSP -> DEBU 001 Returning existinglocal MSP2017-08-09 14:49:04.652 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining
  • 好消息:FydeOS支持Linux桌面程序運行環境
    FydeOS(原名 Flint OS)基於Chromium OS二次開發,繼承了Chrome OS的所有特性,適配更多的硬體品類,並為中國大陸的用戶提供了本土化的修改,用戶可以自行註冊本地帳號用以登陸,帳號體系整體與Google綁定的網絡服務剝離,讓大陸用戶也能獲得媲美Chrome OS的優質用戶體驗
  • Linux最佳聊天軟體:Skype 4.3輕體驗
    如果是 ibus 用戶,就要設置一下 QT 配置,否則不會光標跟隨哦。via: http://www.mintos.org/software/new-skype-linux.html 本文地址:http://linux.cn/article-3261-1.html
  • weblogic(CVE-2016-0638,CVE-2016-3510,CVE-2017-3248)POC
    coding: utf-8 -*-import socketimport timeimport re##  @author iswin@threathunter.org#  reffer: nessus#VUL=['CVE-2016-0638','CVE-2016-3510','CVE-2017
  • GitHub:傳統Linux系統的終結者?
    Matthew Miller解釋說,兩者之間並非直接的因果關係,Linux的核心用戶多為開源軟體開發者,因為GitHub的出現,開源軟體與Linux發行版從前的那種共生關係被打破。之前,在Linux上安裝一個軟體,需要自己從官網或者類似SourceForge上的站點下載動手安裝,存在形式多種多樣。
  • Katyusha掃描器:基於Telegram的全自動SQL注入工具
    本文所要介紹的是一個最近在地下論壇上推出的全新強大的黑客工具,有了它,任何人都可以快速地進入SQL注入漏洞的網站並進行大規模的掃描,而這所有的一切都是使用Telegram來傳遞消息並從智慧型手機上進行控制的。這款全世界通用的自動化SQLi漏洞掃描器名為Katyusha 掃描器,於今年4月份首次浮出水面,據了解這是一位講俄語的人在一個流行的黑客論壇上發表的。