1. 程式人生 > >當SQL Server愛上Linux:配置 SQL Server 2017 上的可用性組初體驗

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

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

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

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

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

在2017年,微軟宣佈SQL Server將可以執行在Linux上,擁抱開源讓微軟贏得了很多讚譽,SQL Server 也成為了

2016年 DB-Engines 的年度資料庫,我們也發表過一些文章,回顧參考:SQL Server for Linux 下一版本的公共預覽

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

1

  準備測試環境的伺服器

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

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

640?wx_fmt=jpeg

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

2

  作業系統:CentOS7

$ cat /etc/centos-release

CentOS Linux release 7.4.1708 (Core)

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

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

3

  安裝SQL Server

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

Public preview of the next release of SQL Server on Linux

4

  啟用AlwaysOn AG功能

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

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

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

sudo systemctl restart mssql-server

5

  啟用 AlwaysOn_health 事件

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

這一步不是必須的。

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

6

  建立資料庫複製的使用者

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

CREATE LOGIN dbm_login WITH PASSWORD = ‘YourPassword’;

CREATE USER dbm_user FOR LOGIN dbm_login;

7

  建立認證

執行範圍:在 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'

);

8

  建立資料庫複製的 Endpoint

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

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];

9

  建立 Availability Groups

建立 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;

10

  將資料庫加入 AG

這裡新建一個數據庫 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];

11

  允許 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 )

   );

12

  測試

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

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.

13

  監控 AG 狀態

通過以下這些檢視可以監控 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’,大講堂講師課程資料

640?wx_fmt=png

相關推薦

SQL Server愛上Linux配置 SQL Server 2017 可用體驗

作者 | 張樂奕:Oracle ACE 總監,ACOUG (中國 Oracle 使用者組)聯合發

部署AlwaysOn第二步配置AlwaysOn,創建可用

cal mic stand 端口號 影響 detection ner hab 選項 AlwaysOn是在SQL Server 2012中新引入的一種高可用技術,從名稱中可以看出,AlwaysOn的設計目標是保持數據庫系統永遠可用。AlwaysOn利用了Windows服務器故

SQL Server 2016 Failover +AlwaysOn 增加數據庫到可用

服務器 water path eba dfa instance logback 個數 ilove SQL Server Failover +AlwaysOn 增加數據庫到可用性組前面幾篇文章都已經詳細介紹了SQL Server Failover +AlwaysOn 的配置,

SQL Server On Linux基於實際專案案例,總結功能支援情況及相關問題解決方案,講如何快速完成遷移

  上個月,有個朋友問我說Sql Sever向Mysql遷移有什麼好的經驗分享,他們公司客戶明確提出不再提供Windows伺服器,現在計劃Mysql遷移。我說Mysql遷移成本太高了,不妨可以瞭解一下SQL Server On Linux再做決定。於是,我把之前給運維分享的Word文件發給了他,告訴他,如果可

SQL Server on Linux: How? Introduction: SQL Server Blog

nco adding existing initial planning for rec instance thum SQL Server Blog Official News from Microsoft’s Information Platform h

SQL Server 2016 無域群集配置 AlwaysON 可用

windows server 2016 與 sql server 2016 高可用允許不許要加入AD ,管理方面省了挺多操作,也不用擔心域控出現問題影響各伺服器了。 本測試版本: window server 2016 datacenter + sql server 201

Linux配置apache支援php

對apache的主配置檔案進行修改 vi /application/apache/conf/httpd.conf 1、增加下面內容 AddType application/x-httpd-php .php .phtml       以php結尾的,交給php處理

Linux配置apache支持php

blog col -c 修改 conf 保存 配置 apach ack 對apache的主配置文件進行修改 vi /application/apache/conf/httpd.conf 1、增加下面內容 AddType application/x-httpd-php .ph

PL/SQL知識總結(1)PL/SQL塊結構和流程控制語句

前一段時間系統學習了Oracle PL/SQL的有關知識,內容有點多,所以覺得自己要總結一下,順便回顧,大家共同學習。 PL/SQL的概念 PL/SQL是 Procedure Language & Structured Query Languag

springcloud(八)配置中心服務化和高可用

artifact 會有 mage set color config 客戶 prop XML 在前兩篇的介紹中,客戶端都是直接調用配置中心的server端來獲取配置文件信息。這樣就存在了一個問題,客戶端和服務端的耦合性太高,如果server端要做集群,客戶端只能通過原始的方式

Spring Cloud配置中心服務化和高可用(08)

在前兩篇的介紹中,客戶端都是直接呼叫配置中心的server端來獲取配置檔案資訊。這樣就存在了一個問題,客戶端和服務端的耦合性太高,如果server端要做叢集,客戶端只能通過原始的方式來路由,server端改變IP地址的時候,客戶端也需要修改配置,不符合springcloud服務治理的理念。sprin

java B2B2C Springcloud多租戶電子商城系統(八)配置中心服務化和高可用

server端改造 1、新增依賴 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifact

Java B2B2C o2o多使用者商城 springcloud架構(八)配置中心服務化和高可用

server端改造 1、新增依賴 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifact

阿里雲,Linux伺服器配置JDK,親測可用

網上有很多的文章,但是嘗試了很多了 因為配置失敗過重置過一次伺服器。找到一篇配著成功的 1、檢查一下系統中的jdk版本 [[email protected] software]# java -version 顯示: openjdk version "1

比樹莓派配置好接地氣的香蕉派上手體驗

nas 好的 ipa android 方便 avi 輸入 net for 今天早上在百忙之中抽出1個小時體驗了一個前幾天送來的香蕉派。整體上感覺還是挺好的。 首先刷好SD卡。我用的系統是樹莓派Raspbian改成的BananaPi系統

Microsoft SQL Server for Linux安裝和配置

fig fcm zone linux for onf targe 查看 nbsp 客戶端   雖說mssql for linux早已經出來了,但原本沒有打算這麽早就去嘗試的,無奈之下還是得先嘗試用了,這裏分幾篇介紹我在用mssql for linux時遇到的問題,不得不說作

Linux使用mssql-conf工具配置SQL Server 2017

edi lpc 可用內存 address per filter cor 文件的 flags mssql-conf是在Linux上安裝SQL Server 2017後的一個配置腳本。你可以使用這個實用工具設置以下參數:Agent啟用SQL Server代理Collation設

Linux使用環境變量配置SQL Server設置

日誌文件 初始設置 產品 pad als 包括 dir run 情況下 你可以使用不同的環境變量在Linux上配置SQL Server 2017。這些變量用於兩個場景:使用mssql-conf setup命令配置初始化設置。配置一個新的Docker容器中的SQL Serve

SQL Server On Linux(4)——Linux 初步配置(1)

接上文:SQL Server On Linux(3)——SQL Server 2019 For Linux 下載並部署示例資料庫 本文聊一下Linux,因為這個系列是Linux上的SQL Server,所以我們有必要初步瞭解一下這個基石,地基不穩那麼上面搭建的東西也必然搖搖晃

SQL server 查詢出現---“子查詢返回的值不止一個。子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表達式時,這種情況是不允許的。”SQL查詢錯誤解析---

gui 允許 select 查詢語句 一對一 行數 style sql 之前 最近用select進行數據篩選,碰到下面的這個錯誤: ---子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表達式時,這種情況是不