tair(三)--安裝配置

一 如何安裝tair:

  1. 確保安裝了automake autoconfig 和 libtool,使用automake --version查看,一般情況下已安裝
  2. 獲得底層庫 tbsys 和 tbnet的源代碼:(svn checkout http://code.taobao.org/svn/tb-common-utils/trunk/ tb-common-utils).
  3. 獲得tair源代碼:(svn checkout http://code.taobao.org/svn/tair/trunk/ tair).
  4. 安裝boost-devel庫,在用rpm管理軟件包的os上可以使用rpm -q boost-devel查看是否已安裝該庫
  5. 編譯安裝tbsys和tbnet
  6. 編譯安裝tair

  1.     tair 的底層依賴於tbsys庫和tbnet庫, 所以要先編譯安裝這兩個庫:
    取得源代碼後, 先指定環境變量 TBLIB_ROOT 爲需要安裝的目錄. 這個環境變量在後續 tair 的編譯安裝中仍舊會被使用到. 比如要安裝到當前用戶的lib目錄下, 則指定 export TBLIB_ROOT="~/lib"
    進入common文件夾, 執行build.sh進行安裝. 
  1.     編譯安裝tair:
    進入 tair 目錄
    運行 bootstrap.sh
    運行 configure.  注意, 在運行configue的時候, 可以使用 --with-boost=xxxx 來指定boost的目錄. 使用--with-release=yes 來編譯release版本.
    運行 make 進行編譯
    運行 make install 進行安裝

    二 如何配置tair:

        tair的運行, 至少需要一個 config server 和一個 data server. 推薦使用兩個 config server 多個data server的方式. 兩個config server有主備之分.
    源代碼目錄中 share 目錄下有三個配置文件的樣例, 下面會逐個解說.
    configserver.conf  group.conf 這兩個配置文件是config server所需要的. 先看這兩個配置文件的配置

  1.     配置文件 configserver.conf

    [public]
    config_server=x.x.x.x:5198
    config_server=x.x.x.x:5198
    
    [configserver]
    port=5198
    log_file=logs/config.log
    pid_file=logs/config.pid
    log_level=warn
    group_file=etc/group.conf
    data_dir=data/data
    dev_name=eth0

    public 下面配置的是兩臺config server的 ip 和端口. 其中排在前面的是主config server. 這一段信息會出現在每一個配置文件中. 請保持這一段信息的嚴格一致.
    configserver下面的內容是本config server的具體配置:
    port 端口號, 注意 config server會使用該端口做爲服務端口, 而使用該端口+1 做爲心跳端口
    log_file 日誌文件
    pid_file  pid文件, 文件中保存當前進程中的pid
    log_level 日誌級別
    group_file 本config server所管理的 group 的配置文件
    data_dir   本config server自身數據的存放目錄
    dev_name   所使用的網絡設備名
    
    注意: 例子中, 所有的路徑都配置的是相對路徑. 這樣實際上限制了程序啓動時候的工作目錄. 這裏當然可以使用絕對路徑. 
    注意: 程序本身可以把多個config server 或 data server跑在一臺主機上, 只要配置不同的端口號就可以. 但是在配置文件的時候, 他們的數據目錄必須分開, 程序不會對自己的數據目錄加鎖, 所以如果跑在同一主機上的服務, 數據目錄配置相同, 程序自己不會發現, 卻會發生很多莫名其妙的錯誤. 多個服務跑在同一臺主機上, 一般只是在做功能測試的時候使用.

  1.     配置文件 group.conf

    #group name
    [group_1]
    # data move is 1 means when some data serve down, the migrating will be start.
    # default value is 0
    _data_move=1
    #_min_data_server_count: when data servers left in a group less than this value, config server will stop serve for this group
    #default value is copy count.
    _min_data_server_count=4
    _copy_count=3
    _bucket_number=1023
    _plugIns_list=libStaticPlugIn.so
    _build_strategy=1 #1 normal 2 rack
    _build_diff_ratio=0.6 #how much difference is allowd between different rack
    # diff_ratio =  |data_sever_count_in_rack1 - data_server_count_in_rack2| / max (data_sever_count_in_rack1, data_server_count_in_rack2)
    # diff_ration must less than _build_diff_ratio
    _pos_mask=65535  # 65535 is 0xffff  this will be used to gernerate rack info. 64 bit serverId & _pos_mask is the rack info,
    
    _server_list=x.x.x.x:5191
    _server_list=x.x.x.x:5191
    _server_list=x.x.x.x:5191
    _server_list=x.x.x.x:5191
    #quota info
    _areaCapacity_list=1,1124000;   
    _areaCapacity_list=2,1124000;  
    
     每個group配置文件可以配置多個group, 這樣一組config server就可以同時服務於多個 group 了. 不同的 group 用group name區分
     _data_move 當這個配置爲1的時候, 如果發生了某個data server宕機, 則系統會儘可能的通過冗餘的備份對數據進行遷移. 注意, 如果 copy_count 爲大於1的值, 則這個配置無效, 系統總是會發生遷移的. 只有copy_count爲1的時候, 該配置纔有作用. 
     _min_data_server_count  這個是系統中需要存在的最少data server的個數.  當系統中可正常工作的data server的個數小於這個值的時候, 整個系統會停止服務, 等待人工介入
     _copy_count  這個表示一條數據在系統中實際存儲的份數. 如果tair被用作緩存, 這裏一般配置1. 如果被用來做存儲, 一般配置爲3。 當系統中可工作的data server的數量少於這個值的時候, 系統也會停止工作. 比如 _copy_count 爲3, 而系統中只有 2 臺data server. 這個時候因爲要求一條數據的各個備份必須寫到不同的data server上, 所以系統無法完成寫入操作, 系統也會停止工作的.
     _bucket_number  這個是hash桶的個數, 一般要 >> data server的數量(10倍以上). 數據的分佈, 負載均衡, 數據的遷移都是以桶爲單位的.
     _plugIns_list  需要加載的插件的動態庫名
     _accept_strategy  默認爲0,ds重新連接上cs的時候,需要手動touch group.conf。如果設置成1,則當有ds重新連接會cs的時候,不需要手動touch group.conf。 cs會自動接入該ds。
     _build_strategy  在分配各個桶到不同的data server上去的時候所採用的策略. 目前提供兩種策略. 配置爲1 則是負載均衡優先, 分配的時候儘量讓各個 data server 的負載均衡. 配置爲 2 的時候, 是位置安全優先, 會盡量將一份數據的不同備份分配到不同機架的機器上. 配置爲3的時候,如果服務器分佈在多個機器上,那麼會優先使用位置安全優先,即策略2. 如果服務器只在一個機架上,那麼退化成策略1,只按負載分佈。
     _build_diff_ratio 這個值只有當 _build_strategy 爲2的時候纔有意義. 實際上是用來表示不同的機架上機器差異大小的. 當位置安全優先的時候, 如果某個機架上的機器不斷的停止服務, 必然會導致負載的極度不平衡.  當兩個機架上機器數量差異達到一定程度的時候, 系統也不再繼續工作, 等待人工介入.
     _pos_mask  機架信息掩碼. 程序使用這個值和由ip以及端口生成的64爲的id做與操作, 得到的值就認爲是位置信息.  比如 當此值是65535的時候 是十六進制 0xffff. 因爲ip地址的64位存儲的時候採用的是網絡字節序, 最前32位是端口號, 後32位是網絡字節序的ip地址. 所以0xffff 這個配置, 將認爲10.1.1.1 和 10.2.1.1 是不同的機架.
     _areaCapacity_list  這是每一個area的配額信息. 這裏的單位是 byte. 需要注意的是, 該信息是某個 area 能夠使用的所有空間的大小. 舉個具體例子:當copy_count爲3 共有5個data server的時候, 每個data server上, 該area實際能使用的空間是這個值/(3 * 5). 因爲fdb使用mdb作爲內部的緩存, 這個值的大小也決定了緩存的效率.

  1.     data server的配置文件

    [public]
    config_server=172.23.16.225:5198
    config_server=172.23.16.226:5198

    [tairserver]
    storage_engine=mdb
    mdb_type=mdb_shm
    mdb_shm_path=/mdb_shm_path01
    #tairserver listen port
    port=5191
    heartbeat_port=6191
    process_thread_num=16
    slab_mem_size=22528
    log_file=logs/server.log
    pid_file=logs/server.pid
    log_level=warn
    dev_name=bond0
    ulog_dir=fdb/ulog
    ulog_file_number=3
    ulog_file_size=64
    check_expired_hour_range=2-4
    check_slab_hour_range=5-7

    [fdb]
    # in
    # MB
    index_mmap_size=30
    cache_size=2048
    bucket_size=10223
    free_block_pool_size=8
    data_dir=fdb/data
    fdb_name=tair_fdb


    下面解釋一下data server的配置文件:
    public 部分不再解說
    storage_engine 這個可以配置成 fdb 或者 mdb.  分別表示是使用內存存儲數據(mdb)還是使用磁盤(fdb).
    mdb_type 這個是兼容以前版本用的, 現在都配成mdb_shm就可以了
    mdb_shm_path 這個是用作映射共享內存的文件.
    port data server的工作端口
    heartbeat_port data server的心跳端口
    process_thread_num 工作線程數.  實際上啓動的線程會比這個數值多, 因爲有一些後臺線程.  真正處理請求的線程數量是這裏配置的.
    slab_mem_size 所佔用的內存數量.  這個值以M爲單位, 如果是mdb, 則是mdb能存放的數據量, 如果是fdb, 此值無意義
    ulog_dir 發生遷移的時候, 日誌文件的文件目錄
    ulog_file_number 用來循環使用的log文件數目
    ulog_file_size 每個日誌文件的大小, 單位是M
    check_expired_hour_range 清理超時數據的時間段.  在這個時間段內, 會運行一個後臺進程來清理mdb中的超時數據.  一般配置在系統較空閒的時候
    check_slab_hour_range 對slap做平衡的時間段.  一般配置在系統較空閒的時候
    index_mmap_size fdb中索引文件映射到內存的大小, 單位是M
    cache_size fdb中用作緩存的共享內存大小, 單位是M 
    bucket_size fdb在存儲數據的時候, 也是一個hash算法, 這兒就是hash桶的數目
    free_block_pool_size 這個用來存放fdb中的空閒位置, 便於重用空間
    data_dir fdb的數據文件目錄
    fdb_name fdb數據文件名

    三 運行前的準備:
    
    因爲系統使用共享內存作爲數據存儲的空間(mdb)或者緩存空間(fdb), 所以需要先更改配置, 使得程序能夠使用足夠的共享內存.  scripts 目錄下有一個腳本 set_shm.sh 是用來做這些修改的, 這個腳本需要root權限來運行.

    四 如何啓動集羣:
    
    在完成安裝配置之後, 可以啓動集羣了.  啓動的時候需要先啓動data server 然後啓動cofnig server.  如果是爲已有的集羣添加dataserver則可以先啓動dataserver進程然後再修改gruop.conf,如果你先修改group.conf再啓動進程,那麼需要執行touch group.conf;在scripts目錄下有一個腳本 tair.sh 可以用來幫助啓動 tair.sh start_ds 用來啓動data server.  tair.sh start_cs 用來啓動config server.  這個腳本比較簡單, 它要求配置文件放在固定位置, 採用固定名稱.  使用者可以通過執行安裝目錄下的bin下的 tair_server (data server) 和 tair_cfg_svr(config server) 來啓動集羣.


發佈了66 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章