達(dá)夢服務(wù)配置文件dm_svc.conf使用
1.?? 配置文件說明
dm_svc.conf是客戶端連接的服務(wù)配置文件,在客戶端(jdbc、dpi等)使用服務(wù)名進(jìn)行數(shù)據(jù)庫連接的情況下,需要對dm_svc.conf進(jìn)行配置,如果已經(jīng)安裝了達(dá)夢數(shù)據(jù)庫軟件,會默認(rèn)在安裝的服務(wù)器目錄上生成此配置文件,文件的位置分別位于
在windows平臺:
32位的DM安裝在Win32操作平臺下,此文件位于%SystemRoot%\system32目錄;
64位的DM安裝在Win64操作平臺下,此文件位于%SystemRoot%\system32目錄;
32位的DM安裝在Win64操作平臺下,此文件位于%SystemRoot%\SysWOW64目錄;
在Linux平臺下,此文件位于/etc目錄。
對于未安裝dm數(shù)據(jù)庫的情況下,可以手工生成dm_svc.conf文件,此文件可以放在默認(rèn)的文件路徑:
windows:%SystemRoot%\system32(SysWOW64)\dm_svc.conf
linux:/etc/dm_svc.conf
也可以根據(jù)不同的場景放置于非默認(rèn)目錄,但是此時的jdbc連接串中需要配置參數(shù)dmsvcconf,指定此參數(shù)的具體路徑。
當(dāng)然,在配置文件中的參數(shù)也可以直接寫入在jdbc等的連接字符串中,針對以上三種情況下的jdbc連接串示例如下:
1.???? dm_svc.conf位于默認(rèn)位置:jdbc:dm://dm_rww? --這里的dm_rww是文件中配置的服務(wù)名稱。
2.???? dm_svc.conf位于自定義位置:jdbc:dm://?dmsvcconf=/opt/dm_svc.conf
3.???? 無dm_svc.conf文件:jdbc:dm://dmconn?dmconn=(192.168.56.13:32141,192.168.56.14:32142,192.168.56.15:32143)&rw_Separate=(1)&rw_Percent(0)&login_mode=(1)? --其他參數(shù)可繼續(xù)添加
此文件中各參數(shù)的配置格式:
參數(shù)名=(參數(shù)值)
此文件的常用參數(shù)(摘自達(dá)夢系統(tǒng)管理員手冊,更多參數(shù)意義參考管理員手冊):
?
配置項
缺省值
簡述
服務(wù)名
無
連接服務(wù)名,參數(shù)值格式為ip[:port],ip[:port],......
TIME_ZONE
操作系統(tǒng)當(dāng)前時區(qū)
指明客戶端的默認(rèn)時區(qū),設(shè)置范圍為:-779~840m,如60對應(yīng)+1:00時區(qū)
LANGUAGE
操作系統(tǒng)語言
當(dāng)前數(shù)據(jù)庫服務(wù)器使用的語言,會影響幫助信息錯誤和提示信息。支持的選項為:CN(表示中文)和EN(表示英文)。可以不指定,若不指定,系統(tǒng)會讀取操作系統(tǒng)信息獲得語言信息,建議有需要才指定。
LOGIN_ENCRYPT
1
是否進(jìn)行通信加密。0:不加密;1:加密
DIRECT
Y
是否使用快速裝載。y:使用;n:不使用
LOGIN_MODE
4
指定優(yōu)先登錄的服務(wù)器模式。0:優(yōu)先連接Primary模式的庫,Normal模式次之,最后選擇Stantby模式;1:只連接主庫;2:只連接備庫;3:優(yōu)先連接Standby模式的庫,Primary模式次之,最后選擇Normal模式;4:優(yōu)先連接Normal模式的庫,Primary模式次之,最后選擇Standby模式
SWITCH_TIMES
1
以服務(wù)名連接數(shù)據(jù)庫時,若未找到符合條件的庫成功建立連接,將嘗試遍歷服務(wù)名中庫列表的次數(shù)。有效值范圍1~9223372036854775807
SWITCH_INTERVAL
200
在服務(wù)器之間切換的時間間隔,單位為毫秒,有效值范圍1~9223372036854775807
RW_SEPARATE
0
是否啟用讀寫分離。0:不啟用;1:啟用;2:啟用,備庫由客戶端進(jìn)行選擇,且只會選擇服務(wù)名中配置的節(jié)點(diǎn)
RW_PERCENT
25
讀寫分離分發(fā)比例,有效值范圍0~100
dm_svc.conf文件的配置可以分為兩個區(qū)域,全局配置區(qū)和服務(wù)配置區(qū)兩大部分,全局配置區(qū)可以配置所有的配置選項,服務(wù)配置區(qū)可以配置除服務(wù)名外的所有選項,并且服務(wù)配置區(qū)的優(yōu)先級高于全局配置區(qū),即如果兩個區(qū)域都配置了相同的參數(shù),則以服務(wù)配置區(qū)的參數(shù)為準(zhǔn)。
全局配置區(qū)可以配置多個服務(wù)名和IP/PORT對應(yīng)關(guān)系,同時可以配置通用性的參數(shù),如傳輸加密參數(shù):LOGIN_ENCRYPT=(0),對于個性的參數(shù),如LOGIN_MODE=(1),則配置在服務(wù)配置區(qū)中(此配置參數(shù)在有單實(shí)例的服務(wù)名下,連接時會出現(xiàn)"沒有匹配的可登陸服務(wù)器"錯誤,當(dāng)然,根據(jù)優(yōu)先級的原則,可以將此配置參數(shù)在單實(shí)例服務(wù)配置區(qū)配置為LOGIN_MODE=(3/4),也可以解決連接問題)。
全局配置區(qū)有多個服務(wù)名且服務(wù)需要個性化參數(shù)的話,則在服務(wù)配置區(qū)中,需要配置多個[服務(wù)名]開頭的服務(wù)配置區(qū),如果無個性化參數(shù),則不需要進(jìn)行服務(wù)配置區(qū)的配置。
?
2.?? 配置文件示例
正確的服務(wù)名配置方式示例:
此處只以讀寫分離和單實(shí)例兩種數(shù)據(jù)庫架構(gòu)的情況下進(jìn)行驗證,其他如datawatch或者dsc集群,可以按照DM手冊中的配置進(jìn)行相應(yīng)的參數(shù)填寫即可
# 以#開頭的行表示是注釋
# 全局配置區(qū)
IMESDB=(192.168.56.13:32141,192.168.56.14:32142,192.168.56.15:32143)
IMESDB_SIG=(192.168.56.16:5236)
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
TIME_ZONE=(480) #表示+8:00 時區(qū)
#其他通用性參數(shù)
# 服務(wù)配置區(qū)
[IMESDB] #讀寫分離服務(wù)配置
LOGIN_MODE=(1) #讀寫分離集群必須配置為1,否則連接到standby狀態(tài)的數(shù)據(jù)庫時,會因為standby庫為只讀模式從而導(dǎo)致出現(xiàn)insert/delete/update操作錯誤
TIME_ZONE=(480) #表示+8:00 時區(qū)
SWITCH_TIME=(3) #在服務(wù)器之間切換的次數(shù)
SWITCH_INTERVAL=(10) #在服務(wù)器之間切換的時間間隔,單位為毫秒
RW_SEPARATE=(1) #啟用讀寫分離,必須配置此參數(shù)為1或2,否則所有的insert/delete/update/select操作都在primary上進(jìn)行,不能啟用讀寫分離機(jī)制
RW_PERCENT=(25) #讀事務(wù)分發(fā)到主庫的比例
#其他個性化參數(shù)
[IMESDB_SIG]
LOGIN_MODE=(3)
#其他個性化參數(shù)
?
3.?? 配置參數(shù)驗證
以一個正常狀態(tài)的單實(shí)例和讀寫分離集群來進(jìn)行驗證,該集群的當(dāng)前狀態(tài)為:

