生產(chǎn)環(huán)境中的JBoss AS7 集群方案

JBoss AS7集群方案...2

基礎(chǔ)環(huán)境搭建...2

安裝jdk.3

AS7安裝、配置3

AS7群集配置泽谨、測(cè)試18

AS7集群配置說明18

mod_cluster負(fù)載平衡配置27

測(cè)試mod_cluster負(fù)載平衡32

JBoss AS7集群方案

基礎(chǔ)環(huán)境搭建

安裝的軟件:

Redhat.Enterprise.Linux.v6.UPDATE.3.X86_64

jdk-6u33-linux-x64

jboss-as-7.1.0.Final

httpd-2.2.22

mod_cluster-1.1.3.Final-linux2-x64-so.tar

安裝jdk

1)下載jdk-6u33-linux-x64璧榄,上傳到linux系統(tǒng),/usr/local/java的文件夾吧雹。

2)添加執(zhí)行權(quán)限:chmod 755 jdk-6u33-linux-x64

3)執(zhí)行該文件:./jdk-6u33-linux-x64骨杂,會(huì)出現(xiàn)jdk的文件夾。

4)更改系統(tǒng)環(huán)境變量:用root用戶雄卷,vi /etc/profile搓蚪,在后面添加:

#SetEnvironment of java & jboss

JAVA_HOME=/usr/local/java/jdk1.6.0_33

JRE_HOME=/usr/local/java/jdk1.6.0_33/jre

PATH=$PATH:$JAVA_HOME/bin:JRE_HOME/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:

修改后通過source /etc/profile使它生效。

5)替換系統(tǒng)jdk:RHEL好多都自帶jdk丁鹉,但是版本比較老妒潭,要使用新下載的jdk悴能,需要重新連接。

cd /usr/bin

ln -s -f /usr/local/java/jdk1.6/jre/bin/java

ln -s -f /usr/local/java/jdk1.6/bin/javac

6)檢查jdk版本:java –version杜耙。出現(xiàn)下面顯示搜骡,表示安裝成功。

java version "1.6.0_33"

Java(TM) SE Runtime Environment (build 1.6.0_33-b04)

Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)

AS7安裝佑女、配置

分配用戶組

# groupadd-g 700 jboss

# useradd -u700 -g 700 jboss--創(chuàng)建用戶

# passwd jboss--激活jboss用戶

執(zhí)行下列命令將/jboss分配給jboss用戶记靡。

# cd /

# chown -R jboss:jboss/jboss

# chmod 755/jboss

JBOSS AS7的新特性

JBoss AS7新加入了域(domain)的概念并實(shí)現(xiàn)了相關(guān)功能。域的提出及實(shí)現(xiàn)团驱,其目的是使得多臺(tái)JBossAS服務(wù)器的配置可以集中于一點(diǎn)摸吠,統(tǒng)一配置、統(tǒng)一部署嚎花,從而在管理多臺(tái)JBoss AS服務(wù)器時(shí)寸痢,實(shí)現(xiàn)集中管理。本文詳細(xì)介紹如何使用AS7的這一新特性紊选。

域(Domain)的概念及其與群集(Cluster)的區(qū)別

對(duì)于使用過JBoss AS過往版本的用戶啼止,可能對(duì)AS所提供的群集功能已經(jīng)很熟悉了,在理解域的時(shí)候可能會(huì)遇到困難兵罢。那么域和群集有什么區(qū)別献烦,用處上有什么不同呢?

總的來講卖词,JBoss的群集的目的是提供:

*負(fù)載平衡(Load Balance)

*高可用(High Availablity)

而域的目的則是將多臺(tái)服務(wù)器組成一個(gè)服務(wù)器組(Server Group)巩那,并為一個(gè)服務(wù)器組內(nèi)的多臺(tái)主機(jī)(Host)提供:

*單點(diǎn)集中配置(通過一個(gè)域控制器,即Domain Controller此蜈,實(shí)現(xiàn)組內(nèi)主機(jī)的統(tǒng)一配置)

*單點(diǎn)統(tǒng)一部署即横,通過域控制器將項(xiàng)目一次部署至組內(nèi)全部主機(jī)。

簡(jiǎn)單來講裆赵,群集的目標(biāo)是讓多臺(tái)服務(wù)器分?jǐn)倝毫Χ簦?dāng)一臺(tái)或多臺(tái)服務(wù)器宕機(jī)時(shí),服務(wù)可以繼續(xù)保持運(yùn)轉(zhuǎn)战授;而域的目標(biāo)則是提供集中配置和管理多臺(tái)服務(wù)器的能力舔庶。

在沒有域的概念時(shí),要想讓群集內(nèi)的多臺(tái)服務(wù)器或幾組服務(wù)器保持統(tǒng)一的配置陈醒,一個(gè)一個(gè)分別的去手工維護(hù),是非常麻煩的事情瞧甩,而域的引入解決了這一問題钉跷。

我們可以理解域和群集的相互關(guān)系是”正交(orthogonal)”的:通過一橫一豎這兩條軸,JBoss AS為我們?cè)谶\(yùn)維方面提供了強(qiáng)大的可擴(kuò)展能力肚逸。

準(zhǔn)備工作

使用兩臺(tái)電腦做為實(shí)驗(yàn)器材爷辙,兩臺(tái)電腦的IP分別為192.168.191.134彬坏,192.168.191.130。分別運(yùn)行JBoss AS7膝晾,并組成一個(gè)服務(wù)器組(Server Group)栓始。

192.168.191.134這臺(tái)機(jī)器做為域控制器(Domain Controller)主機(jī)分別被命名為”master“及”slave“。通過配置血当,將master與slave組成一個(gè)服務(wù)器組幻赚,名為’main-server-group’,其中master將做為這個(gè)服務(wù)器組的域控制器臊旭。

解釋:

服務(wù)器組(Server Group):可以由多臺(tái)服務(wù)器(Host)組成落恼,并不一定只有兩臺(tái),所以不要被master及slave這樣的名字給迷惑了离熏,以為一個(gè)服務(wù)器組僅支持一主一從兩臺(tái)hosts佳谦。在一個(gè)服務(wù)器組中,只有一臺(tái)域控制器滋戳。

AS7配置說明

