SQL Server 2016 非域Aways On環境搭建


一、優點

aways on的優點,a. 構建主從數據庫,分攤單點數據庫壓力。b.可以減少數據同步時間,提升用戶體驗。c.可以實現高可用,自動平滑切換。

二、缺點

及時同步最多只能提交3台,及時同步會導致各服務器性能下降。數據寫入只能主庫寫入。基於服務器故障轉移群集服務,需要服務器相互之間信任,非域下,數據服務本身需要互相信任。

三、具體實現步驟(基於阿里雲服務器 Windows Server 2016 數據中心GUI版本)

  1. 數據庫服務器鏡像設置。(建議與生產環境的配置一致(主要是內存))

為了方便多台服務器的配置,減少配置時間,一些公共的配置放在此處。

  1. 購買臨時服務器,建議系統盤在60GB大小,減少允許過程中系統存儲空間不足的情況。
  2. 安裝集群和IIS。
  3. 修改計算機名后綴ankec.net。
  4. 安裝SQL Server 2016數據庫服務。
  5. 安裝SSMS客戶端。
  6. 創建系統管理員賬號 admincluster,並設置為administrators組成員(也可以直接使用administrator賬號來操作),設置sql服務的啟動賬戶為該賬戶。
  7. 設置數據庫服務的cpu和內存等配置。
  8. 創建數據庫證書導入導出存儲過程。(參看附件1)
  9. 創建數據庫備份存儲過程。(參看附件2)
  10. 參照十萬並發設置設置服務器,並設置服務器連接超時時間。
  11. 設置群集管理、IIS、數據庫客戶端、數據庫服務端配置等快捷方式到桌面或者任務欄。
  12. 重啟服務器(防止服務器本身系統問題占用過多內存)。
  13. 打鏡像服務。
  14. 釋放臨時服務器。
  15. 通過數據庫服務器鏡像購買主數據庫服務器。根據需要額外掛載數據磁盤。建議是數據庫文件大小的10倍以上。
    1. 建議密碼保持不變。
    2. 建立共享文件夾,設置everyone讀寫權限。
    3. 在數據庫層級測試共享權限。(可以備份一個簡單庫到共享文件路徑的方式進行測試)
    4. 設置數據庫服務器名。(只能在此處設置,具體代碼參看附件3,設置后重啟數據庫服務)
  16. 通過數據庫服務器鏡像購買從數據庫服務器。根據需要額外掛載數據磁盤。建議是數據庫文件大小的10倍以上。(多台可以同時購買)
    1. 建議密碼與主數據庫服務器保持不變。
    2. 在數據庫層級測試共享權限。(可以備份一個簡單庫到共享文件路徑的方式進行測試)
    3. 設置數據庫服務器名。(只能在此處設置,具體代碼參看附件3,設置后重啟數據庫服務)
  17. 故障轉移群集搭建
    1. 配置服務器hosts名映射。將各台服務器名稱和局域網IP的映射關系添加到所有服務器hosts文件中去。例如: 計算機名fuwuqiming(ip:172.18.13.2)需要添加兩條記錄到各服務器hosts中 172.18.13.2 fuwuqiming  和 172.18.13.2 fuwuqiming.ankec.net。(具體添加cmd代碼可以自己構建,也可以手動添加,具體代碼可以參看附件4)
    2. 各台服務器之間相互ping一下對方的名稱,確保可以正常ping通。
    3. 主數據庫建立群集 servercluster,將各服務器添加到此集群中,添加時采用服務器名+后綴的方式進行添加。(只有添加到群集中后才能進行下一步)
    4. 在各台數據庫配置中,設置服務的屬性中的aways on的√,重啟數據庫服務。
    5. 設置各服務器數據庫的默認存放路徑。(重要,特別是從庫必須要設置,否則后面沒有機會處理)
    6. 導出各數據庫服務器的數據庫證書到主數據庫服務器的共享文件夾。(各數據庫上調用導出存儲過程)
    7. 導入除了本數據庫服務器的證書外,其它的數據庫服務器的證書。
  18. 搭建數據庫的aways on
    1. 主數據庫上建立數據庫(還原數據庫也可以)。設置數據庫的模式為 完整備份模式。
    2. 備份數據庫。
    3. 在aways on 上右鍵創建aways on,並根據向導進行操作,加入從數據庫,在最后列中選擇是。並根據向導引導一直點擊下一步一直到關閉完成。
    4. 設置主數據的代理任務和自動備份任務。

至此,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM