日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

Ubuntu上配置SQL Server Always On Availability Group

發布時間:2023/12/4 Ubuntu 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu上配置SQL Server Always On Availability Group 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面簡單介紹一下如何在Ubuntu上一步一步創建一個SQL Server AG(Always On Availability Group),以及配置過程中遇到的坑的填充方法。

?

目前在Linux上可以搭建兩種類型的SQL Server AG,一種是高可用性的結構同時使用Cluster服務器提供業務連續性。這種結構包括read-scale節點。接下來就會介紹這種AG的搭建方法。另外一種是沒有Cluster服務的read-scale AG,這種結構僅僅提供只讀的可擴展性,不提供高可用性功能。關于如何創建這種簡單的AG請參考:Configure read-scale availability group for SQL Server on Linux。

另外在CREATE AVAILABILITY GROUP時可以指定CLUSTER TYPE:

  • WSFC:Windows server failover cluster。這個是Windows系統上的默認值;

  • EXTERNAL:非Windows server上的failover cluster,比如Linux上的Pacemaker;

  • NONE:不包含cluster manager,指的是創建read-scale類型的Availability Group。

其中Linux可以使用EXTERNAL或NONE,我理解的是EXTENRAL功能就是類似目前SQL Server中的AG,NONE則是一種新類型,沒有Cluster功能的不支持高可用性和災難恢復的AG。主要作用是分擔主服務器的負載,支持多個只讀備用節點,同時這種類型也支持Windows上使用,是SQL Server 2017新支持的功能。更多詳細的信息請參考這里:Read-scale availability groups。

?

接下來進入主題主要介紹一下高可用性結構的Availability Group的搭建方法。

?

1.????? 安裝及配置SQL Server

一個SQL AG至少有兩個以上的節點,由于環境有限,這里只安裝一個最簡單的包含兩個節點的AG。首先是按照SQL Server on Ubuntu——Ubuntu上的SQL Server(全截圖)中的介紹,安裝兩個Ubuntu機器和SQL Server。

Note:同一個AG的多個節點必須都是實體機或者虛擬機,當都是虛擬機的時候也必須都在同一個虛擬化平臺上,原因是由于Linux需要用fencing agent去隔離節點上的資源,不同平臺fencing agent類型是不同的,詳細參考Policies for Guest Clusters。

?

2.????? 創建AG

在Linux上,必須先創建AG才能把它當成一個資源加到Cluster中進行管理。下面介紹一下如何創建AG。

a)?????? 準備工作:

更新每一個節點服務器的機器名符合這個要求:15個字符或者更少;網絡上是唯一的。如果不符合要求可以使用如下命令更改機器名:

sudo vi /etc/hostname

使用如下命令修改Hosts文件以保證同一個AG中多個節點可以互相通信

sudo vi /etc/hosts

這里一定注意:修改后可以用ping命令嘗試ping hostname,必須返回對應的真正IP地址才行,也就是Hosts文件中不能包含類似hostname和127.0.0.1的對應記錄,配置后如下,注意其中”127.0.1.1?? Ubuntu1604Bob2”這行被我注釋了,否則開啟Cluster 服務的時候可能會有問題:

?

如果不注釋,ping hostname的返回結果是127.0.1.1,注釋后返回的是真正IP:

需要返回真正IP后期配置才好使。

另外可以用這個命令查看當前server的IP:

sudo ip addr show

b)????? 在所有節點SQL Server上開啟Always On Availability Group功能并重啟服務:

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

c)?????? 在所有節點上執行SQL語句開啟AlwaysOn_health事件會話以方便診斷問題:

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

更多關于Event Session信息可以參考:AlwaysOn Extended Events。

d)????? 創建db mirroring endpoint使用的用戶:

CREATE LOGIN dbm_login WITH PASSWORD = '**<Your Password>**';CREATE USER dbm_user FOR LOGIN dbm_login;

e)????? 創建證書:

Linux上的SQL Server Mirroring Endpoint是用證書去認證通信的。下面的命令創建一個master key和證書并備份。連接到Primary端SQL Server并執行如下命令:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';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 = '**<Private_Key_Password>**');

f)??????? 把證書的備份復制到所有的非Primary節點上,同時使用它創建證書:

先在Primary節點上執行如下命令復制證書的備份到其它節點上:

cd /var/opt/mssql/datascp dbm_certificate.* root@**<node2>**:/var/opt/mssql/data/

Note:如果遇到Permission denied,可以使用sz和rz命令通過主機來傳輸文件。

再在目的端Secondary節點上執行如下命令給用戶mssql添加足夠的權限:

cd /var/opt/mssql/datachown mssql:mssql dbm_certificate.*

最后在目的端Secondary節點上利用備份的證書創建證書:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';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 = '**<Private_Key_Password>**');

g)?????? 在所有節點上創建database mirroring endpoint:

CREATE ENDPOINT [Hadr_endpoint]AS TCP (LISTENER_IP = (0.0.0.0), LISTENER_PORT = **<5022>**) FOR DATA_MIRRORING (ROLE = ALL,AUTHENTICATION = CERTIFICATE dbm_certificate,ENCRYPTION = REQUIRED ALGORITHM AES);ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login];

Note:這里Listener IP暫時不能修改,只能是0.0.0.0,目前有BUG,未來可能會修復。

h)????? 在Primary節點上創建AG:

CREATE AVAILABILITY GROUP [UbuntuAG]WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL) FOR REPLICA ONN'**<node1>**'WITH (ENDPOINT_URL = N'tcp://**<node1>**:**<5022>**',AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,FAILOVER_MODE = EXTERNAL,SEEDING_MODE = AUTOMATIC),N'**<node2>**'WITH (ENDPOINT_URL = N'tcp://**<node2>**:**<5022>**',AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,FAILOVER_MODE = EXTERNAL,SEEDING_MODE = AUTOMATIC);ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

Note:執行過程中可能會出現這個警告”Attempt to access non-existent or uninitialized availability group with ID”,暫時忽略即可,未來版本可能會修復。

下圖中UbuntuAG2是新創建的AG,Secondary節點還處于OFFLINE狀態:

i)??????? 把其它Secondary節點加入到AG中:

ALTER AVAILABILITY GROUP [UbuntuAG] JOIN WITH (CLUSTER_TYPE = EXTERNAL);ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

下圖為添加完節點后的狀態:

j)??????? 測試:創建一個DB并加入到剛剛創建的AG中:

CREATE DATABASE [db1];ALTER DATABASE [db1] SET RECOVERY FULL;BACKUP DATABASE [db1]TO DISK = N'var/opt/mssql/data/db1.bak';ALTER AVAILABILITY GROUP [UbuntuAG] ADD DATABASE [db1];

k)?????? 驗證:在Secondary端查看DB是否已經成功同步過去了:

SELECT * FROM sys.databases WHERE name = 'db1';GOSELECT DB_NAME(database_id) AS 'database', synchronization_state_desc FROM sys.dm_hadr_database_replica_states;

這時,一個簡單的AG就創建好了,但是它不能提供高可用性和災難恢復功能,必須配置一個Cluster技術才能好使。如果上述h)和i)步驟的TSQL更換成以下兩個,則創建出來的就是read-scale類型的AG。

  • 創建AG命令:

CREATE AVAILABILITY GROUP [UbuntuAG]WITH (CLUSTER_TYPE = NONE) FOR REPLICA ONN'**<node1>**' WITH (ENDPOINT_URL = N'tcp://**<node1>**:**<5022>**',AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,FAILOVER_MODE = MANUAL,SEEDING_MODE = AUTOMATIC,SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)),N'**<node2>**' WITH (ENDPOINT_URL = N'tcp://**<node2>**:**<5022>**',AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,FAILOVER_MODE = MANUAL,SEEDING_MODE = AUTOMATIC,SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL));ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

把Secondary節點加到AG中命令:

ALTER AVAILABILITY GROUP [UbuntuAG] JOIN WITH (CLUSTER_TYPE = NONE);ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

Note:這時的AG是沒有Listener的,目前版本也暫時無法創建Listener。

?

3.????? 配置一個集群資源管理器,如Pacemaker

具體步驟如下:

a)?????? 在所有的Cluster節點上安裝和配置Pacemaker:

先設置防火墻允許相關端口通過(包括Pacemaker high-availability service、SQL Server Instance和Availability Group Endpoint),

sudo ufw allow 2224/tcpsudo ufw allow 3121/tcpsudo ufw allow 21064/tcpsudo ufw allow 5405/udpsudo ufw allow 1433/tcp # Replace with TDS endpointsudo ufw allow 5022/tcp # Replace with DATA_MIRRORING endpointsudo ufw reload

或者也可以直接禁用防火墻:

sudo ufw disable

在所有節點上安裝Pacemaker軟件包:

sudo apt-get install pacemaker pcs fence-agents resource-agents

設置Pacemaker和Corosync軟件包在安裝時創建的默認用戶的密碼,需保證所有節點上密碼一樣:

sudo passwd hacluster

b)????? 啟用并開啟pcsd和Pacemaker服務:

sudo systemctl enable pcsdsudo systemctl start pcsdsudo systemctl enable pacemaker

執行過程中可能出現這個錯誤”pacemaker Default-Start contains no runlevels, aborting.”,可以暫時忽略。

c)?????? 創建Cluster并啟動:

首先為了防止有Cluster的殘余配置文件影響后期搭建,可以先執行如下命令刪除已經存在的Cluster:

sudo pcs cluster destroy # On all nodessudo systemctl enable pacemaker

然后創建并配置Cluster:

sudo pcs cluster auth **<nodeName1>** **<nodeName2>** -u hacluster -p **<password for hacluster>**sudo pcs cluster setup --name **<clusterName>** **<nodeName1>** **<nodeName2…>**sudo pcs cluster start --all

這時可能會出現這個錯誤”Job for corosync.service failed because the control process exited with error code. See "systemctl status corosync.service" and "journalctl -xe" for details.”診斷解決方法如下:

  • 根據2-a)中的描述查看是否有問題;

  • 使用如下命令查看配置文件中的Log路徑是什么。

vi /etc/corosync/corosync.conf

  • 查看相關文件是否存在,如不存在,則創建相關文件,假設上圖中logfile路徑為/var/log/cluster/corosync.log同時該文件還不存在,則執行如下命令,

sudo mkdir /var/log/clustersudo chmod 777 /var/log/clustersudo echo >> /var/log/cluster/corosync.log

d)????? 配置隔離:STONITH。目前測試環境為了簡單,暫時不配置了,以后會更新。正常來說生產環境需要一個fencing agent去隔離資源,關于支持信息請參考這里:Support Policies for RHEL High Availability Clusters - Virtualization Platforms。

另外我們這里先執行以下命令禁用隔離:

sudo pcs property set stonith-enabled=false

e)????? 設置start-failure-is-fatal為false:

pcs property set start-failure-is-fatal=false

默認值是true,當為true的時候,如果Cluster第一次啟動資源失敗,在自動Failover操作后,需要用戶手動清空資源啟動失敗的數量記錄,使用這個命令重置資源配置:

pcs resource cleanup <resourceName>

?

4.????? 添加AG到Cluster集群中

具體步驟如下:

a)?????? 在所有節點上安裝與Pacemaker集成的SQL Server資源包:

sudo apt-get install mssql-server-ha

b)????? 在所有節點上創建Pacemaker用的SQL Server登錄用戶:

USE [master]GOCREATE LOGIN [pacemakerLogin] with PASSWORD= N'<Your Password>'ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin]

也可以不給sysadmin權限,給上如下足夠的權限即可:

GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::UbuntuAG TO pacemakerLogin

c)?????? 在所有節點上,保存SQL Server Login的信息:

echo 'pacemakerLogin' >> ~/pacemaker-passwdecho '<Your Password>' >> ~/pacemaker-passwdsudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwdsudo chown root:root /var/opt/mssql/secrets/passwdsudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root

d)????? 在Cluster中Primary節點上創建AG的資源:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=UbuntuAG --master meta notify=true

e)????? 在Cluster中Primary節點上創建虛擬IP資源:

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=**<10.2.38.204>**

f)??????? 配置Cluster資源的依賴關系和啟動順序:

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Mastersudo pcs constraint order promote ag_cluster-master then start virtualip

g)?????? 最后查看Cluster狀態如下:

sudo pcs status

可以用虛擬IP(10.2.38.204)訪問這個AG:

?

至此,Ubuntu上的Cluster管理的SQL Server Always On Availability Group就搭建完成了。

?

Note:

  • 當把AG加入到Cluster中作為一個資源的時候,就不能再使用TSQL去failover AG了。SQL Server服務端是不知道Cluster的存在的,整個系統是通過Linux Cluster來控制的,在Ubuntu和RHEL中用pcs命令,在SLES中用crm命令。

  • 全部配置完成后,可以使用虛擬IP去訪問整個AG,這時可以在DNS中手動注冊一個Listener名字指向這個虛擬IP,就可以當成Windows中的AG Listener使用了。

  • SQL Server 2017 CTP 1.4中新引入了一個sequence_number的概念防止數據丟失,詳細參考Understand SQL Server resource agent for pacemaker(https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-cluster-ubuntu)。

參考鏈接:

  • Configure Always On availability group for SQL Server on Linux

  • Configure Ubuntu Cluster and Availability Group Resource

  • Configure read-scale availability group for SQL Server on Linux

  • Overview of Always On Availability Groups (SQL Server)

?

本文主要介紹了如何配置AG以及如何解決配置過程中遇到的問題,關于AG的管理使用上以后再詳細介紹,如有錯誤或者介紹不夠,敬請見諒。


相關文章

  • MSSQL-Scripter,一個新的生成T-SQL腳本的SQL Server命令行工具

  • SQL Server on Ubuntu——Ubuntu上的SQL Server(全截圖)

  • SQL Server on Linux 理由淺析

  • SQL Server 急救包(First Responder Kit)入門教程

  • SQL Server on Linux 理由淺析

  • SQLServer On Linux Package List on CentOS

  • SQL Server on Linux的文件和目錄結構

  • 個性化配置你的SQL Server on Linux

  • SQL on Linux Run on Docker

  • 如何使Mac Docker支持SQL on Linux容器Volume特性

原文地址:http://www.cnblogs.com/lavender000/p/6869757.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的Ubuntu上配置SQL Server Always On Availability Group的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。