Master上面的配置

* domain.xml*

...

..

...

...

...

...

...

...

這個(gè)文件里面有幾個(gè)部分是值得我們關(guān)注一下的:

# extensions –這一部分定義了域中服務(wù)器在啟動(dòng)時(shí)需要加載的模塊钻蔑。AS7使用了全新設(shè)計(jì)的JBoss Modules來加載模塊,大幅提高了服務(wù)器的啟動(dòng)奸鸯。這一內(nèi)容不是本文講解重點(diǎn)咪笑,后續(xù)我會(huì)專門寫一篇文章來介紹。目前了解到這一程度即可府喳。

# profiles – profiles是domain中定義的一個(gè)核心概念蒲肋,也是domain的核心組成部分《勐基于profiles兜粘,AS7便實(shí)現(xiàn)了域中各服務(wù)器的統(tǒng)一集中配置:用戶可通過profile對(duì)各子系統(tǒng)(subsystem)進(jìn)行配置,完成后將profile配置給某個(gè)或多個(gè)服務(wù)器組弯蚜,各服務(wù)器組內(nèi)的主機(jī)共用一份配置孔轴。

# server groups –服務(wù)器組的概念已經(jīng)在前面的介紹中一再提及,也是AS7的域的設(shè)計(jì)中一個(gè)核心組成部分碎捺。在這里路鹰,AS7默認(rèn)定義了兩個(gè)服務(wù)器組:main-server-group及other-server-group,它們分別使用’default’profile及’ha’ profile收厨。在本實(shí)驗(yàn)中晋柱,我們將使用main-server-group。

* host.xml

...

...

...

上面是一些host.xml中需要配置的關(guān)鍵內(nèi)容诵叁,已經(jīng)針對(duì)要做的測(cè)試做了一些配置上面的修改雁竞,以下是詳細(xì)說明:

# host name按照我們的需要改成了”master”。

# management – management定義了服務(wù)器的管理端口,其中:9999端口是所謂”native”二進(jìn)制端口碑诉,后面的jboss-admin.sh管理命令會(huì)使用這個(gè)端口彪腔;9990則提供基于WEB頁面的管理端。我們等一下兩種管理端口都會(huì)用到进栽。

# domain controller –定義本服務(wù)器所需連接的domain控制器所在地址德挣,因?yàn)閙aster本身就是domain controller,所以連接至本機(jī)localhost即可快毛。

# interfaces – management及public接口服務(wù)所在的地址格嗅,我們要將其設(shè)為slave可以訪問到的IP地址,保證slave可以連接至host

# servers –一個(gè)物理主機(jī)實(shí)際上可以同時(shí)運(yùn)行多臺(tái)JBoss AS7的Server祸泪,而每一臺(tái)Server都可以配置到不同的服務(wù)器組去吗浩。在本實(shí)驗(yàn)中,我們使用最簡(jiǎn)的情況没隘,master上面只跑一個(gè)server-one懂扼,屬于main-server-group,把其它AS7默認(rèn)設(shè)定的server可以都刪掉右蒲,只留server-one阀湿。

Slave上面的配置

* domain.xml

Slave這臺(tái)機(jī)器不作為域控制器而存在,因此不需要管它瑰妄,也可以將domain.xml刪掉或改名陷嘴。

* host.xml

...

...

上面的配置有幾點(diǎn)需要說明:

* slave里面,host name指定為”slave”间坐。

* domain-controller:指定為master的IP:192.168.191.134灾挨,通過9999管理端口進(jìn)行通訊。

* slave上面竹宋,屬于main-server-group的server也命名為”server-one”劳澄,這會(huì)和master上面的server沖突嗎?實(shí)際上不會(huì)蜈七,因?yàn)閮膳_(tái)同樣名字的server運(yùn)行在不同的host當(dāng)中秒拔。

AS 7.1的補(bǔ)充說明

從JBoss AS 7.1開始,對(duì)控制端口(9999及HTTP端的9990)的安全配置成為必須飒硅。因此需要補(bǔ)充下述安全配置方面的步驟:

首先要在master上面創(chuàng)建管理員的賬號(hào)砂缩,在bin目錄下有add-user工具可以幫我們創(chuàng)建賬號(hào)密碼并進(jìn)行配置,我們創(chuàng)建一個(gè)管理員賬號(hào)admin三娩,密碼為123123:

master:~/projs/as7/710/bin$ ./add-user.sh

Enter details of new user to add.

Realm (ManagementRealm) :

Username : admin

Password :

Re-enter Password :

About to add user 'admin' for realm'ManagementRealm'

Is this correct yes/no? yes

Added user 'admin' to file'master/as7/710/standalone/configuration/mgmt-users.properties'

Added user 'admin' to file'master/as7/710/domain/configuration/mgmt-users.properties'

可以看到系統(tǒng)為我們分別在domain和standalone創(chuàng)建了mgmt-users.properties庵芭,我們是用域模式運(yùn)行,因此查看domain/configuration/mgmt-users.properties這個(gè)文件的最后一行:

admin=95333971266d87fbfa7d9963dd5e89d6

可以看到相關(guān)賬號(hào)密碼已經(jīng)被創(chuàng)建雀监。此時(shí)查看host.xml:

...

...

可以發(fā)現(xiàn)host.xml已經(jīng)把安全配置應(yīng)用起來了喳挑,使用ManagementRealm這個(gè)安全域進(jìn)行認(rèn)證。

同樣地,我們需要在slave主機(jī)上進(jìn)行一模一樣的工作伊诵。

接下來,我們需要做一下slave對(duì)master的認(rèn)證連接工作回官。slave要想和master建立域控關(guān)系曹宴,需要知道m(xù)aster的管理端賬號(hào)密碼。在域控這一塊歉提,AS7對(duì)認(rèn)證有要求:需要在域控制器上以過來連接的主機(jī)host名為用戶名添加賬號(hào)笛坦。

我們?cè)趕lave的host.xml文件中指定了slave的host名為slave:

因此,master做為域控制器苔巨,需要在上面添加名為slave的管理員賬號(hào)版扩,密碼仍為123123:

master:~/projs/as7/710/bin$ ./add-user.sh

Enter details of new user to add.

Realm (ManagementRealm) :

