Tokyo Tyrantã«ããHAãªã»ãã·ã§ã³ã¹ãã¬ã¼ã¸ 3 ãã¥ã¢ã«ãã¹ã¿ç¯
ãã¥ã¢ã«ãã¹ã¿æ§æã«ããåºæ¬çãªæ¹æ³ã«ã¤ãã¦ã¯チュートリアルã«ãããã®ã§çç¥ã
æéåãã¬ã³ã¼ãã®åé¤ã¯ã©ã¡ãã§è¡ãã
ãã¥ã¢ã«ãã¹ã¿ã«ããå ´åãæéåãã¬ã³ã¼ãã®åé¤ãè¡ãttexpire.luaã¯ã©ãã§åããã®ãè¯ããã
ã»ãã·ã§ã³ãã¼ã¿ã®ä¸è²«æ§ãä¿ã¤ããã¢ã¯ãã£ã-ã¹ã¿ã³ãã¤æ§æãæ³å®ãã¦ããã®ã§ãã¢ã¯ãã£ãå´ã§ã®ã¿åããã®ãæ£çµ±ãªé¸æã«ãªãã¨æãã
ããããããããã¨ã¹ã¿ã³ãã¤ã«åãæ¿ãã£ãå¾ã«expireã®å®è¡ãè¡ãããªããªã£ã¦ãã¾ããä»ã®ã¨ããTokyo Tyrant(TT)ã¯èµ·åä¸ã«extpcãªãã·ã§ã³ã«ç¸å½ããæ©è½ãæä½ããäºã¯ã§ããªãããã ã
解決çã2ã¤èãã¦ã¿ã
- ã¢ã¯ãã£ãã¨ã¹ã¿ã³ãã¤ã®ä¸¡æ¹ã§expireãå®è¡ãã
- TTèµ·åä¸ã«expireã®å®è¡/åæ¢ãè¡ããããã«ãã
ã¢ã¯ãã£ãã¨ã¹ã¿ã³ãã¤ã®ä¸¡æ¹ã§expireãå®è¡ãã
両ãã¹ã¿ã§expireãå®è¡ãã¦åé¡ãªããã°ãä¸è¨ã®åé¡ã¯ç°¡åã«è§£æ±ºããã
ä¾ãã°MySQLã¯ã¬ããªã±ã¼ã·ã§ã³ã®æ´åæ§ãåããªããªãã¨ã¬ããªã±ã¼ã·ã§ã³ãåæ¢ãã¦ãã¾ããã©ã調ã¹ããTTã®å ´åã¯ã¾ããäº(æ訳)ã«ãªã£ããã¯ããªãã¨æ¸ãã¦ããã
Note that updating both of the masters at the same time may cause inconsistency of their databases. By default, the servers do not complain even if inconsistency is detected. The option `-rss' make them check the consistency and stop replication when inconsistency is detected.
http://1978th.net/tokyotyrant/spex.html#tutorial_replication
å®éã«è©¦ãã¦ã¿ãã¨ããã°ã«
do_slave: detected inconsistency
ã¨ããINFOã¬ãã«ã®åºåããããã®ã®ãã¬ããªã±ã¼ã·ã§ã³ã¯ç¶ç¶ããã¦ããã*1
ã¬ããªã±ã¼ã·ã§ã³ãåæ¢ããªãã®ã§ããã°ä¸¡ãã¹ã¿ã§expireãå®è¡ããæ¹æ³ã§è¯ãããã ã
ã¨æã£ãã®ã ãã©ãã¹ã¿ã³ãã¤ã¸ã®ã¬ããªã±ã¼ã·ã§ã³ãããç¨åº¦ã®æéé
延ããã¨ãæéãåãã¦ããªãã»ãã·ã§ã³ãã¢ã¯ãã£ãå´ã§ã®ã¿åé¤ãããå¯è½æ§ãããã
é常éç¨ã§ããã°ã¬ããªã±ã¼ã·ã§ã³ã®é
延ãããã»ã©å¤§ãããªãäºã¯ç¡ãã¯ããã§ããã¹ã¿ã³ãã¤ãä¸æçã«åæ¢ããããããå ´åã¯åèµ·åæã«ã¯é
延ãçºçãã¦ããã®ã§ãã¬ããªã±ã¼ã·ã§ã³ã追ãã¤ãã¾ã§ã®éãå±éºãªæéã«ãªãã
é常æã¯ä¸¡ãã¹ã¿ã§expireãå®è¡ããã«ãã¦ããèµ·åä¸ã«å®è¡/åæ¢ãè¡ããããã«ãã¦ãããæ¹ãè¯ãããã ã
TTèµ·åä¸ã«expireã®å®è¡/åæ¢ãè¡ããããã«ãã
TTã®èµ·åä¸ã«expireã®å®è¡/åæ¢ãå¶å¾¡ã§ããã°ãéç¨ã®æéã¯å¢ãããã®ã®ãexpireãåããããã®ã«åãããªãã£ãããéã«åããã¦æ¶ãã¦ã¯ãããªããã¼ã¿ãæ¶ãã¦ãã¾ãäºã¯ç¡ããªãã
expireã®åä½ãå¶å¾¡ããããé¢æ°å ã§å®è¡/åæ¢ãå¶å¾¡ããå¤ãåç §ããããã«ãããã®å¤ãtcrmgrã®extãµãã³ãã³ãã§å¼ã³åºãé¢æ°å ã§å¤æ´ã§ããããã«ãã¦ã¿ããå¤ã®æ ¼ç´ã«ã¯ã¹ã¿ãã·ã¥ã使ç¨ã
æ°ããttexpire.lua
TTEXPIRE_KEY = "ttexpire" ENABLE_EXPIRE = "t" DISABLE_EXPIRE = "f" function expire() if not is_enabled_expire() then return end local args = {} local cdate = string.format("%d", _time()) table.insert(args, "addcond\0x\0NUMLE\0" .. cdate) table.insert(args, "out") local res = _misc("search", args) if not res then _log("expiration was failed") end end function is_enabled_expire() return _stashget(TTEXPIRE_KEY) == ENABLE_EXPIRE end function ttexpire(key) local message = nil if key == "start" then _stashput(TTEXPIRE_KEY, ENABLE_EXPIRE) message = "starting 'expire'" _log(message) elseif key == "stop" then _stashput(TTEXPIRE_KEY, DISABLE_EXPIRE) message = "stopping 'expire'" _log(message) else if is_enabled_expire() then message = "'expire' is running" else message = "'expire' was stopped" end end return message end function _begin() _stashput(TTEXPIRE_KEY, DISABLE_EXPIRE) end function _end() _stashout(TTEXPIRE_KEY) end
ttexpireé¢æ°ã{start|stop|status}å¼æ°ä»ãã§å¼ã³åºãã¨ãexpireã®å®è¡éå§/å®è¡åæ¢/ç¶æ 確èªãè¡ããã
tcrmgr ext localhost ttexpire start tcrmgr ext localhost ttexpire stop tcrmgr ext localhost ttexpire status
ããã«ãããå¤å°æéã¯ããããã®ã®ãexpireã®å®è¡ãä¸æçã«åæ¢ããããã¢ã¯ãã£ãã§ã®ã¿å®è¡ãããããã«éç¨ãããã¨ãã£ãäºãã§ããããã«ãªãã
æ´æ°ãã°åé¤
ãã¥ã¢ã«ãã¹ã¿æ§æã§ã¯ä¸¡ãã¹ã¿ã§æ´æ°ãã°(ulog)ãåºåããäºãå¿ é ã«ãªããæ´æ°ãã°ã¯æ¾ã£ã¦ããã°ééãªãå¢ãç¶ããã®ã§ãé©å½ãªã¿ã¤ãã³ã°ã§åé¤ããå¿ è¦ãããã
TTãulimãªãã·ã§ã³ä»ãã§èµ·åããã°æå®ãããµã¤ãº(ä»è¿)ã§æ´æ°ãã°ãåå²ããããä»å¾ã¬ããªã±ã¼ã·ã§ã³ã«ä½¿ç¨ãããªãæ´æ°ãã°ãã¡ã¤ã«ã¯rmã³ãã³ãã§åé¤ãã¦ãæ§ããªããããªã®ã§*2ãç¾å¨ä½¿ç¨ä¸ã®æ´æ°ãã°ãã¡ã¤ã«ä»¥å¤ã§ãæ´æ°æå»ãç¸æãã¹ãã®ã¬ããªã±ã¼ã·ã§ã³é 延æé(ãç¾å¨æå»ããå¼ããæå»)ããåã®æ´æ°ãã°ãå®æçã«åé¤ããã°è¯ãããã ã
é 延æéã¯ããããã®ãã¹ã¿ãã¬ããªã±ã¼ã·ã§ã³ç¸æã«å¯¾ãã¦
tcrmgr inform -st host
ãå®è¡ããã¨delayè¡ã§å¾ãããã
ãã¨ã¯findã³ãã³ãã®mminãmtimeãªãã·ã§ã³ã使ç¨ãã¦å¤ãæ´æ°ãã°ãåé¤ããã°disk fullã®æãç®ã¯é¿ããããã
ãªããã¹ã¿ã³ãã¤ã§expireãå®æå®è¡ãã¦ããªãå ´åãã¹ã¿ã³ãã¤âã¢ã¯ãã£ãã§ã¬ããªã±ã¼ã·ã§ã³ããå
容ãç¡ãããã¢ã¯ãã£ãã®é
延æéãå¢å ãã¦ãã£ã¦ãã¾ãã
ãã®ç¾è±¡ã¯ãã¹ã¿ã³ãã¤ã§å®æçã«ãä½ãåé¤ããªãoutã³ãã³ããã®ãããªãã¼ã¿ã«å½±é¿ããªãæ´æ°å¦çãå®è¡ããã¨åé¿ã§ããã
ãã¹ãã®å¾©å¸°
ã¢ã¯ãã£ãããã¹ã¿ã³ãã¤ã«åãæ¿ããæ¹æ³ã¯è¯éºã«ã¹ã«ã¼ã
ã¹ã¿ã³ãã¤ã¸ã®åãæ¿ããã¢ã¯ãã£ããã¹ã¿ã®è¨ç»çãªçæåæ¢ã«ãããã®ã§ããã°ãexpireã®å®è¡/åæ¢ã«æ°ãã¤ãã¤ã¤ã¹ã¿ã³ãã¤(å ã¢ã¯ãã£ã)ã®TTãèµ·åããã°ã¬ããªã±ã¼ã·ã§ã³ãåéãããã®ã§è¯ãããã©ããã¼ãã¦ã§ã¢æ éçã«ãã£ã¦æ°ãããã¹ãã«äº¤æãããå ´åããã®ã¾ã¾ã¬ããªã±ã¼ã·ã§ã³ãåéããäºã¯ã§ããªãã
ããããæã¯ä¸åº¦ãã®æç¹ã§ã®ã¢ã¯ãã£ãç°å¢ã®ããã¯ã¢ãããã¡ã¤ã«ãä½æãããã®ãã¡ã¤ã«ãã¹ã¿ã³ãã¤ã«ç§»ãã¦èµ·åããã°è¯ããããã
ããã¥ã¢ã«(Setting Replication on Demand)ã«ããã¨ãtcrmgrã®copyãµãã³ãã³ãã«æ¬¡ã®ã·ã§ã«ã¹ã¯ãªããã渡ãã¦å®è¡ããã°ãã¼ã¿ãã¼ã¹ãã¡ã¤ã«ã®ããã¯ã¢ãããè¡ããããã ã
ttbackup.sh
#! /bin/sh srcpath="$1" destpath="$1.$2" rm -f "$destpath" cp -f "$srcpath" "$destpath"
tcrmgr copy localhost '@/path/to/ttbackup.sh'
tcrmgrã®copyãµãã³ãã³ãã¯ã大éæã«ã¯TTå
é¨ã§ãã¼ã¿ãã¼ã¹ãã¡ã¤ã«ãããã¯ãã¦ã³ãã¼ãã¦ããã¯ã解é¤ããå¦çãå¼ã³åºãã¦ããã¿ããã§ããªã¢ã¼ãããå®è¡ãã¦ãããã¯ã¢ãããã¡ã¤ã«ãä½æãããã®ã¯ãµã¼ãå´ã«ãªããçµæ§æãããä»æ§ã
ã¾ãã渡ãttbackup.shãã¡ã¤ã«ã®ãã¹ã¯TTããè¦ããã¹ã«ãªããTTã¯dmnãªãã·ã§ã³ä»ãã§èµ·åããå ´åã/ã«chdirãã¦ããã®ã§çµ¶å¯¾ãã¹ã渡ããªãã¨å¥å¦ãªã¨ã©ã¼ãè¦ãäºã«ãªãã
ã¢ã¯ãã£ãå´ã§ä½æããããã¯ã¢ãããã¡ã¤ã«ãã¹ã¿ã³ãã¤ã«ç§»ã(å¤åã¤ã³ããã¯ã¹ã®ããã¯ã¢ãããã¡ã¤ã«ã¯ãããªã)ããã¡ã¤ã«åã«å«ã¾ããã¿ã¤ã ã¹ã¿ã³ããrtsãã¡ã¤ã«ã«æ¸ãè¾¼ã¿ãããããã®ãªãå¤ããã¼ã¿ãã¼ã¹ãã¡ã¤ã«ãæ´æ°ãã°ãå ¨ã¦åé¤ãã¦ããèµ·åããã°å¾©å¸°ã§ããã
ããã¾ã
- 検討篇
- PHPから利用する篇
- ãã¥ã¢ã«ãã¹ã¿ç¯