從圖片可以看出,主節(jié)點(diǎn)是192.168.56.14,兩個從節(jié)點(diǎn)分別是192.168.56.13和192.168.56.15
3.1.? 連接串中指定讀寫分離參數(shù)驗證
使用jmeter創(chuàng)建并發(fā)200個連接,并將讀寫分離相關(guān)參數(shù)寫到j(luò)dbc的連接串中:

或者是:

200并發(fā)連接中,所有的insert操作都在主節(jié)點(diǎn)上執(zhí)行,執(zhí)行select語句時,大部分在standby庫,少部分在primary庫,后一種配置因為未配置standby節(jié)點(diǎn)的IP及端口,在出現(xiàn)primary節(jié)點(diǎn)故障的情況下,將會出現(xiàn)連接不到數(shù)據(jù)庫的故障。
配置的連接串主機(jī)中,不包含primary節(jié)點(diǎn)的話,將會提示故障:


經(jīng)過以上測試,可以得出結(jié)論:
1.??????? 在讀寫分離的配置下,所有的數(shù)據(jù)庫連接都將連接到primary節(jié)點(diǎn)上,再根據(jù)語句是增刪改還是查詢語句,來分配連接到哪些實(shí)例。
2.??????? 在讀寫分離的模式下,連接串的主機(jī)列表中,必須有primary節(jié)點(diǎn)的數(shù)據(jù)庫,否則將出現(xiàn)數(shù)據(jù)庫服務(wù)模式無效的故障。
3.1.? 配置文件中讀寫分離參數(shù)驗證
3.1.1.?? 讀寫分離服務(wù)名正確配置驗證
此時以讀寫分離的服務(wù)名連接數(shù)據(jù)庫實(shí)例,因為login_mode配置為1,所有連接均是primary庫,但是在執(zhí)行不同類型的SQL語句時,執(zhí)行的實(shí)例又不相同,執(zhí)行insert/update/delete語句時,執(zhí)行操作的實(shí)例為primary庫,而執(zhí)行查詢操作時,執(zhí)行操作的實(shí)例為standby庫
使用jmeter創(chuàng)建并發(fā)200個連接,此時所有的insert語句都是在primary庫上執(zhí)行,執(zhí)行select語句時,大部分實(shí)例為standby庫,少部分的primary庫,數(shù)據(jù)執(zhí)行的結(jié)果與預(yù)期效果一致。
3.1.2.?? 讀寫分離服務(wù)名錯誤配置驗證
將服務(wù)配置區(qū)的LOGIN_MODE修改為模式3,即優(yōu)先選擇standby模式的數(shù)據(jù)庫連接
[IMESDB]
LOGIN_MODE=(3)
驗證結(jié)果如下