Username : slave

Password :

Re-enter Password :

About to add user 'admin' for realm'ManagementRealm'

Is this correct yes/no? yes

Added user 'slave' to file'master/as7/710/standalone/configuration/mgmt-users.properties'

Added user 'slave' to file'master/as7/710/domain/configuration/mgmt-users.properties'

這時(shí)再查看mgmt-users.properties,可以看到多了slave賬號(hào):

admin=95333971266d87fbfa7d9963dd5e89d6

slave=f469d84edde53032bdac0a42bdedd810

接下來侄泽,我們要在slave主機(jī)的的host.xml做下認(rèn)證配置礁芦,使用這個(gè)賬號(hào)與master進(jìn)行認(rèn)證通信:



上面的配置中有這些值得注意:

我們?cè)谡J(rèn)證域ManagementRealm中配置了server-identities,這個(gè)認(rèn)證域用在與域控制器master的連接方面悼尾。其中secretvalue是domain上對(duì)應(yīng)slave主機(jī)名的那個(gè)賬號(hào)的密碼柿扣,用base64加密。我們?cè)趍aster上面配置的slave賬號(hào)的密碼為123123闺魏,MTIzMTIz=則是123123的base64加密后的文字未状。這個(gè)配置用在連接domain-controller時(shí)進(jìn)行認(rèn)證:

有關(guān)更多的AS7的安全配置的信息,可查看官方文檔:

https://docs.jboss.org/author/display/AS7/Securing+the+Management+Interfaces

關(guān)于host.xml的詳細(xì)配置方法析桥,也可參考as7目錄下自帶的xsd文檔:

docs/schema/jboss-as-config_1_1.xsd

部署

配置完成后司草,接下來便到了實(shí)際部署的階段,我們將master和slave上面的AS7分別用domain.sh啟動(dòng)起來泡仗。

[Server:server-one] 21:17:14,491 INFO[org.jboss.as] (Controller Boot Thread) JBossAS 7.0.0.CR1 "White Rabbit" started in 6029ms - Started 109 of 163services (54 services are passive or on-demand)

[Host Controller] 21:18:02,635 INFO[org.jboss.domain] (pool-3-thread-1)Registered remote slave host slave

啟動(dòng)成功的話叠赦,應(yīng)該可以在master上面看到上面的日志,slave被成功的注冊(cè)進(jìn)來染簇。

完成啟動(dòng)后隧甚,我們需要將待使用的virtual-host啟動(dòng)起來,當(dāng)AS7以domain的方式啟動(dòng)時(shí)峦树,默認(rèn)是不啟動(dòng)任何virtual server辣辫,我們可以在domain.xml中配置默認(rèn)加載virtual-host,也可以在服務(wù)器運(yùn)行起來后魁巩,使用管理端命令動(dòng)態(tài)的加載急灭,在這里我準(zhǔn)備使用后一種方式,從而講解AS7管理端的使用方法谷遂。

在AS7的bin目錄下面有一個(gè)jboss-admin.sh葬馋, 這是AS7提供的全新的管理工具,我們使用這個(gè)工具,連接至master:

./jboss-admin.sh

You are disconnected at the moment. Type'connect' to connect to the server or 'help' for the list of supportedcommands.

[disconnected /] connect 192.168.191.134

Connected to domain controller at192.168.191.134:9999

可以看到畴嘶,我們已經(jīng)連接到了master的9999管理端口蛋逾。接下來可以查看”default”這個(gè)profile當(dāng)中的web模塊的運(yùn)行情況:

[domain@192.168.191.134:9999 /]/profile=default/subsystem=web:read-children-names(child-type=connector)

{

"outcome" => "success",

"result" => ["http"]

}

可見http服務(wù)器已經(jīng)啟動(dòng),由于我們的”main-server-group”使用的是default這個(gè)profile窗悯,因此区匣,服務(wù)器組中的兩臺(tái)host的web模塊接受profile的統(tǒng)一配置,都是已啟動(dòng)的蒋院。繼續(xù)看一下web模塊中的細(xì)節(jié):

[domain@192.168.191.134:9999 /]/profile=default/subsystem=web/connector=http:read-resource(recursive=true)

{

"outcome" => "success",

"result" => {

"protocol" =>"HTTP/1.1",

"scheme" => "http",

"socket-binding" => "http",

"ssl" => undefined,

"virtual-server" => undefined

}

}

注意到virtual-server的狀態(tài)是未定義(undefined)亏钩,我們要想將一個(gè)web項(xiàng)目部署進(jìn)服務(wù)器組中的各個(gè)host,就必須加載一個(gè)待部署的virtual-server欺旧,因此我們使用命令來添加:

[domain@192.168.191.134:9999 /]/profile=default/subsystem=web/virtual-server=other.com:add

{

"outcome" => "success",

"result" => {"server-groups" =>[("main-server-group" => {

"master" => {

"host" => "master",

"response" => {"outcome" =>"success"}

},

"slave" => {

"host" => "slave",

"response" => {

"outcome" => "success",

"result" => undefined

}

}

})]}

}

可以看到姑丑,我們之前在domain.xml中配置的“other.com”這個(gè)virtual host被成功添加了。

接下來是部署WEB應(yīng)用的環(huán)節(jié)辞友,我們首先用maven制作一個(gè)最簡(jiǎn)單的web項(xiàng)目栅哀,僅包含一個(gè)歡迎頁面:

mvn archetype:generate-DgroupId=com.mycompany.app -DartifactId=my-webapp-DarchetypeArtifactId=maven-archetype-webapp

生成的項(xiàng)目如下:

|-- pom.xml

`-- src

`--main

|-- resources

`-- webapp

|-- WEB-INF

|`-- web.xml

`-- index.jsp

使用如下命令將項(xiàng)目打成WAR包:

mvn package

得到war:

target

`-- my-webapp.war

接下來是部署這個(gè)war包,對(duì)于本次實(shí)驗(yàn)來講踏枣,關(guān)鍵的部分在于能否通過domain提供的servergroup管理功能昌屉,一次將一個(gè)項(xiàng)目部署進(jìn)server group中的多臺(tái)服務(wù)器。我們接下來就驗(yàn)證這點(diǎn)茵瀑,順便看下AS7提供的WEB管理功能间驮,打開WEB瀏覽器,訪問master的HTTP端口的管理地址:

