| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
26 | 27 | 28 | 29 | 30 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
10 | 11 | 12 | 13 | 14 | 15 | 16 | |||
17 | 18 | 19 | 20 | 21 | 22 | 23 | |||
24 | 25 | 26 | 27 | 28 | 29 | 30 | |||
31 | 1 | 2 | 3 | 4 | 5 | 6 |
SQL標準定義了4類隔離級別,包括了一些具體規(guī)則,用來限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的。低級別的隔離級一般支持更高的并發(fā)處理,并擁有更低的系統(tǒng)開銷。
Read Uncommitted(讀取未提交內(nèi)容)
在該隔離級別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果。本隔離級別很少用于實際應(yīng)用,因為它的性能也不比其他級別好多少。讀取未提交的數(shù)據(jù),也被稱之為臟讀(Dirty Read)。
Read Committed(讀取提交內(nèi)容)
這是大多數(shù)數(shù)據(jù)庫系統(tǒng)的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務(wù)只能看見已經(jīng)提交事務(wù)所做的改變。這種隔離級別 也支持所謂的不可重復(fù)讀(Nonrepeatable Read),因為同一事務(wù)的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結(jié)果。
Repeatable Read(可重讀)
這是MySQL的默認事務(wù)隔離級別,它確保同一事務(wù)的多個實例在并發(fā)讀取數(shù)據(jù)時,會看到同樣的數(shù)據(jù)行。不過理論上,這會導(dǎo)致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當用戶讀取某一范圍的數(shù)據(jù)行時,另一個事務(wù)又在該范圍內(nèi)插入了新行,當用戶再讀取該范圍的數(shù)據(jù)行時,會發(fā)現(xiàn)有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。
Serializable(可串行化)
這是最高的隔離級別,它通過強制事務(wù)排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數(shù)據(jù)行上加上共享鎖。在這個級別,可能導(dǎo)致大量的超時現(xiàn)象和鎖競爭。
這四種隔離級別采取不同的鎖類型來實現(xiàn),若讀取的是同一個數(shù)據(jù)的話,就容易發(fā)生問題。例如:
臟讀(Drity Read):某個事務(wù)已更新一份數(shù)據(jù),另一個事務(wù)在此時讀取了同一份數(shù)據(jù),由于某些原因,前一個RollBack了操作,則后一個事務(wù)所讀取的數(shù)據(jù)就會是不正確的。
不可重復(fù)讀(Non-repeatable read):在一個事務(wù)的兩次查詢之中數(shù)據(jù)不一致,這可能是兩次查詢過程中間插入了一個事務(wù)更新的原有的數(shù)據(jù)。
幻讀(Phantom Read):在一個事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致,例如有一個事務(wù)查詢了幾列(Row)數(shù)據(jù),而另一個事務(wù)卻在此時插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中,就會發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的。
在MySQL中,實現(xiàn)了這四種隔離級別,分別有可能產(chǎn)生問題如下所示:
下面,將利用MySQL的客戶端程序,分別測試幾種隔離級別。測試數(shù)據(jù)庫為test,表為tx;表結(jié)構(gòu):
id | int |
num | int |
兩個命令行客戶端分別為A,B;不斷改變A的隔離級別,在B端修改數(shù)據(jù)。
(一)、將A的隔離級別設(shè)置為read uncommitted(未提交讀)
在B未更新數(shù)據(jù)之前:
客戶端A:
B更新數(shù)據(jù):
客戶端B:
客戶端A:
經(jīng)過上面的實驗可以得出結(jié)論,事務(wù)B更新了一條記錄,但是沒有提交,此時事務(wù)A可以查詢出未提交記錄。造成臟讀現(xiàn)象。未提交讀是最低的隔離級別。
(二)、將客戶端A的事務(wù)隔離級別設(shè)置為read committed(已提交讀)
在B未更新數(shù)據(jù)之前:
客戶端A:B更新數(shù)據(jù):
客戶端B:
客戶端A:
經(jīng)過上面的實驗可以得出結(jié)論,已提交讀隔離級別解決了臟讀的問題,但是出現(xiàn)了不可重復(fù)讀的問題,即事務(wù)A在兩次查詢的數(shù)據(jù)不一致,因為在兩次查詢之間事務(wù)B更新了一條數(shù)據(jù)。已提交讀只允許讀取已提交的記錄,但不要求可重復(fù)讀。
(三)、將A的隔離級別設(shè)置為repeatable read(可重復(fù)讀)
在B未更新數(shù)據(jù)之前:
B更新數(shù)據(jù):
客戶端B:
客戶端A:
B插入數(shù)據(jù):
客戶端B:
客戶端A:
由以上的實驗可以得出結(jié)論,可重復(fù)讀隔離級別只允許讀取已提交記錄,而且在一個事務(wù)兩次讀取一個記錄期間,其他事務(wù)部的更新該記錄。但該事務(wù)不要求與其他事務(wù)可串行化。例如,當一個事務(wù)可以找到由一個已提交事務(wù)更新的記錄,但是可能產(chǎn)生幻讀問題(注意是可能,因為數(shù)據(jù)庫對隔離級別的實現(xiàn)有所差別)。像以上的實驗,就沒有出現(xiàn)數(shù)據(jù)幻讀的問題。
(四)、將A的隔離級別設(shè)置為 可串行化 (Serializable)
A端打開事務(wù),B端插入一條記錄
事務(wù)A端:
事務(wù)B端:
因為此時事務(wù)A的隔離級別設(shè)置為serializable,開始事務(wù)后,并沒有提交,所以事務(wù)B只能等待。
事務(wù)A提交事務(wù):
事務(wù)A端
事務(wù)B端
serializable完全鎖定字段,若一個事務(wù)來查詢同一份數(shù)據(jù)就必須等待,直到前一個事務(wù)完成并解除鎖定為止 。是完整的隔離級別,會鎖定對應(yīng)的數(shù)據(jù)表格,因而會有效率的問題。
一、rsync的概述
rsync是類unix系統(tǒng)下的數(shù)據(jù)鏡像備份工具,從軟件的命名上就可以看出來了——remote sync。rsync是Linux系統(tǒng)下的文件同步和數(shù)據(jù)傳輸工具,它采用“rsync”算法,可以將一個客戶機和遠程文件服務(wù)器之間的文件同步,也可以 在本地系統(tǒng)中將數(shù)據(jù)從一個分區(qū)備份到另一個分區(qū)上。如果rsync在備份過程中出現(xiàn)了數(shù)據(jù)傳輸中斷,恢復(fù)后可以繼續(xù)傳輸不一致的部分。rsync可以執(zhí)行 完整備份或增量備份。它的主要特點有:
1.可以鏡像保存整個目錄樹和文件系統(tǒng);
2.可以很容易做到保持原來文件的權(quán)限、時間、軟硬鏈接;無須特殊權(quán)限即可安裝;
3.可以增量同步數(shù)據(jù),文件傳輸效率高,因而同步時間短;
4.可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接;
5.支持匿名傳輸,以方便進行網(wǎng)站鏡象等;
6.加密傳輸數(shù)據(jù),保證了數(shù)據(jù)的安全性;
二、鏡像目錄與內(nèi)容
rsync -av duying /tmp/test
查看/tmp/test目錄,我們可以看到此命令是把duying這個文件夾目錄連同內(nèi)容全部考到當前目錄下了
rsync -av duying/ /tmp/test 注意:比上一條命令多了符號“/”
再次查看/tmp/test目錄,我們發(fā)現(xiàn)沒有duying這個目錄,只是看到了目錄中的內(nèi)容
三、增量備份本地文件
rsync -avzrtopgL --progress /src /dst
-v是“--verbose”,即詳細模式輸出; -z表示“--compress”,即傳輸時對數(shù)據(jù)進行壓縮處理;
-r表示“--recursive”,即對子目錄以遞歸的模式處理;-t是“--time”,即保持文件時間信息;
-o表示“owner”,用來保持文件屬主信息;-p是“perms”,用來保持文件權(quán)限;
-g是“group”,用來保持文件的屬組信息;
--progress用于顯示數(shù)據(jù)鏡像同步的過程;
四、鏡像同步備份文件
rsync -avzrtopg --progress --delete /src /dst
--delete選項指定以rsync服務(wù)器端為基礎(chǔ)進行數(shù)據(jù)鏡像同步,也就是要保持rsync服務(wù)器端目錄與客戶端目錄的完全一致;
--exclude選項用于排除不需要傳輸?shù)奈募愋停?/p>
五、設(shè)置定時備份策略
crontab -e
30 3 * * * rsync -avzrtopg --progress --delete --exclude "*access*"
--exclude "*debug*" /src /dst
如果文件比較大,可使用nohup將進程放到后臺執(zhí)行。
nohup rsync -avzrtopgL --progress /data/opt /data2/ >/var/log/$(date +%Y%m%d).mail.log &
六、rsync的優(yōu)點與不足
與傳統(tǒng)的cp、tar備份方式對比,rsync具有安全性高、備份迅速、支持增量備份等優(yōu)點,通過rsync可以解決對實時性要求不高的數(shù)據(jù)備份需求,例如,定期地備份文件服務(wù)器數(shù)據(jù)到遠端服務(wù)器,對本地磁盤定期進行數(shù)據(jù)鏡像等。
但是隨著系統(tǒng)規(guī)模的不斷擴大,rsync的缺點逐漸被暴露了出來。首先,rsync做數(shù)據(jù)同步時,需要掃描所有文件后進行對比,然后進行差量傳輸。如果文 件很大,掃面文件是非常耗時的,而且發(fā)生變化的文件往往是很少一部分,因此rsync是非常低效的方式。其次,rsync不能實時監(jiān)測、同步數(shù)據(jù),雖然它 可以通過Linux守護進程的方式觸發(fā)同步,但是兩次觸發(fā)動作一定會有時間差,可能導(dǎo)致服務(wù)器端和客戶端數(shù)據(jù)出現(xiàn)不一致。
轉(zhuǎn)自:http://blog.sina.com.cn/s/blog_6954b9a901011esn.html
Linux下如何查看版本信息, 包括位數(shù)、版本信息以及CPU內(nèi)核信息、CPU具體型號等等,整個CPU信息一目了然。
除了幫助頁面,所有URIs只會服務(wù)application/json
類型的資源,并且需要HTTP基礎(chǔ)認證(使用標準RabbitMQ用戶數(shù)據(jù)庫). 默認用戶是guest/guest.
大多數(shù)URIs需要虛擬主機名稱作為其路徑的一部分, 因為名稱是虛擬主機的唯一標識符對象. 默認虛擬主機稱為"/
", 它需要編碼為"%2f
".
PUT一個資源會對其進行創(chuàng)建. 你上傳的JSON對象必須有某個鍵keys (下面文檔有描述),其它的鍵會被忽略. 缺失鍵會引發(fā)錯誤.
在AMQP中,由于綁定沒有名稱或IDs,因此我們基于其所有屬性人工合成了一個.
由于一般情況下很難預(yù)測這個名字, 你可以通過POST一個工廠URI來創(chuàng)建綁定.查看下面的例子.
arguments
字段會被忽略.你不創(chuàng)建一個隊列,交換器或使用參數(shù)進行綁定. 帶有參數(shù)的隊列,交換器或綁定也不會顯示這些參數(shù).下面有幾個快速例子,它們使用了Unix命令行工具curl
:
$ curl -i -u guest:guest http://localhost:55672/api/vhosts
HTTP/1.1 200 OK
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Tue, 31 Aug 2010 15:46:59 GMT
Content-Type: application/json
Content-Length: 5
["/"]
$ curl -i -u guest:guest -H "content-type:application/json" \ -XPUT http://localhost:55672/api/vhosts/foo
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Fri, 27 Aug 2010 16:56:00 GMT
Content-Type: application/json
Content-Length: 0
注意: 你必須將mime類型指定為application/json
.
Note: 在上傳的JSON對象中,對象名稱是不需要的,因為它已經(jīng)包含在了URI中. 由于一個虛擬主機除了名稱外沒有其它屬性,這意味著你完全不需要指定一個body.
$ curl -i -u guest:guest -H "content-type:application/json" \ -XPUT -d'{"type":"direct","auto_delete":false,"durable":true,"arguments":[]}' \ http://localhost:55672/api/exchanges/%2f/my-new-exchange
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Fri, 27 Aug 2010 17:04:29 GMT
Content-Type: application/json
Content-Length: 0
注意: 在PUT或DELETE的響應(yīng)中, 除非失敗了,否則我們絕不會返回一個body.
$ curl -i -u guest:guest -H "content-type:application/json" \ -XDELETE http://localhost:55672/api/exchanges/%2f/my-new-exchange
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Fri, 27 Aug 2010 17:05:30 GMT
Content-Type: application/json
Content-Length: 0
GET | PUT | DELETE | POST | Path | Description |
---|---|---|---|---|---|
X | /api/overview | 描述整個系統(tǒng)的各種隨機信息。 | |||
X | /api/connections | 所有打開連接的列表. | |||
X | X | /api/connections/name | 一個單獨的連接. DELETE它會導(dǎo)致連接關(guān)閉. | ||
X | /api/channels | 所有打開通道的列表. | |||
X | /api/channels/channel | 單個通道的詳情. | |||
X | /api/exchanges | 所有交換器的列表. | |||
X | /api/exchanges/vhost | 指定虛擬主機中所有交換器列表. | |||
X | X | X | /api/exchanges/vhost/name | 一個單獨的交換器.要PUT一個交換器,你需要一些像下面這樣的body:{"type":"direct","auto_delete":false,"durable":true,"arguments":[]} | |
X | /api/exchanges/vhost/name/bindings | 指定交換器中的綁定列表. | |||
X | /api/queues | 所有隊列的列表. | |||
X | /api/queues/vhost | 指定虛擬主機中所有隊列列表. | |||
X | X | X | /api/queues/vhost/name | 一個單獨隊列.要PUT一個隊列, 你需要一些像下面這樣的body:{"auto_delete":false,"durable":true,"arguments":[]} | |
X | /api/queues/vhost/queue/bindings | 指定隊列中的所有綁定列表. | |||
X | /api/bindings | 所有綁定列表. | |||
X | /api/bindings/vhost | 指定虛擬主機上的所有綁定列表. | |||
X | X | /api/bindings/vhost/queue/exchange | 隊列和交換器之間的所有綁定列表. 記住,隊列和交換器可以綁定多次!要創(chuàng)建一個新綁定, POST 這個URI.你需要一些像下面這樣的body:{"routing_key":"my_routing_key","arguments":[]}響應(yīng)會包含一個Location header,它會告訴你新綁定的URI. | ||
X | X | X | /api/bindings/vhost/queue/exchange/props | 隊列和交換器之間的單個綁定. URI的props部分是一個名稱,用于由路由鍵和屬性組成的綁定.你可以通過PUT這個URI來創(chuàng)建一個綁定,它比上面POST URI更方便. | |
X | /api/vhosts | 所有虛擬主機列表. | |||
X | X | X | /api/vhosts/name | 單個虛擬主機.由于虛擬主機只有一個名稱,因此在PUT時不需要body. | |
X | /api/users | 所有用戶列表. | |||
X | X | X | /api/users/name | 單個用戶. 要PUT一個用戶, 你需要一些像下面這樣的body:{"password":"secret"} | |
X | /api/users/user/permissions | 指定用戶的所有權(quán)限列表. | |||
X | /api/permissions | 所有用戶的所有權(quán)限列表. | |||
X | X | X | /api/permissions/vhost/user | 一個虛擬主機中某個用戶的個人權(quán)限. 要PUT一個權(quán)限,你需要一些像下面這樣的body:{"scope":"client","configure":".*","write":".*","read":".*"} |
rabbitmqctl — 用于管理中間件的命令行工具
rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]
RabbitMQ是AMQP的實現(xiàn), 后者是高性能企業(yè)消息通信的新興標準. RabbitMQ server是AMQP 中間件健壯的,可擴展的實現(xiàn).
rabbitmqctl 用來管理RabbitMQ中間件的命令行工具.它通過連接中間件節(jié)點來執(zhí)行所有操作。
如果中間件沒有運行,將會顯示診斷信息, 不能到達,或因不匹配Erlang cookie而拒絕連接.
[-n node]
默認節(jié)點是"rabbit@server",此處的server是本地主機. 在一個名為"server.example.com"的主機上, RabbitMQ Erlang node 的節(jié)點名稱通常是rabbit@server (除非RABBITMQ_NODENAME在啟動時設(shè)置了非默認值). hostname -s 的輸出通常是"@" 標志后的東西.查看rabbitmq-server(1)來了解配置RabbitMQ broker的細節(jié).
[-q]
使用-q標志來啟用寧靜(quiet)模式,這會一致消息輸出.
[-t timeout]
操作超時時間(秒為單位). 只適用于"list" 命令. 默認是無窮大.
用于停止運行RabbitMQ的Erlang node.如果指定了pid_file,還將等待指定的過程結(jié)束。例如:
rabbitmqctl stop
此命令會終止RabbitMQ node的運行.
stop_app
停止RabbitMQ application,但Erlang node會繼續(xù)運行.此命令主要用于優(yōu)先執(zhí)行其它管理操作(這些管理操作需要先停止RabbitMQ application),如. reset.例如:
rabbitmqctl stop_app
start_app
啟動RabbitMQ application.
此命令典型用于在執(zhí)行了其它管理操作之后,重新啟動停止的RabbitMQ application。如reset.例如:
rabbitmqctl start_app
此命令來指導(dǎo)RabbitMQ node來啟動RabbitMQ application.
wait {pid_file}
等待RabbitMQ application啟動.此命令用來等待RabbitMQ application來啟動node。它會等待創(chuàng)建pid文件,然后等待pid文件中的特定pid過程啟動,最后等待RabbitMQ application 來啟動node.
pid file是通過rabbitmq-server 腳本來創(chuàng)建的.默認情況下,它存放于Mnesia目錄中. 修改RABBITMQ_PID_FILE 環(huán)境變量可以改變此位置。如:
rabbitmqctl wait /var/run/rabbitmq/pid
此命令會在RabbitMQ node啟動后返回.
reset
將RabbitMQ node還原到最初狀態(tài).包括從所在群集中刪除此node,從管理數(shù)據(jù)庫中刪除所有配置數(shù)據(jù),如已配置的用戶和虛擬主機,以及刪除所有持久化消息.
執(zhí)行reset和force_reset之前,必須停止RabbitMQ application ,如使用stop_app.
示例:
rabbitmqctl reset
此命令會重設(shè)RabbitMQ node.
force_reset
強制RabbitMQ node還原到最初狀態(tài).
不同于reset , force_reset 命令會無條件地重設(shè)node,不論當前管理數(shù)據(jù)庫的狀態(tài)和集群配置是什么. 它只能在數(shù)據(jù)庫或集群配置已損壞的情況下才可使用。
執(zhí)行reset和force_reset之前,必須停止RabbitMQ application ,如使用stop_app.
示例:
rabbitmqctl force_reset
此命令會重設(shè)RabbitMQnode.
rotate_logs {suffix}
指示RabbitMQ node循環(huán)日志文件.
RabbitMQ 中間件會將原來日志文件中的內(nèi)容追加到原始名稱和后輟的日志文件中,然后再將原始日志文件內(nèi)容復(fù)制到新創(chuàng)建的日志上。實際上,當前日志內(nèi)容會移到以此后輟結(jié)尾的文件上。當目標文件不存在時,將會進行創(chuàng)建。如果不指定后輟,則不會發(fā)生循環(huán),日志文件只是重新打開。示例:
rabbitmqctl rotate_logs .1
此命令指示RabbitMQ node將日志文件的內(nèi)容追加到新日志文件(文件名由原日志文件名和.1后輟構(gòu)成)中。如. rabbit@mymachine.log.1 和 rabbit@mymachine-sasl.log.1. 最后, 日志會在原始位置恢復(fù)到新文件中.
join_cluster {clusternode} [--ram]
加入集群的節(jié)點.
[--ram]
如果進行了設(shè)置,節(jié)點將以RAM節(jié)點身份加入集群.
指導(dǎo)節(jié)點成為集群中的一員. 在加入集群之前,節(jié)點會重置,因此在使用此命令時,必須小心. 這個命令要成功,RabbitMQ應(yīng)用程序必須先停止,如stop_app.
集群節(jié)點可以是兩種類型: 磁盤節(jié)點(Disc Node) 或 內(nèi)存節(jié)點(RAM Node).磁盤節(jié)點會在RAM和磁盤中復(fù)制數(shù)據(jù), 通過冗余可以防止節(jié)點失效事件,并可從斷電這種全局事件中進行恢復(fù). RAM節(jié)點只在RAM中復(fù)制數(shù)據(jù)(除了隊列的內(nèi)容外,還依賴于隊列是否是持久化的或者內(nèi)容對于內(nèi)存來說是否過大) ,并主要用于可伸縮性. RAM節(jié)點只有當管理資源(如,增加/刪除隊列,交換機,或綁定)的時候才具有更高的性能.一個集群必須至少有一個磁盤節(jié)點,通常來說還不止一個.
默認情況下,節(jié)點是磁盤節(jié)點.如果你想要創(chuàng)建內(nèi)存節(jié)點,需要提供--ram 標志.
在執(zhí)行cluster命令之后, 無論何時,當前節(jié)點上啟動的RabbitMQ 應(yīng)用程序在節(jié)點宕機的情況下,會嘗試連接集群中的其它節(jié)點。
要脫離集群, 必須重設(shè)(reset)節(jié)點. 你也可以通過forget_cluster_node 命令來遠程刪除節(jié)點.
更多詳情,參考集群指南.
例如:
rabbitmqctl join_cluster hare@elena --ram
此命令用于指示RabbitMQ node以ram節(jié)點的形式將 hare@elena 加入集群.
cluster_status
按節(jié)點類型來分組展示集群中的所有節(jié)點,包括當前運行的節(jié)點.
例如:
rabbitmqctl cluster_status
此命令會顯示集群中的所有節(jié)點.
change_cluster_node_type {disc | ram}
修改集群節(jié)點的類型. 要成功執(zhí)行此操作,必須首先停止節(jié)點,要將節(jié)點轉(zhuǎn)換為RAM節(jié)點,則此節(jié)點不能是集群中的唯一disc節(jié)點。
例如:
rabbitmqctl change_cluster_node_type disc
此命令會將一個RAM節(jié)點轉(zhuǎn)換為disc節(jié)點.
forget_cluster_node [--offline]
[--offline]
允許節(jié)點從脫機節(jié)點中刪除. 這只在所有節(jié)點都脫機且最后一個掉線節(jié)點不能再上線的情況下有用,從而防止整個集群從啟動。它不能使用在其它情況下,因為這會導(dǎo)致不一致.
遠程刪除一個集群節(jié)點.要刪除的節(jié)點必須是脫機的, 而在刪除節(jié)點期間節(jié)點必須是在線的,除非使用了--offline 標志.
當使用--offline 標志時,rabbitmqctl不會嘗試正常連接節(jié)點;相反,它會臨時改變節(jié)點以作修改.如果節(jié)點不能正常啟動的話,這是非常有用的.在這種情況下,節(jié)點將變成集群元數(shù)據(jù)的規(guī)范源(例如,隊列的存在),即使它不是以前的。因此,如果有可能,你應(yīng)該在最新的節(jié)點上使用這個命令來關(guān)閉。
例如:
rabbitmqctl -n hare@mcnulty forget_cluster_node rabbit@stringer
此命令會從節(jié)點hare@mcnulty中刪除rabbit@stringer節(jié)點.
rename_cluster_node {oldnode1} {newnode1} [oldnode2] [newnode2 ...]
支持在本地數(shù)據(jù)庫中重命名集群節(jié)點.
此子命令會促使rabbitmqctl臨時改變節(jié)點以作出修改. 因此本地集群必須是停止的,其它節(jié)點可以是在線或離線的.
這個子命令接偶數(shù)個參數(shù),成對表示節(jié)點的舊名稱和新名稱.你必須指定節(jié)點的舊名稱和新名稱,因為其它停止的節(jié)點也可能在同一時間重命名.
同時停止所有節(jié)點來重命名也是可以的(在這種情況下,每個節(jié)點都必須給出舊名稱和新名稱)或一次停止一個節(jié)點來重命名(在這種情況下,每個節(jié)點只需要被告知其名句是如何變化的).
例如:
rabbitmqctl rename_cluster_node rabbit@misshelpful rabbit@cordelia
此命令來將節(jié)點名稱rabbit@misshelpful 重命名為rabbit@cordelia.
update_cluster_nodes {clusternode}
用于咨詢具有最新消息的節(jié)點.
指示已集群的節(jié)點醒來時聯(lián)系clusternode.這不同于join_cluster ,因為它不會加入任何集群 - 它會檢查節(jié)點已經(jīng)以clusternode的形式存在于集群中了.
需要這個命令的動機是當節(jié)點離線時,集群可以變化.考慮這樣的情況,節(jié)點A和節(jié)點B都在集群里邊,這里節(jié)點A掉線了,C又和B集群了,然后B又離開了集群.當A醒來的時候,它會嘗試聯(lián)系B,但這會失敗,因為B已經(jīng)不在集群中了.update_cluster_nodes -n A C 可解決這種場景.
force_boot
在這種節(jié)點掉線情況下,你可以調(diào)用rabbitmqctl force_boot .這就告訴節(jié)點下一次無條件的啟動節(jié)點.在此節(jié)點關(guān)閉后,集群的任何變化,它都會丟失.
如果最后一個掉線的節(jié)點永久丟失了,那么你需要優(yōu)先使用rabbitmqctl forget_cluster_node --offline, 因為它可以確保在丟失的節(jié)點上掌握的鏡像隊列得到提升。
例如:
rabbitmqctl force_boot
這可以強制節(jié)點下次啟動時不用等待其它節(jié)點.
sync_queue [-p vhost] {queue}
指示未同步slaves上的鏡像隊列自行同步.同步發(fā)生時,隊列會阻塞(所有出入隊列的發(fā)布者和消費者都會阻塞).此命令成功執(zhí)行后,隊列必須是鏡像的.
注意,未同步隊列中的消息被耗盡后,最終也會變成同步. 此命令主要用于未耗盡的隊列。
cancel_sync_queue [-p vhost] {queue}
取消同步的隊列名稱.
指示同步鏡像隊列停止同步.
purge_queue [-p vhost] {queue}
要清除隊列的名稱.
清除隊列(刪除其中的所有消息).
set_cluster_name {name}
設(shè)置集群名稱. 集群名稱在client連接時,會通報給client,也可用于federation和shovel插件記錄消息的來源地. 群集名稱默認是來自在群集中的第一個節(jié)點的主機名,但可以改變。
例如:
rabbitmqctl set_cluster_name london
設(shè)置集群名稱為"london".
注意rabbitmqctl 管理RabbitMQ 內(nèi)部用戶數(shù)據(jù)庫. 任何來自其它認證后端的用戶對于rabbitmqctl來說是不可見的.
add_user {username} {password}
要創(chuàng)建的用戶名稱.
設(shè)置創(chuàng)建用戶登錄broker的密碼.
rabbitmqctl add_user tonyg changeit
此命令用于指示RabbitMQ broker 創(chuàng)建一個擁有非管理權(quán)限的用戶,其名稱為tonyg, 初始密碼為changeit.
delete_user {username}
要刪除的用戶名稱.
例如:
rabbitmqctl delete_user tonyg
此命令用于指示RabbitMQ broker刪除名為tonyg的用戶
change_password {username} {newpassword}
要修改密碼的用戶名稱.
用戶的新密碼.
例如:
rabbitmqctl change_password tonyg newpass
此命令用于指定RabbitMQ broker將tonyg 用戶的密碼修改為newpass.
clear_password {username}
要清除密碼的用戶名稱.
例如:
rabbitmqctl clear_password tonyg
此命令會指示RabbitMQ broker清除名為tonyg的用戶密碼.現(xiàn)在,此用戶不能使用密碼登錄(但可以通過SASL EXTERNAL登錄,如果配置了的話).
authenticate_user {username} {password}
用戶的名稱.
用戶的密碼.
例如:
rabbitmqctl authenticate_user tonyg verifyit
此命令會指示RabbitMQ broker以名稱為tonyg, 密碼為verifyit來進行驗證.
set_user_tags {username} {tag ...}
要設(shè)置tag的用戶名稱.
用于設(shè)置0個,1個或多個tags.任何現(xiàn)有的tags都將被刪除.
例如:
rabbitmqctl set_user_tags tonyg administrator
此命令指示RabbitMQ broker用于確保tonyg 是administrator.當通過AMQP來登錄時,這沒有什么效果,但用戶通過其它的途經(jīng)來登錄時,它可用來管理用戶,虛擬主機和權(quán)限(如使用管理插件).
rabbitmqctl set_user_tags tonyg
此命令會指示RabbitMQ broker刪除tonyg上的任何現(xiàn)有的tag.
list_users
列出用戶. 每個結(jié)果行都包含用戶名,其后緊跟用戶的tags.
例如:
rabbitmqctl list_users
此命令指示RabbitMQ broker列出所有用戶.
注意rabbitmqctl 會管理RabbitMQ的內(nèi)部用戶數(shù)據(jù)庫. 無權(quán)限的用戶將不能使用rabbitmqctl.
add_vhost {vhost}
要創(chuàng)建虛擬主機名稱.
創(chuàng)建一個虛擬主機.
例如:
rabbitmqctl add_vhost test
此命令指示RabbitMQ broker來創(chuàng)建一個新的名為test的虛擬主機.
delete_vhost {vhost}
要刪除的虛擬主機的名稱.
刪除一個虛擬主機.
刪除一個虛擬主機,同時也會刪除所有交換機,隊列,綁定,用戶權(quán)限,參數(shù)和策略.
例如:
rabbitmqctl delete_vhost test
此命令指示RabbitMQ broker刪除名為test的虛擬主機.
list_vhosts [vhostinfoitem ...]
列出所有虛擬主機.
vhostinfoitem 參數(shù)用于標識哪些虛擬主機應(yīng)該包含在結(jié)果集中.結(jié)果集中的列順序會匹配參數(shù)的順序.vhostinfoitem 可接受下面的值:
虛擬主機的名稱.
是否對虛擬主機啟用追蹤.
如果沒有指定vhostinfoitem 參數(shù),那么會顯示虛擬主機名稱.
例如:
rabbitmqctl list_vhosts name tracing
此命令用于指示RabbitMQ broker顯示所有虛擬主機.
set_permissions [-p vhost] {user} {conf} {write} {read}
授予用戶可訪問的虛擬機名稱,默認是/.
可訪問指定虛擬主機的用戶名稱.
一個用于匹配用戶在哪些資源名稱上擁有配置權(quán)限的正則表達式
一個用于匹配用戶在哪些資源名稱上擁有寫權(quán)限的正則表達式.
一個用于匹配用戶在哪些資源名稱上擁有讀權(quán)限的正則表達式.
設(shè)置用戶權(quán)限.
例如:
rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*"
此命令表示RabbitMQ broker授予tonyg 用戶可訪問 /myvhost虛擬主機,并在資源名稱以"tonyg-"開頭的所有資源上都具有配置權(quán)限,并在所有資源上都擁有讀寫權(quán)限。
clear_permissions [-p vhost] {username}
用于設(shè)置禁止用戶訪問的虛擬主機名稱,默認為/.
禁止訪問特定虛擬主機的用戶名稱.
設(shè)置用戶權(quán)限.
例如:
rabbitmqctl clear_permissions -p /myvhost tonyg
此命令用于指示RabbitMQ broker禁止tonyg 用戶訪問/myvhost虛擬主機.
list_permissions [-p vhost]
用于指定虛擬主機名稱,將會列出所有可訪問此虛擬主機的所有用戶名稱和權(quán)限.默認為/.
顯示虛擬機上權(quán)限.
例如:
rabbitmqctl list_permissions -p /myvhost
此命令指示RabbitMQ broker列出所有已授權(quán)訪問/myvhost 虛擬主機的用戶,同時也會列出這些用戶能在虛擬主機資源可操作的權(quán)限.注意,空字符串表示沒有任何授予的權(quán)限。
list_user_permissions {username}
要顯示權(quán)限的用戶名稱.
列出用戶權(quán)限.
例如:
rabbitmqctl list_user_permissions tonyg
此命令指示RabbitMQ broker列出tonyg可授權(quán)訪問的所有虛擬主機名稱,以及在這些虛擬主機上的操作.
RabbitMQ的某些特性(如聯(lián)合插件)是動態(tài)控制的. 每個參數(shù)都是與特定虛擬主機相關(guān)的組件名稱, name和value構(gòu)成的. 組件名稱和name都是字符串,值是Erlang term. 參數(shù)可被設(shè)置,清除和顯示.通常你可以參考文檔來了解如何設(shè)置參數(shù).
set_parameter [-p vhost] {component_name} {name} {value}
設(shè)置一個參數(shù).
要設(shè)置的組件名稱.
要設(shè)置的參數(shù)名稱.
要設(shè)置的參數(shù)值,作不JSON項。在多數(shù)shells中,你更喜歡將其引起來.
例如:
rabbitmqctl set_parameter federation local_username '"guest"'
此命令用于在默認虛擬主機上設(shè)置federation 組件的local_username 參數(shù)值"guest".
clear_parameter [-p vhost] {component_name} {key}
清除參數(shù).
要清除參數(shù)的組件名稱.
要清除的參數(shù)名稱.
例如:
rabbitmqctl clear_parameter federation local_username
此命令用于清除默認虛擬主機上的federation 組件的local_username 參數(shù)值.
list_parameters [-p vhost]
列出虛擬主機上的所有參數(shù).
示例:
rabbitmqctl list_parameters
此命令用于列出默認虛擬主機上的所有參數(shù).
策略用于在集群范圍的基礎(chǔ)上用于控制和修改隊列和交換機的行為. 策略應(yīng)用于虛擬主機,由name, pattern, definition或可選的priority組成. 策略可被設(shè)置,清除和列舉.
set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}
設(shè)置策略.
策略名稱.
正則表達式, 匹配要應(yīng)用的資源
策略的定義,JSON形式.在大多數(shù)shells中,你很可能需要引用這個
策略的整數(shù)優(yōu)先級. 數(shù)字越高則優(yōu)先級越高.默認是0.
策略適用的對象類型,其值可為 "queues", "exchanges" 或 "all".默認是"all".
例如:
rabbitmqctl set_policy federate-me "^amq." '{"federation-upstream-set":"all"}'
此命令在默認虛擬主機上設(shè)置策略為federate-me,這樣內(nèi)建的交換器將進行聯(lián)合.
clear_policy [-p vhost] {name}
清除策略.
要清除的策略名稱.
例如:
rabbitmqctl clear_policy federate-me
此命令來清除默認虛擬主機上的federate-me 策略.
list_policies [-p vhost]
顯示虛擬主機上的所有策略.
例如:
rabbitmqctl list_policies
此命令會顯示默認虛擬主機上的所有策略.
服務(wù)器狀態(tài)查詢查詢服務(wù)器返回一個結(jié)果以制表符分隔的列表. 某些查詢(list_queues, list_exchanges, list_bindings, 和 list_consumers) 接受一個可選的vhost 參數(shù). 如果這個參數(shù)出現(xiàn)了,那么它必須指定在查詢的后面.
list_queues, list_exchanges and list_bindings 命令接受一個可選的虛擬主機參數(shù)以顯示其結(jié)果.默認值為"/".
list_queues [-p vhost] [queueinfoitem ...]
返回隊列的詳細信息. 如果無-p標志,將顯示/虛擬主機上的隊列詳情."-p" 標志可用來覆蓋此默認值.
queueinfoitem 參數(shù)用于指示哪些隊列信息項會包含在結(jié)果集中.結(jié)果集的列順序?qū)⑵ヅ鋮?shù)的順序.queueinfoitem 可以是下面列表中的任何值:
非ASCII字符的隊列名稱.
服務(wù)器重啟后,隊列是否能幸存.
不再使用時,是否需要自動刪除隊列.
隊列參數(shù).
應(yīng)用到隊列上的策略名稱.
關(guān)聯(lián)隊列的Erlang進程ID.
表示隊列專用所有者的代表連接的Erlang進程ID.如果隊列是非專用的,此值將為空.
True:如果隊列是專用的(即有owner_pid), 反之false
表示此channel的專用消費者訂閱到此隊列的Erlang進程Id. 如果沒有專用消費者,則為空.
專用消費者訂閱到此隊列的Consumer tag.如果沒有專用消費者,則為空.
準備分發(fā)給客戶端的消息數(shù)目.
分發(fā)到客戶端但尚未應(yīng)答的消息數(shù)目.
準備分發(fā)和未應(yīng)答消息的總和(隊列深度).
駐留在ram中messages_ready的消息數(shù)目.
駐留在ram中messages_unacknowledged的消息數(shù)目.
駐留在ram中的消息總數(shù).
隊列中持久化消息的數(shù)目(對于瞬時隊列總是0).
隊列中所有消息體的大小總和.這不包括消息屬性(包括headers) 或任何開銷(overhead)。
類似于message_bytes ,但只統(tǒng)計準備投遞給clients的那些消息.
類似于message_bytes ,但只統(tǒng)計那些已經(jīng)投遞給clients但還未應(yīng)答的消息
類似于message_bytes ,但只統(tǒng)計那些在RAM中的消息
類似于message_bytes ,但只統(tǒng)計那些持久化的消息
如果存在,只顯示隊列中第1個消息的timestamp屬性. 消息的時間戳只出現(xiàn)在分頁情況下.
從隊列啟動開如,已從磁盤上讀取該隊列的消息總次數(shù).
從隊列啟動開始,已向磁盤隊列寫消息總次數(shù).
消費者數(shù)目.
時間分數(shù)(0.0與1.0之間),隊列可立即向消費者投遞消息. 它可以小于1.0,如果消費者受限于網(wǎng)絡(luò)堵塞或預(yù)提取數(shù)量.
與隊列相關(guān)的Erlang進程消耗的內(nèi)存字節(jié)數(shù),包括棧,堆以及內(nèi)部結(jié)構(gòu).
如果隊列是鏡像的,這里給出的是當前slaves的IDs.
如果隊列是鏡像的,當前slaves的IDs是master同步的- 即它們可在無消息丟失的情況下,接管master.
隊列狀態(tài).正常情況下是'running', 但如果隊列正在同步也可能是"{syncing, MsgCount}". 處于集群下的節(jié)點如果掉線了,隊列狀態(tài)交顯示'down' (大多數(shù)queueinfoitems 將不可用).
如果沒有指定queueinfoitems,那么將顯示隊列名稱和隊列深度.
例如:
rabbitmqctl list_queues -p /myvhost messages consumers
此命令顯示了/myvhost虛擬主機中每個隊列的深度和消費者數(shù)目.
list_exchanges [-p vhost] [exchangeinfoitem ...]
返回交換器細節(jié).如果沒有指定"-p"選項,將返回 / 虛擬主機的細節(jié). "-p" 選項可用來覆蓋默認虛擬主機.
exchangeinfoitem 參數(shù)用來表示哪些交換器信息要包含在結(jié)果中. 結(jié)果集中列的順序?qū)⑴c參數(shù)順序保持一致. exchangeinfoitem 可接受下面的列表中任何值:
交換器名稱.
交換器類型(如[direct, topic, headers, fanout]).
當服務(wù)器重啟時,交換器是否能復(fù)活.
當不再使用時,交換器是否需要自動刪除.
交換器是否是內(nèi)部的,即不能由client直接發(fā)布.
交換器參數(shù)
如果沒有指定exchangeinfoitems,那么將會顯示交換器類型和類型
例如:
rabbitmqctl list_exchanges -p /myvhost name type
此命令會顯示/myvhost中每個交換器的名稱和類型.
list_bindings [-p vhost] [bindinginfoitem ...]
返回綁定細節(jié).默認情況下返回的是 / 虛擬主機上的綁定詳情.可使用"-p" 標記來覆蓋默認虛擬主機.
bindinginfoitem 參數(shù)用來表示結(jié)果中包含哪些綁定信息. 結(jié)果集中列的順序?qū)⑵ヅ鋮?shù)的順序.bindinginfoitem可接受下面列表的任意值:
綁定中消息來源的名稱. C中非ASCII轉(zhuǎn)義字符.
綁定中消息來源的類別.當前總是exchange. C中非ASCII轉(zhuǎn)義字符.
綁定中消息目的地名稱.C中非ASCII轉(zhuǎn)義字符.
綁定中消息目的地的種類. C中非ASCII轉(zhuǎn)義字符.
綁定的路由鍵,C中非ASCII轉(zhuǎn)義字符.
綁定參數(shù).
如果沒有指定bindinginfoitems,將會顯示所有上述條目.
例如:
rabbitmqctl list_bindings -p /myvhost exchange_name queue_name
此命令來顯示/myvhost虛擬主機上綁定的交換器名稱和隊列名稱.
list_connections [connectioninfoitem ...]
返回TCP/IP連接統(tǒng)計.
connectioninfoitem 參數(shù)用來表示在結(jié)果中包含哪些連接信息. 結(jié)果集中列的順序?qū)⑵ヅ鋮?shù)的順序. connectioninfoitem可接受下面列表的任意值:
與連接相關(guān)的Erlang進程ID.
連接的可讀名稱.
服務(wù)器端口.
返回反向DNS獲取的服務(wù)器主機名稱,或 IP地址(反向DNS解析失敗) 或者未啟用.
Peer 端口.
用Boolean來表示連接是否是SSL的.
SSL 協(xié)議(如. tlsv1)
SSL key exchange 算法 (如 rsa)
SSL cipher 算法 (如aes_256_cbc)
SSL hash 函數(shù) (如 sha)
peer的 SSL 安全證書的主體, RFC4514形式.
peer的 SSL安全證書的發(fā)行者, RFC4514 形式.
peer的SSL安全證書的有效期.
連接狀態(tài)(可為[starting, tuning, opening, running, flow, blocking, blocked, closing, closed]其中一個).
使用的AMQP協(xié)議版本(當前是{0,9,1} 或{0,8,0}). 注意,如果client請求的是AMQP 0-9 連接, 我們會視為AMQP 0-9-1.
使用的SASL認證機制,如PLAIN.
與連接相關(guān)的用戶名
虛擬主機名稱,C中非ASCII轉(zhuǎn)義字符.
連接超時/協(xié)商的心跳間隔,秒為單位.
最大 frame 大小(字節(jié)).
連接建立期間由client發(fā)送的信息屬性.
Octets已收到.
Packets 已收到.
Octets 發(fā)送.
Packets 發(fā)送.
發(fā)送隊列大小.
連接建立的日期和時間,當作timestamp.
如果沒有connectioninfoitems, 那么會顯示user, peer host, peer port,流量控制和內(nèi)存塊狀態(tài)的時間
例如:
rabbitmqctl list_connections send_pend port
此命令會顯示發(fā)送隊列的大小以及第個連接的服務(wù)器端口.
list_channels [channelinfoitem ...]
返回所有當前channel上的信息,邏輯容器執(zhí)行大部分 AMQP命令.這將包含最初AMQP連接的部分,以及不同插件和其它擴展創(chuàng)建的channels.
channelinfoitem 參數(shù)用來表示在結(jié)果集中包含哪些channel信息.結(jié)果集中列的順序?qū)⑵ヅ鋮?shù)的順序. channelinfoitem 可接受下面列表中的任何一個參數(shù):
與連接相關(guān)的Erlang進程ID.
channel所屬的連接Erlang進程ID.
channel的可讀名稱.
channel的數(shù)目,在一個連接中,它有唯一的標識符.
與channel相關(guān)的用戶名稱.
channel操作的虛擬主機.
True:如果channel處于事務(wù)模式,其它情況為false.
True:如果channel是確認模式,其它情況為false.
在channel中接收消息的邏輯AMQP消費者數(shù)目.
在channel中消息已投遞但還未應(yīng)答的消息數(shù)目.
在channel中已收到消息但還沒有提交事務(wù)的消息個數(shù).
新消費者QoS預(yù)提取限制, 0表示無上限.
整個channel QoS預(yù)提取限制, 0表示無上限.
如果沒有指定channelinfoitems,那么將顯示pid, user, consumer_count,messages_unacknowledged.
例如:
rabbitmqctl list_channels connection messages_unacknowledged
此命令會顯示每個channel中連接進程和未應(yīng)答消息的數(shù)目.
list_consumers [-p vhost]
列舉消費者, 即訂閱隊列的消息流. 每行將打印出由制表符分隔的已訂閱隊列的名稱,創(chuàng)建并管理訂閱的channel進程的標識,channel中訂閱的consumer tag唯一標識符, boolean值表示投遞到此消費者的消息是否需要應(yīng)答,整數(shù)值表示表示預(yù)提取限制(為0表示無限制), 以及關(guān)于此消費者的任何其它參數(shù).
status
顯示 broker 狀態(tài)信息,如當前Erlang節(jié)點上運行的應(yīng)用程序, RabbitMQ 和 Erlang 的版本信息, OS 名稱, 內(nèi)存和文件描述符統(tǒng)計信息. (查看cluster_status 命令來找出那些節(jié)點是集群化的以及正在運行的.)
例如:
rabbitmqctl status
此命令顯示了RabbitMQ broker的相關(guān)信息.
environment
顯示每個運行程序環(huán)境中每個變量的名稱和值.
report
為所有服務(wù)器狀態(tài)生成一個服務(wù)器狀態(tài)報告,輸出應(yīng)該重定向到一個文件.
例如:
rabbitmqctl report > server_report.txt
此命令創(chuàng)建了一個服務(wù)器報告,可將它附著在支持請求的電子郵件中.
eval {expr}
執(zhí)行任意Erlang表達式.
例如:
rabbitmqctl eval 'node().'
此命令用于返回rabbitmqctl連接的節(jié)點名稱
close_connection {connectionpid} {explanation}
要關(guān)閉的與連接相關(guān)的Erlang進程ID.
解釋字符串.
指示broker關(guān)閉與Erlang進程id相關(guān)的連接(可通過list_connections 命令查看), 通過為連接客戶端傳遞解釋字符串(作為AMQP連接關(guān)閉協(xié)議的一部分).
例如:
rabbitmqctl close_connection "<rabbit@tanto.4262.0>" "go away"
此命令指示RabbitMQ broker關(guān)閉與Erlang 進程id<rabbit@tanto.4262.0>相關(guān)聯(lián)的連接, 同時向客戶端傳遞go away字符串.
trace_on [-p vhost]
要開啟追蹤的虛擬主機的名稱.
開啟追蹤.注意,追蹤狀態(tài)不是持久化的; 如果服務(wù)器重啟,追蹤狀態(tài)將會丟失.
trace_off [-p vhost]
要停止追蹤的虛擬主機名稱.
停止追蹤.
set_vm_memory_high_watermark {fraction}
set_vm_memory_high_watermark absolute {memory_limit}
流程控制觸發(fā)的新內(nèi)存限制, 以字節(jié)來表示大于或等于0的整數(shù)或以字符串和內(nèi)存單位來表示(如 512M或1G). 可用的單位是: k, kiB: kibibytes (2^10 bytes) M, MiB: mebibytes (2^20) G, GiB: gibibytes (2^30) kB: kilobytes (10^3) MB: megabytes (10^6) GB: gigabytes (10^9)
set_disk_free_limit {disk_limit}
以整數(shù)或字符串單位的可用磁盤下限限制(查看vm_memory_high_watermark), 如 512M or 1G. 一旦可用磁盤空間達到這個限制,就會設(shè)置磁盤報警.
set_disk_free_limit mem_relative {fraction}
相對于整個可用內(nèi)存的限制,其值為非負浮點數(shù). 當值小于1.0時是很危險的,應(yīng)該謹慎使用.