一、優點
aways on的優點,a. 構建主從數據庫,分攤單點數據庫壓力。b.可以減少數據同步時間,提升用戶體驗。c.可以實現高可用,自動平滑切換。
二、缺點
及時同步最多只能提交3台,及時同步會導致各服務器性能下降。數據寫入只能主庫寫入。基於服務器故障轉移群集服務,需要服務器相互之間信任,非域下,數據服務本身需要互相信任。
三、具體實現步驟(基於阿里雲服務器 Windows Server 2016 數據中心GUI版本)
- 數據庫服務器鏡像設置。(建議與生產環境的配置一致(主要是內存))
為了方便多台服務器的配置,減少配置時間,一些公共的配置放在此處。
- 購買臨時服務器,建議系統盤在60GB大小,減少允許過程中系統存儲空間不足的情況。
- 安裝集群和IIS。
- 修改計算機名后綴ankec.net。
- 安裝SQL Server 2016數據庫服務。
- 安裝SSMS客戶端。
- 創建系統管理員賬號 admincluster,並設置為administrators組成員(也可以直接使用administrator賬號來操作),設置sql服務的啟動賬戶為該賬戶。
- 設置數據庫服務的cpu和內存等配置。
- 創建數據庫證書導入導出存儲過程。(參看附件1)
- 創建數據庫備份存儲過程。(參看附件2)
- 參照十萬並發設置設置服務器,並設置服務器連接超時時間。
- 設置群集管理、IIS、數據庫客戶端、數據庫服務端配置等快捷方式到桌面或者任務欄。
- 重啟服務器(防止服務器本身系統問題占用過多內存)。
- 打鏡像服務。
- 釋放臨時服務器。
- 通過數據庫服務器鏡像購買主數據庫服務器。根據需要額外掛載數據磁盤。建議是數據庫文件大小的10倍以上。
- 建議密碼保持不變。
- 建立共享文件夾,設置everyone讀寫權限。
- 在數據庫層級測試共享權限。(可以備份一個簡單庫到共享文件路徑的方式進行測試)
- 設置數據庫服務器名。(只能在此處設置,具體代碼參看附件3,設置后重啟數據庫服務)
- 通過數據庫服務器鏡像購買從數據庫服務器。根據需要額外掛載數據磁盤。建議是數據庫文件大小的10倍以上。(多台可以同時購買)
- 建議密碼與主數據庫服務器保持不變。
- 在數據庫層級測試共享權限。(可以備份一個簡單庫到共享文件路徑的方式進行測試)
- 設置數據庫服務器名。(只能在此處設置,具體代碼參看附件3,設置后重啟數據庫服務)
- 故障轉移群集搭建
- 配置服務器hosts名映射。將各台服務器名稱和局域網IP的映射關系添加到所有服務器hosts文件中去。例如: 計算機名fuwuqiming(ip:172.18.13.2)需要添加兩條記錄到各服務器hosts中 172.18.13.2 fuwuqiming 和 172.18.13.2 fuwuqiming.ankec.net。(具體添加cmd代碼可以自己構建,也可以手動添加,具體代碼可以參看附件4)
- 各台服務器之間相互ping一下對方的名稱,確保可以正常ping通。
- 主數據庫建立群集 servercluster,將各服務器添加到此集群中,添加時采用服務器名+后綴的方式進行添加。(只有添加到群集中后才能進行下一步)
- 在各台數據庫配置中,設置服務的屬性中的aways on的√,重啟數據庫服務。
- 設置各服務器數據庫的默認存放路徑。(重要,特別是從庫必須要設置,否則后面沒有機會處理)
- 導出各數據庫服務器的數據庫證書到主數據庫服務器的共享文件夾。(各數據庫上調用導出存儲過程)
- 導入除了本數據庫服務器的證書外,其它的數據庫服務器的證書。
- 搭建數據庫的aways on
- 主數據庫上建立數據庫(還原數據庫也可以)。設置數據庫的模式為 完整備份模式。
- 備份數據庫。
- 在aways on 上右鍵創建aways on,並根據向導進行操作,加入從數據庫,在最后列中選擇是。並根據向導引導一直點擊下一步一直到關閉完成。
- 設置主數據的代理任務和自動備份任務。
至此,aways on 的配置結束。整個配置過程必須按照順序一步一步進行,不能隨意調整順序,如果調整可能會造成無法預知的錯誤。如果出錯后不能解決,可以考慮還原系統的方式來初始化。
注意事項:
1. 數據庫權限問題,可以使用administrator來解決。
2. 數據庫證書導出前,必須保證可以訪問共享文件夾,否則不可繼續,一旦繼續,則會出現無法解決的錯誤。
附錄1:
導出證書
CREATE PROCEDURE CreateEndpointCert @ShareName SYSNAME , @StrongPassword SYSNAME AS BEGIN --This must be executed in the context of Master IF (DB_NAME() <> 'master') BEGIN PRINT N'This SP must be executed in master. USE master and then retry.' RETURN (-1) END DECLARE @DynamicSQL varchar(1000); DECLARE @CompName varchar(250); DECLARE @HasMasterKey INT; SELECT @CompName = CONVERT(SysName, SERVERPROPERTY('MachineName')); -- Only create a master key if it doesn't already exist SELECT @HasMasterKey = is_master_key_encrypted_by_server from sys.databases where name = 'master' IF (@HasMasterKey = 0) BEGIN --Create a MASTER KEY to encrypt the certificate. SET @DynamicSQL = CONCAT('CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' , QUOTENAME(@StrongPassword, '''')); EXEC (@DynamicSQL) END --Create the certificate to authenticate the endpoint SET @DynamicSQL = CONCAT('CREATE CERTIFICATE ', QUOTENAME(@CompName + '-Certificate'), ' WITH SUBJECT = ', QUOTENAME(@CompName, ''''),',EXPIRY_DATE=',QUOTENAME(20991231 ,'''') ) EXEC (@DynamicSQL); --Create the database mirroring endpoint authenticated by the certificate. SET @DynamicSQL = CONCAT('CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE ',QUOTENAME(@CompName + '-Cert'), ' , ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL)'); EXEC (@DynamicSQL); --Back up the certificate to a common network share for import into other nodes in the cluster SET @DynamicSQL = CONCAT('BACKUP CERTIFICATE ',QUOTENAME(@CompName + '-Cert'),' To FILE = ', QUOTENAME( @ShareName + '\SQL-' + @CompName + '.cer', '''')); EXEC (@DynamicSQL); END GO
導入證書
CREATE PROCEDURE InstallEndpointCert @CompName SYSNAME, @ShareName SYSNAME, @StrongPassword SYSNAME AS BEGIN DECLARE @DynamicSQL varchar(1000); DECLARE @MyCompName varchar(250); SELECT @MyCompName = CONVERT(SysName, SERVERPROPERTY('MachineName')); --Don't need to create LOGINs for the local system IF (@MyCompName <> @CompName) BEGIN SET @DynamicSQL = CONCAT('CREATE LOGIN ', QUOTENAME (@CompName + '-Login'), ' WITH PASSWORD= ', QUOTENAME( @StrongPassword, '''')); EXEC (@DynamicSQL); SET @DynamicSQL = CONCAT('CREATE USER ', QUOTENAME( @CompName + '-User'), ' FOR LOGIN ', QUOTENAME(@CompName + '-Login')); EXEC (@DynamicSQL); SET @DynamicSQL = CONCAT('CREATE CERTIFICATE ', QUOTENAME(@CompName +'-Cert'), ' AUTHORIZATION ', QUOTENAME(@CompName +'-User'), ' FROM FILE = ', QUOTENAME(@ShareName + '\SQL-' + @CompName + '.cer' , '''')); EXEC (@DynamicSQL); SET @DynamicSQL = CONCAT('GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ', QUOTENAME(@CompName +'-Login')); EXEC (@DynamicSQL); END END GO
附錄2:
附錄3:
修改數據庫名稱,修改后要重啟服務
if serverproperty('servername') <> @@servername begin declare @server sysname set @server = @@servername exec sp_dropserver @server = @server set @server = cast(serverproperty('servername') as sysname) exec sp_addserver @server = @server , @local = 'LOCAL' END
查詢名稱是否一致
use master go select @@servername select serverproperty('servername')
附錄4:
寫入hosts命令:
echo 172.18.12.153 iZiig0d4mlg0ksZ >> C:\Windows\System32\drivers\etc\hosts
附錄5:
十萬服務器並發設置
服務器設置:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
<processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50" requestQueueLimit="100000"/>
在%systemroot%\System32\inetsrv\config\applicationHost.config中可以查看到該設置:
<serverRuntime appConcurrentRequestLimit="100000" />
服務器設置set.bat 內容:
echo "開始設置" reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000 reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768 reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768 reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v MaxUserPort /t REG_DWORD /d 65534 reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpTimedWaitDelay /t REG_DWORD /d 30 net stop http & net start http & iisreset echo "設置結束"
參看鏈接:
如何在沒有域的環境中搭建AlwaysOn(一)
http://www.cnblogs.com/i6first/p/6040363.html
如何在沒有域的環境中搭建AlwaysOn(二)
http://www.cnblogs.com/i6first/p/6047538.html
ClassLink遷移示例(鏈接vpc和經典網絡)
https://help.aliyun.com/document_detail/57949.html?spm=5176.doc58095.6.604.5QiNT1
https://help.aliyun.com/document_detail/55051.html
SQL Server 2016 簡體中文企業版(數據庫服務安裝程序)
http://tieba.baidu.com/p/4675269271
下載 SQL Server Management Studio 17.2(數據庫客戶端)
https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms
十萬連接配置
http://www.cnblogs.com/dudu/archive/2013/06/08/iis_webserver_settings.html
http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html
http://www.jb51.net/article/36073.htm