http://192.168.191.134:9990/console/App.html

可以看到马昨,管理頁識(shí)別出AS7正運(yùn)行在domain模式之下竞帽,并且目前共有兩臺(tái)主機(jī)運(yùn)行(左上角的列表分別列有master及slave)。我們要關(guān)注的是server-group:點(diǎn)擊右上角的”Server Groups”鸿捧,進(jìn)入服務(wù)器組的管理頁面屹篓,然后點(diǎn)擊左邊的”ManageDeployments”頁面,進(jìn)入部署功能頁面:

可以看到匙奴,目前還沒有任何資源被加至服務(wù)器組堆巧,此時(shí)點(diǎn)擊右邊的”Add Content”功能,將my-webpp.war添加進(jìn)Content Repository(域控制器用于保存待部署資源的目錄)泼菌。

然后點(diǎn)擊”Add To Group”將my-webapp.war添加至“main-server-group”谍肤,并將其enable。

此時(shí)我們預(yù)期的結(jié)果應(yīng)該是my-webapp.war被同時(shí)部署至master及slave了哗伯,分別試著訪問master及slave的http資源荒揣,看看是否都部署上my-webapp這個(gè)應(yīng)用了:

結(jié)果如我們所預(yù)期的那樣,兩臺(tái)服務(wù)器都可以訪問到這個(gè)部署的資源焊刹。通過對(duì)一個(gè)點(diǎn)(Domain Controller)的配置與部署系任,我們實(shí)現(xiàn)了多AS7服務(wù)器的集中管理恳蹲。

小結(jié)

通過域這個(gè)概念,實(shí)現(xiàn)了多服務(wù)器統(tǒng)一管理俩滥,統(tǒng)一配置嘉蕾,資源統(tǒng)一部署的目標(biāo)。通過集中管理霜旧,我們可以在此基礎(chǔ)上再進(jìn)行群集的劃分與部署荆针,實(shí)現(xiàn)群集內(nèi)多臺(tái)服務(wù)器的單點(diǎn)配置與管理“湓悖可以說AS7的Domain概念的引入,與群集的概念組合在一起喉悴,通過一橫一從兩條軸棱貌,形成了完整的坐標(biāo)系。

AS7群集配置箕肃、測(cè)試

AS7集群配置說明

AS7的群集功能婚脱,從大的框架上來講承襲沿用以往版本的設(shè)計(jì),核心仍是基于JGroup勺像。

AS7的群集功能設(shè)計(jì)有了多方面改進(jìn):首先是簡(jiǎn)化了配置文件障贸,實(shí)現(xiàn)單點(diǎn)式配置;此外吟宦,AS7中引入了域的概念篮洁,通過域?qū)θ杭瘍?nèi)各主機(jī)實(shí)現(xiàn)了統(tǒng)一配置部署。

AS7開始殃姓,群集配置被大大簡(jiǎn)化袁波,并且當(dāng)AS7運(yùn)行在域控模式下時(shí),群集默認(rèn)是自發(fā)現(xiàn)蜗侈,自啟動(dòng)的篷牌。雖然配置變得更為傻瓜,但我們?nèi)孕枇私庖恍┘夹g(shù)細(xì)節(jié)踏幻,從而可以理解AS7為我們提供的默認(rèn)群集配置枷颊,并根據(jù)自己的需要進(jìn)行配置調(diào)整。下面是詳細(xì)講解:

AS7的群集配置主要集中在域控制器的配置文件domain.xml里该面。在domain.xml中夭苗,默認(rèn)有兩個(gè)profile,一個(gè)是default吆倦,一個(gè)是ha:

...

...

其中听诸,ha這個(gè)profile里面配置了群集的所需組件(ha的含義代表High Availability,高可用)蚕泽。這其中主要包括JGroup晌梨,Infinispan和modcluster:

...

...

...

這三個(gè)組件都是構(gòu)成AS7群集的要素:

* JGroup用與群集中多AS服務(wù)器之間的通信和連接桥嗤。有關(guān)JGroup的詳細(xì)配置,需要對(duì)JGroup本身有一個(gè)了解仔蝌,本文不詳細(xì)展開這一塊泛领。

* Infinispan從AS7開始,開始代替JBossCache承擔(dān)緩存的功能

* modcluster負(fù)責(zé)Apache HTTPD與AS群集的連接工作敛惊。通過HTTPD作為前端渊鞋,為用戶提供一個(gè)統(tǒng)一的群集訪問點(diǎn),后面負(fù)責(zé)將負(fù)載分擔(dān)至群集內(nèi)各節(jié)點(diǎn)瞧挤。

有關(guān)Infinispan可以多說幾句:這個(gè)項(xiàng)目的引入是AS7的亮點(diǎn)之一锡宋,有興趣可以去它的項(xiàng)目網(wǎng)站上進(jìn)行深入的了解:

http://www.jboss.org/infinispan

AS7利用Infinispan為多個(gè)模塊提供緩存服務(wù),包括:

*為群集提供緩存

*為Hibernate提供二級(jí)緩存

*為Stateful Session Bean提供群集復(fù)制緩存

*為web項(xiàng)目的session群集復(fù)制提供緩存

這一點(diǎn)可以從剛剛提到的domain.xml中的ha配置中看到特恬,我們稍微展開一下Infinispan子系統(tǒng)的配置:

...

...

...

...

可以看到执俩,Infinispan為剛才說明的4個(gè)部分提供緩存。這塊已經(jīng)完全替代了AS6及原有JBoss AS版本中的JBoss Cache癌刽。

接下來我們要看domain.xml中另一塊與群集相關(guān)的配置:

...

...

在協(xié)議層配置方面役首,我們發(fā)現(xiàn)有domain.xml為我們配置好了一個(gè)ha-sockets的端口綁定方案。最后显拜,在server-group中衡奥,我們可以在domain.xml中發(fā)現(xiàn)一個(gè)配置好的,支持群集的服務(wù)器組:

可以看到远荠,這個(gè)other-server-group使用了ha這個(gè)配置方案矮固,并在協(xié)議層綁定至ha-sockets。