此時因為連接的實(shí)例為standby模式,所以執(zhí)行insert/delete/update操作會因為是只讀模式而失敗。
將服務(wù)配置區(qū)的RW_SEPARATE參數(shù)注釋掉,此時使用服務(wù)名進(jìn)行連接時,會默認(rèn)啟用此參數(shù)為0的配置,使用jemter進(jìn)行連接

經(jīng)過觀察,所以的連接返回都是節(jié)點(diǎn)1,不再向節(jié)點(diǎn)2進(jìn)行連接,即讀操作也全部在primary角色的實(shí)例上進(jìn)行SQL操作。
?
3.1.3.?? 單實(shí)例服務(wù)名配置正確驗證
按照上例"正確的服務(wù)名配置方式示例"中的正確連接方式,無論通過服務(wù)名,或者是直接ip:port方式連接數(shù)據(jù)庫實(shí)例都正常

?
3.1.4.?? 單實(shí)例服務(wù)名配置錯誤驗證
?
按照以下錯誤的配置方法,將個性化參數(shù)LOGIN_MODE提前

服務(wù)連接正常,但是通過具體IP:PORT方式連接時,出現(xiàn)連接異常,如下所示:

此時將全局配置區(qū)文件的LOGIN_MODE修改為1,則使用IP:PORT方式或者服務(wù)名方式都可以正常連接,這里說明,全局配置區(qū)里配置的參數(shù)在使用disql連接時生效了。
?
3.1.5.?? 分區(qū)配置的優(yōu)先級驗證
單實(shí)例情況下使用TIME_ZONE參數(shù)進(jìn)行驗證,即在全局配置區(qū)中配置TIME_ZONE,也在相應(yīng)的服務(wù)配置區(qū)中配置此參數(shù),進(jìn)行時間返回的驗證。

此時,雖然全局配置區(qū)中的配置為中國所在的東8區(qū),但是服務(wù)配置區(qū)卻配置成西8區(qū),通過dm_svc.conf文件所在的客戶端連接到服務(wù)端后的查詢:

?
在服務(wù)器上使用disql查詢,正常的查詢結(jié)果為:

此配置文件中,雖然在全局配置區(qū)中配置了正確的時區(qū)參數(shù),但是在服務(wù)配置區(qū)中也配置了此參數(shù),但是配置成了-480,根據(jù)服務(wù)配置區(qū)優(yōu)先級高于全局配置區(qū)的說法,客戶端在進(jìn)行連接時,讀取了配置文件的服務(wù)配置區(qū)的時區(qū),所以才導(dǎo)致最終查詢的結(jié)果與實(shí)際的時間相關(guān)16小時。
4.?? 總結(jié)說明
dm_svc.conf關(guān)系到多種客戶端連接數(shù)據(jù)庫服務(wù),后續(xù)的數(shù)據(jù)庫根據(jù)架構(gòu)不同,需要的配置選項都要隨之變化,甚至在不使用服務(wù)名進(jìn)行連接時,全局區(qū)的參數(shù)也會生效,所以必須對此文件的作用有足夠的了解,才能更好的解決數(shù)據(jù)庫服務(wù)連接的情況,此文件內(nèi)容正確的配置方法:
#全局配置區(qū)
服務(wù)名=(ip:port,ip:port,....)
#其他通用參數(shù),達(dá)夢未對參數(shù)進(jìn)行通用和個性化的劃分,但是根據(jù)常用的參數(shù)使用來看,還是有差別的,比如和讀寫分離開關(guān)參數(shù)RW_SEPARATE,只在讀寫分離集群中才需要配置。
#服務(wù)配置區(qū)
[服務(wù)名]
#個性化參數(shù)
鏈接:https://www.dianjilingqu.com/480794.html