因此通過以上分析矮台,如果我們想使用AS7提供的群集功能乏屯,在默認(rèn)情況下,將項(xiàng)目部署至other-server-group這個(gè)服務(wù)器組即可瘦赫。接下來是實(shí)際操作的過程:

配置好了域模式來啟動(dòng)AS7辰晕。這里要說明一下,AS7的群集功能并不依賴于域管理功能确虱,但是在AS7下含友,域管理功能和群集結(jié)合起來用是推薦的使用方式,通過域管理可以對(duì)群集內(nèi)各AS服務(wù)器節(jié)點(diǎn)進(jìn)行統(tǒng)一管理校辩,非常方便窘问。

按照《AS7配置說明》一文中的方法將master和slave兩臺(tái)主機(jī)運(yùn)行起來。但有一點(diǎn)需要注意宜咒,我們要使用domain.xml中不同的服務(wù)器組來部署群集應(yīng)用:

注意到在server-groups之中惠赫,有一個(gè)名為“other-server-group”的服務(wù)器組,默認(rèn)使用ha配置方案故黑,并且綁定至ha-sockets儿咱。部署在這個(gè)服務(wù)器組中的項(xiàng)目庭砍,將可以組建群集。

此外還有一點(diǎn)配置需注意混埠,在master和slave的host.xml中怠缸,要為使用other-server-group的主機(jī)使用相同的端口offset。下面分別是master和slave中host.xml的相關(guān)配置钳宪。首先是master的配置:

...


the default socket-groupdeclared in the server-group -->

然后是slave中的host.xml配置:


the default socket-group declaredin the server-group -->

這里的重點(diǎn)是master和slave的端口port-offset都設(shè)定為250揭北。因?yàn)槲覀円眠@兩臺(tái)主機(jī)組建一個(gè)群集,如果兩個(gè)主機(jī)服務(wù)于不同的端口吏颖,那么將會(huì)在后續(xù)兩臺(tái)主機(jī)分擔(dān)請(qǐng)求時(shí)造成不必要的麻煩搔体。此外,在本文中后續(xù)我們將使用mod_cluster來將用戶請(qǐng)求分派至JBoss AS群集內(nèi)各節(jié)點(diǎn)半醉,而mod_cluster需要群集內(nèi)各JBoss AS節(jié)點(diǎn)服務(wù)于相同端口嫉柴,才能保證正確地將請(qǐng)求分派。

下面再多說幾句關(guān)于host.xml中的server的port-offset的問題奉呛。為什么我們要設(shè)置port-offset呢?因此AS7支持同時(shí)運(yùn)行多服務(wù)器夯尽,并且不同的服務(wù)器可以運(yùn)行于不同的服務(wù)器組瞧壮,這有點(diǎn)類似于Apache HTTPD中虛擬主機(jī)的概念,運(yùn)行一個(gè)服務(wù)器匙握,可以服務(wù)于多個(gè)域名咆槽,跑很多項(xiàng)目。

因此圈纺,如果AS同時(shí)跑著多個(gè)服務(wù)器秦忿,為避免端口沖突,就需要使用port-offset將不同的服務(wù)器置于不同的端口之下蛾娶。比如:

類似上面這樣的配置灯谣,有三個(gè)服務(wù)器,第一個(gè)服務(wù)器綁定于默認(rèn)設(shè)置的端口上蛔琅,第二個(gè)服務(wù)器offset為150胎许,第三個(gè)為250。那么罗售,如果默認(rèn)的服務(wù)端口號(hào)為8080辜窑,那么第二個(gè)服務(wù)器就是8080+150 = 8230,第三個(gè)則服務(wù)于8080+250= 8330端口寨躁,其它各服務(wù)端口依此類推穆碎。

通過使用offset配置,大大減少了重復(fù)的配置职恳。AS7將所有端口的設(shè)置置于domain.xml的配置之中:

...

通過在domain.xml的socket-binding-groups中設(shè)置好服務(wù)的端口號(hào)所禀,再在host.xml中配合port-offset的設(shè)置方面,就實(shí)現(xiàn)了多服務(wù)器的集中管理,簡(jiǎn)化了配置工作北秽。

和上文中介紹的一樣葡幸,我們還是用兩臺(tái)主機(jī)做實(shí)驗(yàn),域控制器為master贺氓,此外還有一臺(tái)域內(nèi)主機(jī)slave蔚叨。

然后我們創(chuàng)建一個(gè)測(cè)試用的項(xiàng)目,這個(gè)項(xiàng)目應(yīng)該包含Session的群集復(fù)制辙培。在web.xml中添加這樣一行就可以開啟session的群集復(fù)制了:

為了方便起見蔑水,我創(chuàng)建了一個(gè)demo項(xiàng)目在這里:

https://github.com/liweinan/cluster-demo

可以把代碼簽出使用maven進(jìn)行編譯打包,然后通過域控制器部署至AS7扬蕊。如果你在master及slave中的host.xml都將server-three設(shè)置成了啟動(dòng)時(shí)自動(dòng)加載:

...

注意到auto-start=true搀别,那么兩臺(tái)主機(jī)啟動(dòng)時(shí),你可以看到群集組建的日志(因此server-three的服務(wù)器組為other-server-group尾抑,而如前所述歇父,other-server-group使用了群集配置方案):

master上面的日志:

[Server:server-three] 14:27:28,581 INFO[stdout] (MSC service thread 1-2)

[Server:server-three] 14:27:28,582 INFO[stdout] (MSC service thread 1-2)-------------------------------------------------------------------

[Server:server-three] 14:27:28,582 INFO[stdout] (MSC service thread 1-2) GMS:address=server-three/web, cluster=web, physical address=192.168.191.134:55450

[Server:server-three] 14:27:28,582 INFO[stdout] (MSC service thread 1-2)-------------------------------------------------------------------

slave上面的日志:

[Server:server-three-slave] 14:28:02,779INFO[stdout] (MSC service thread 1-11)

[Server:server-three-slave] 14:28:02,779INFO[stdout] (MSC service thread 1-11)-------------------------------------------------------------------

[Server:server-three-slave] 14:28:02,779INFO[stdout] (MSC service thread 1-11)GMS: address=server-three-slave/web, cluster=web, physical address=192.168.191.2:55450

[Server:server-three-slave] 14:28:02,779INFO[stdout] (MSC service thread 1-11)-------------------------------------------------------------------

[Server:server-three-slave] 14:28:02,925INFO[org.jboss.as.clustering.CoreGroupCommunicationService.web] (MSC servicethread 1-9) JBAS010207: Number of cluster members: 2

以及我們可以看到群集復(fù)制及緩存也都加載了起來:

[Server:server-three-slave] 14:28:03,419INFO[org.jboss.as.clustering] (MSCservice thread 1-9) JBAS010301: Started repl cache from web container

[Server:server-three-slave] 14:28:03,419INFO[org.jboss.as.clustering] (MSCservice thread 1-8) JBAS010301: Started registry cache from web container

當(dāng)然,如果將host.xml中的主機(jī)配置改為auto-start=false也沒有關(guān)系再愈,只不過AS7在啟動(dòng)時(shí)不會(huì)加載這些群集模塊榜苫,只有項(xiàng)目被部署至server-three時(shí)才會(huì)按需加載翎冲,從而提高AS7的第一次啟動(dòng)時(shí)間垂睬。

啟動(dòng)完成之后是部署cluster-demo應(yīng)用抗悍,訪問域控制器的web控制端進(jìn)行部署缴渊,需要注意的是要部署到server-three:

如果沒有什么問題的話衔沼,通過域控制器卡儒,這個(gè)項(xiàng)目就被同時(shí)部署到master及slave上面了。

我們可以試著分別訪問群集內(nèi)兩個(gè)節(jié)點(diǎn)主機(jī)俐巴,注意到我們?cè)趆ost.xml配置server-three端口的offset為250骨望,因此兩個(gè)節(jié)點(diǎn)服務(wù)于8080+250=8330端口:

可以看到,群集內(nèi)兩個(gè)節(jié)點(diǎn)都跑起來了欣舵。我們接下來要使用這個(gè)群集擎鸠,讓它們承擔(dān)負(fù)載平衡及并提供HA高可用。在這一點(diǎn)上缘圈,有多種方案可以選擇劣光,比如基于硬件的群集控制器袜蚕,基于協(xié)議層的LVS,或是nginx來分發(fā)請(qǐng)求至群集內(nèi)的兩個(gè)節(jié)點(diǎn)绢涡。

但是AS7默認(rèn)支持mod_cluster的方式是最方便的牲剃,mod_cluster也針對(duì)AS7做了很多優(yōu)化工作,支持開箱即用雄可,不需要很復(fù)雜的配置凿傅,因此本文下面將基于mod_cluster來講解群集的使用方法。

mod_cluster負(fù)載平衡配置

mod_cluster使用Apache HTTPD做為群集控制服務(wù)器数苫,用戶訪問httpd提供的服務(wù)端口聪舒,然后由mod_cluster負(fù)責(zé)把請(qǐng)求轉(zhuǎn)給后端的AS7內(nèi)群集各節(jié)點(diǎn)。

負(fù)載均衡原理如下圖:

mod_cluster的負(fù)載平衡計(jì)算策略是十分智能的虐急,它通過監(jiān)控群集內(nèi)各服務(wù)器的性能使用情況箱残,把請(qǐng)求按需進(jìn)行分配。有關(guān)mod_cluster的詳細(xì)配置策略止吁,可參考:

http://docs.jboss.org/mod_cluster/1.1.0/html_single/#LoadMetric

這里簡(jiǎn)單介紹下安裝方法:

安裝Aapche httpd

分配用戶組:

# useradd-d /apache -u 701 -g 700 webadmin--把/apache目錄分配給jboss

# passwd webadmin--激活webadmin用戶

執(zhí)行下列命令將/apache分配給webadmin用戶被辑。

# cd /

# chown -R webadmin:jboss/apache

# chmod 755/apache

先卸載自帶的apache,再安裝新的apache敬惦。

1)我安裝的是apache2.2.22敷待,那么安裝前要卸載系統(tǒng)自帶的apache2.0。避免沖突仁热,rpm

–qa|grep httpd,系統(tǒng)會(huì)列出所有的httpd的包勾哩,我的是有個(gè)四個(gè)抗蠢,下面需要一個(gè)一個(gè)卸載,rpm –e包的名稱思劳,將他們卸載完畢迅矛,在這里不用輸入包的版本號(hào),只是輸入名稱就可以卸載潜叛。卸載干凈后就可以安裝高版本的apache了秽褒。

注:有的包之間有連帶關(guān)系,需要注意卸載的先后順序威兜。

注:有的包卸載會(huì)報(bào)依賴關(guān)系的通知销斟,輸入:rpm -e包的名稱--nodeps

2)仿照jboss用戶建立,建立apache的組合用戶椒舵,用root用戶建立apache文件夾并分給apache用戶權(quán)限蚂踊,但是apache用戶不能起”apache”這個(gè)名字,這個(gè)名字系統(tǒng)有了笔宿,換個(gè)名字起,如:webadmin犁钟。

3)下載Apache2222.tar.gz棱诱。并上傳至系統(tǒng),放在/home的文件夾下面涝动。

4)安裝:進(jìn)入安裝文件所在目錄迈勋,解壓縮:

tar –zxvf Apache2222.tar.gz

完后會(huì)看到httpd的文件夾進(jìn)入,配置:

./configure? --prefix=/apache/ \

--enable-module=so --enable-module=setenvif? --enable-module=rewrite \

--enable-rewrite=shared? --enable-proxy=shared --with-mpm=prefork \

--enable-so? --enable-auth-anon --enable-file-cache=shared \

--enable-disk-cache=shared? --enable-mem-cache=shared

接來下醋粟,編譯安裝

make clean

make

make install

從這里下載mod_cluster:

http://www.jboss.org/mod_cluster/downloads

我下載的是:

mod_cluster-1.1.3.Final-linux2-x64-so.tar.gz

然后將相關(guān)的包解壓到httpd的modules目錄:

/etc/httpd/modules$ tar zxvfmod_cluster-1.1.3.Final-linux2-x64-so.tar.gz

然后靡菇,編輯httpd.conf:

% vi /etc/httpd/conf/httpd.conf

首先要讓httpd偵聽到公共端口上,而不是默認(rèn)的localhost:

Listen 192.168.191.134:80

我們?cè)谶@個(gè)demo中昔穴,mod_cluster和master域控制器在一臺(tái)機(jī)器上镰官,所以IP地址和master是一樣。但是mod_cluster并不要求AS的域控制器與其在一臺(tái)機(jī)器上吗货,只要它們?cè)谝粋€(gè)子網(wǎng)即可通過IP Multicast來自動(dòng)發(fā)現(xiàn)泳唠。此外,mod_cluster還支持廣域網(wǎng)組建群集宙搬,但我懷疑這種方式的實(shí)用性笨腥,并且也不是本文的重點(diǎn),所以并不詳細(xì)展開協(xié)議層方面的細(xì)節(jié)勇垛。只需要理解一點(diǎn)就可以了:

*將你的mod_cluster+httpd服務(wù)器和你的與你的AS服務(wù)器置于一個(gè)子網(wǎng)脖母。

然后是加載相關(guān)模塊:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_modulemodules/mod_proxy_ajp.so

LoadModule slotmem_modulemodules/mod_slotmem.so

LoadModule manager_module modules/mod_manager.so

LoadModule proxy_cluster_modulemodules/mod_proxy_cluster.so

LoadModule advertise_modulemodules/mod_advertise.so

注意要把mod_proxy_balancer給disable掉,這個(gè)是和mod_proxy_cluster沖突的:

#LoadModule proxy_balancer_modulemodules/mod_proxy_balancer.so

最后是mod_proxy的相關(guān)配置:

Listen 192.168.191.134:6666

#Listen 127.0.0.1:8330

Order deny,allow

Deny from all

Allow from 192.168.191.

KeepAliveTimeout 60

MaxKeepAliveRequests 0

ManagerBalancerName other-server-group

AdvertiseFrequency 5

上面的重點(diǎn)在于這樣幾處:

Allow from 192.168.191.

我們的群集內(nèi)各節(jié)點(diǎn)都處于192.168.191網(wǎng)段內(nèi)闲孤,因此配置mod_cluster尋找這個(gè)網(wǎng)段內(nèi)的所有節(jié)點(diǎn)谆级。接下來是:

ManagerBalancerName other-server-group

AdvertiseFrequency 5

給群集起個(gè)名字,我們?yōu)榉奖阏f明讼积,使用AS7中群集所在服務(wù)器組的名字:other-server-group肥照。這個(gè)并沒有什么強(qiáng)制要求。AdvertiseFrequency是mod_cluster發(fā)現(xiàn)各節(jié)點(diǎn)的查詢間隔勤众。這樣舆绎,有新的節(jié)點(diǎn)加入群集,或是從群集中去掉们颜,mod_cluster都是自動(dòng)配置吕朵。

最后是啟動(dòng)httpd:

service httpd restart

查看httpd的日志,看看是否正常啟動(dòng)了:

% tail -f /etc/httpd/logs/error_log

[Fri Jan 20 16:48:44 2012] [notice] Advertiseinitialized for process 6189

[Fri Jan 20 16:48:44 2012] [notice]Apache/2.2.15 (Unix) DAV/2 mod_cluster/1.1.x configured -- resuming normaloperations

如果有上述日志說明正常啟動(dòng)了窥突。如果有問題努溃,任何時(shí)候日志都是你排錯(cuò)的好朋友。接下來我們來啟動(dòng)master和slave兩個(gè)AS服務(wù)器阻问,啟動(dòng)后茅坛,如果沒什么問題,可以發(fā)現(xiàn)兩臺(tái)AS服務(wù)器都已經(jīng)被mod_cluster發(fā)現(xiàn),并納入了mod_cluster的群集控制之下:

[Server:server-three-slave] 16:51:00,798INFO[org.infinispan.remoting.transport.jgroups.JGroupsTransport](Incoming-7,null) ISPN000094: Received new cluster view:[server-three-slave/web|7] [server-three-slave/web, server-three/web]

[Server:server-three] 16:51:07,676 INFO[org.jboss.modcluster.ModClusterService](ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Engine [jboss.web]will use jvmRoute: a019cde8-113d-362c-992e-ea4abc1bf389

接下來我們?cè)囍L問httpd的偵聽地址贡蓖,看看請(qǐng)求是否被mod_cluster轉(zhuǎn)發(fā)至群集節(jié)點(diǎn)曹鸠。

測(cè)試mod_cluster負(fù)載平衡

接下來我們?cè)囋嚾杭母呖捎茫?我們這里要用到cluster-demo項(xiàng)目。下面是方案:

*在master上面訪問cluster-demo項(xiàng)目的put.jsp斥铺,設(shè)置一個(gè)session彻桃。

*斷掉master服務(wù)。

*訪問群集晾蜘,訪問get.jsp

*預(yù)期結(jié)果:用戶的請(qǐng)求被轉(zhuǎn)到slave邻眷,并且session的數(shù)據(jù)沒有丟失。

接下來是實(shí)際操作:

首先訪問master的put.jsp:

然后我們將master的AS7服務(wù)器停掉剔交,這時(shí)候slave上面的AS7開始報(bào)錯(cuò):

[Host Controller] 18:43:02,320 WARN[org.jboss.as.host.controller] (Thread-27)JBAS010900: Could not connect to remote domain controller 192.168.191.134:9999

報(bào)告連接不到域控制器肆饶。這個(gè)沒有關(guān)系,我們此時(shí)還是訪問群集節(jié)點(diǎn):

會(huì)發(fā)現(xiàn)服務(wù)仍然可用岖常,并且session數(shù)據(jù)沒有丟失驯镊。但查看slave的日志,發(fā)現(xiàn)請(qǐng)求實(shí)際由slave承擔(dān)了竭鞍。整個(gè)實(shí)驗(yàn)實(shí)現(xiàn)了我們的預(yù)期板惑。

此時(shí),將master重新啟動(dòng)偎快,發(fā)現(xiàn)master發(fā)現(xiàn)了slave冯乘,并重新接管域管理的工作。mod_cluster也發(fā)現(xiàn)了master并將其加入了群集節(jié)點(diǎn)晒夹,一切都是自動(dòng)化的裆馒。

數(shù)據(jù)源(Data sources)

Datasources在通過子系統(tǒng)進(jìn)行配置。聲明一個(gè)新的數(shù)據(jù)源丐怯,需要兩個(gè)步驟:提供一個(gè)JDBC驅(qū)動(dòng)喷好,然后定義一個(gè)使用這個(gè)JDBC驅(qū)動(dòng)的數(shù)據(jù)源。

JDBC驅(qū)動(dòng)安裝

在應(yīng)用服務(wù)器中安裝JDBC驅(qū)動(dòng)推薦使用一個(gè)常規(guī)的jar進(jìn)行部署响逢。因?yàn)楫?dāng)在域模式下運(yùn)行應(yīng)用服務(wù)器時(shí),部署的內(nèi)容會(huì)自動(dòng)傳送到要部署的所有服務(wù)器上棕孙,因此使用jar文件將利用這一特性而不需要關(guān)心額外的事情舔亭。

任何符合JDBC4的啟動(dòng)將會(huì)被自動(dòng)識(shí)別并且按照名字和版本安裝到系統(tǒng)中。JDBC jar使用Java server provider機(jī)制進(jìn)行識(shí)別蟀俊。Jar文件中需要包含一個(gè)文件名是META-INF/services/java.sql.Driver的文本文件,這個(gè)文件中包含在這個(gè)jar里的驅(qū)動(dòng)類的名稱钦铺。如果你的JDBC驅(qū)動(dòng)jar不符合JDBC規(guī)范,我們通過其他方式也可以部署這樣的驅(qū)動(dòng)肢预。

修改Jar文件

最直接的方式是簡(jiǎn)單的修改Jar文件添加缺失的文件矛洞。你可以通過一下命令添加:

The most straightforward solution is to simply modify the JAR and add themissing file. You can do

1.改變路徑到或者創(chuàng)建一個(gè)空的臨時(shí)文件夾.

2.創(chuàng)建一個(gè)META-INF子目錄

3.創(chuàng)建一個(gè)META-INF/services子目錄

4.創(chuàng)建一個(gè)只包含一行內(nèi)容:JDBC驅(qū)動(dòng)類的全名的文件META-INF/services/java.sql.Driver.

5.使用jar命令來跟新這個(gè)jar文件:

jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver

如何部署

JDBC4驅(qū)動(dòng)

jar文件,請(qǐng)參考”應(yīng)用部署“章節(jié)。

數(shù)據(jù)源定義(DatasourceDefinitions)

數(shù)據(jù)源在datasources子系統(tǒng)里定義:

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

h2

10

20

true

sa

sa

h2

jdbc:h2:mem:test

10

20

true

sa

sa

org.h2.jdbcx.JdbcDataSource

(參見standalone/configuration/standalone.xml)

如以上示例所示沼本,數(shù)據(jù)源通過邏輯名來引用JDBC驅(qū)動(dòng).通過命令行(CLI)可以很方便的查詢同樣的信息:

[standalone@localhost:9999 /] /subsystem=datasources:read-resource(recursive=true)

{

"outcome" => "success",

"result" => {

"data-source" => {"java:/H2DS" => {

"connection-url" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",

"jndi-name" => "java:/H2DS",

"driver-name" => "h2",

"pool-name" => "H2DS",

"use-java-context" => true,

"enabled" => true,

"jta" => true,

"pool-prefill" => true,

"pool-use-strict-min" => false,

"user-name" => "sa",

"password" => "sa",

"flush-strategy" => "FailingConnectionOnly",

"background-validation" => false,

"use-fast-fail" => false,

"validate-on-match" => false,

"use-ccm" => true

}},

"xa-data-source" => undefined,

"jdbc-driver" => {"h2" => {

"driver-name" => "h2",

"driver-module-name" => "com.h2database.h2",

"driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource"

}}

}

}

[standalone@localhost:9999 /] /subsystem=datasources:installed-drivers-list

{

"outcome" => "success",

"result" => [{

"driver-name" => "h2",

"deployment-name" => undefined,

"driver-module-name" => "com.h2database.h2",

"module-slot" => "main",

"driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource",

"driver-class-name" => "org.h2.Driver",

"driver-major-version" => 1,

"driver-minor-version" => 2,

"jdbc-compliant" => true

}]

}

使用web控制臺(tái)和命令行可以極大的簡(jiǎn)化JDBC驅(qū)動(dòng)的部署和數(shù)據(jù)源的創(chuàng)建噩峦。

命令行方式提供了一些列的命令來創(chuàng)建和更改數(shù)據(jù)源:

[standalone@localhost:9999 /] help

Supported commands:

[...]

data-source- allows to add new, modify and remove existing data sources

xa-data-source- allows add new, modify and remove existing XA data sources

特定命令的詳細(xì)描述請(qǐng)使用”

-b”參數(shù)查詢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抽兆,一起剝皮案震驚了整個(gè)濱河市识补,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辫红,老刑警劉巖凭涂,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異贴妻,居然都是意外死亡切油,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門名惩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澎胡,“玉大人,你說我怎么就攤上這事绢片÷蒜桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵底循,是天一觀的道長(zhǎng)巢株。 經(jīng)常有香客問我,道長(zhǎng)熙涤,這世上最難降的妖魔是什么阁苞? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮祠挫,結(jié)果婚禮上那槽,老公的妹妹穿的比我還像新娘。我一直安慰自己等舔,他們只是感情好骚灸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慌植,像睡著了一般甚牲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝶柿,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天丈钙,我揣著相機(jī)與錄音,去河邊找鬼交汤。 笑死雏赦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播星岗,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼填大,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了伍茄?” 一聲冷哼從身側(cè)響起栋盹,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敷矫,沒想到半個(gè)月后例获,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曹仗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年榨汤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怎茫。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡收壕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轨蛤,到底是詐尸還是另有隱情蜜宪,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布祥山,位于F島的核電站圃验,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缝呕。R本人自食惡果不足惜澳窑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望供常。 院中可真熱鬧摊聋,春花似錦、人聲如沸栈暇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽源祈。三九已至煎源,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間新博,已是汗流浹背薪夕。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工脚草, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赫悄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像埂淮,于是被迫代替她去往敵國(guó)和親姑隅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容