MongoDB 3.4 Sharding 觀念、安裝、與配置

Sharding 為 MongoDB 所擁有的一種資料分散處理架構,簡單的說就是將資料分片 (Shard) 儲存到不同的機器中,最常應用在大數據的案例上。在海量資料的儲存情境上,垂直擴充架構是無法滿足的,必須透過水平擴充來實現。

MongoDB Sharded Cluster 基本的架構示意如下:

在這樣的機制下,儲存進 Collection 的資料會被盡可能平均地分散到每一個 Shard 上,每一個 Shard 都是由獨立的 mongod 實體或者 Replica Set 所構成 (想了解 Replica Set 可以看看之前的文章)。上圖我們也可以看到,Sharding 機制本身是不負責備份的,在產品上線的環境中,強烈建議使用 Replica Set 來搭建 MongoDB Sharded Cluster。在這個架構中,假設我們有 1TB 的資料,可以透過 Sharding 機制將資料切分為四個 Shard,每一個 Shard 負責儲存 256G,應該很好理解。

MongoDB Sharded Cluster 運作機制

那麼 MongoDB Sharded Cluster 是如何運作的呢?我們先看看下面的架構圖:

當使用者或應用程式 (Driver) 要操作 MongoDB Sharded Cluster 時,是透過 mongos 來進行連接,mongos 扮演 Router 的角色,Router 通常由多個實體組成,可以將 Loading 分散處理,保持高可用性 (HA)。對於應用程式來說,並不需要瞭解 MongoDB Sharding 怎麼運作的,他們看到的只是一個資料庫,所以使用上基本不會有太大的差別。如下所示:

之前提到,雖然每一個 Shard 都是由一個 mongod 或 Replica Set 構成,但如果沒有透過 mongos (Router) 進行連線操作,而直接對 Shard 進行連線,那麼你看到 Collection 的資料就不會是完整的集合,而只是單一個 Shard 的資料。那麼 Cluster 是如何分配資料呢,這裡有一個很重要的角色,就是 Config Server。

Config Server

Config Server 是 MongoDB Sharding 架構中相當重要的一個角色,它存放了資料的 Metadata,包括透過 Shard Key 計算出來的索引,用來記錄每一個資料存放的 Shard 位置,好讓 Router 可以正確的 Query 資料,如果沒有這些索引,那麼每一個用來存放資料的 mongod 實體,就「純粹」只是獨立存放分散的資料,無法協同工作。Config Server 聽起來很重要對吧!?因此 Config Server 部署時必須要多台機器,在新版 3.2 之後也可以用 Replica Set 架設 Config Server。

為了將資料分散儲存,就必須找一個方法來管理 Index,我們必須將 Document 某一個欄位定義為 Shard Key,然後透過 range based partitioning 或 hash based partitioning 其中一中方式將資料分配到 chunks 中 (每一個 Chunks 預設的大小為 64MB),最後才將 Chunks 分散到不同的 Shard 上。接下來我們先看看兩種不同的 Partitioning 機制:

Range Based Sharding

這種方式就是將 Document Shard Key 欄位的值,以線性的方式進行分群,透過 Range 範圍進行切割,相近的值理所當然會被分到同一個 Chunk 中,Chunk 分配的情況會直接受到 Range 的影響(比如某一段 Range 出現頻率高,Chunk 資料就比較大)。用這種方法我們必須考慮 Shard Key 的範圍,如下所示:

Hash Based Sharding

這種方法顧名思義就是透過「雜湊函式」將我們指定的 Shard Key 欄位進行雜湊,這樣的方式資料比較容易分散到每個 Shard 中,如果資料量足夠豐富,佔用空間的分配也會比較平均。如下:

比較一下兩種方法,Range Based 實際在 Query 時,Router 可以很輕易地判斷資料的位置,然後正確地派送運算到所屬的 Shard 上。但如果要查詢的資料片段大小差異過高,且又分散在不同的 Shard 上,查詢必定會「等待」其他 Shard 處理的情況產生。來看看 Hash Based,Shard Key 透過 Hash 計算後,很容易分散在不同的 Chunk,資料分散性佳,擴充也比較容易。但是在 Query 時就必須要經過比較多的 Shard 計算,才能由 Router 返回最後的結果。兩種方法各有利弊,可以依照實際的應用情況選用。那如果想要自行實作資料分散的邏輯呢?MongoDB 當然也是支援的,就是透過 Tag 這個功能,但我沒有研究,所以就無從介紹了。有興趣可以看看官方 Tag Aware Sharding 相關介紹。

開始建置:

由於 Shard 本身沒有備援機制,因此 MongoDB 的 Shard 必須建置在 Replica Set 上,Replica Set 建置方式請參考「MongoDB Replica Set 高可用性架構搭建」這一篇文章。假設您已經建立好 Replica Set,那麼就可以繼續接著開始建置 Shard。

我們規劃原來做的mongsh1~mongsh3三台伺服器,都拿來做shard server與config server,另外mongsh1/mongsh2拿來當router。

建置 Config Server

一開始我們先建立 Config Server,在 MongoDB Sharding Cluster 架構中,Config Server 必須有三個實體以上,強烈建議部署在不同的機器上,因為 Metadata 實在太重要了。下面的範例其實是與 Replica Set 一起部署,實際上分開會比較好。慣例上我們會先透過 /etc/hosts 管理我們的主機資訊 (用 DNS 也是可以),假設要安裝 Config Server 的 Hostname 為 mong-cfg1 ~ mong-cfg3

vi /etc/hosts
10.21.1.45 mongsh1
10.21.1.46 mongsh2
10.21.1.44 mongsh3

10.21.1.45 mong-cfg1
10.21.1.46 mong-cfg2
10.21.1.44 mong-cfg3

10.21.1.45 mong-router1
10.21.1.46 mong-router2

接著建立 Config Server 要存放的 DB File Directory,命令如下:

mkdir -p /home/mongodb-cfg
sudo chown -R mongodb:mongodb /home/mongodb-cfg

三台伺服器都要做。

然後建立 MongoDB Config Server 需要的設定檔,之後再透過 mongod 來載入啟用,因為我們測試環境的 Config Server 與 Replica Set 都在其實同一台機器(正式環境建議分開或分散比較好),Port 與 PID 都要不同,Port 隔開可以方便我們部署在不同機器,然而透過不同的設定檔也會比較好進行管理。大致上的 Port 分配如下:

  • Replica Set:27019 Port
  • Config Server:27018 Port
  • Mongo Router (mongos):27017 Port

編輯 Config Server 設定檔內容如下:

vi /etc/mongod-cfgserv.conf
storage:
  dbPath: /home/mongodb-cfg
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod-cfgserv.log
sharding:
   clusterRole: configsvr
net:
  port: 27018
  bindIp: 0.0.0.0
processManagement:
  fork: true
  pidFilePath: /var/run/mongod-cfgserv.pid

上面的設定檔先不開啟認證模式,官方規定在 Production 環境最少要配置三台以上的 Config Server。透過以下 mongod 命令分別在「mong-cfg1, mong-cfg2, mong-cfg3」三台機器各別透過 mongod 指令來啟用 Config Server。

sudo mongod -f /etc/mongod-cfgserv.conf

啟動後我們也可以在 /var/log/mongodb/mongod-cfgserv.log 看到 log 資訊。

建置 MongoDB Router

再來就是建置 MongoDB Sharding Router。首先建立 mongos 要載入的設定檔,基本上跟上面 Config Server 使用的 mongod 差不多。我們這裡測試用的 Router 是跟 Config Server 放在一起,實際上可分開存放會更好。

這裡,我們就都不設定認證模式,若有意設置,可參考這篇文章。

設定檔內容如下:

sudo vi /etc/mongod-router.conf
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod-router.log
sharding:
  configDB: mong-cfg1:27018,mong-cfg2:27018,mongodb-cfg-3:27018
net:
  port: 27017
  bindIp: 0.0.0.0 
processManagement:
  fork: true
  pidFilePath: /var/run/mongodb-router.pid

我們可以看到上述的設定檔有指定 Config Server 的位置,好讓 Router 啟動時可以讀取 Config Server 中的 Metadata。也需要配置到另外一台伺服器mong-router2

如同上述的設定檔,先不用啟用認證來執行 mongos,主要是為了要先在 Config Server 中建立 User 好讓後續整個認證流程可以順利串起來,這裡通常大家都會遇到最多問題,很多人最後乾脆關閉認證來配置 Sharding,這樣其實很危險,不建議關閉認證。此外由於應用程式大多是透過 27017 Port 進行連線,所以要提供連線的 Router Bind 直接啟動在標準 MongoDB Port 這樣應用程式就不用修改囉。

先啟用其中一台的 MongoDB Sharding Router,等透過 Mongo Router 設定好 Config Server 之後再啟動所有的 Rouer 即可。注意這裡是用 mongos 命令來啟動喔,如下:

sudo mongos -f /etc/mongod-router.conf

配置自動啟動config與router服務:
於10.21.1.45與10.21.1.46兩台伺服器

vi /etc/rc.local
mongod -f /etc/mongod-cfgserv.conf
mongos -f /etc/mongod-router.conf

於10.21.1.44則配置如下

vi /etc/rc.local
mongod -f /etc/mongod-cfgserv.conf

建立 Sharding Cluster

接著我們透過認證模式進入 Mongo Router 來設定 Sharding,因為後端的 Monogd 是採用Replica Set 認證模式,所以配置 Sharding 的動作一定要透過同一把 Key 啟動,才能把服務整個串起來。以下透過我們建立好的管理者帳密登入 Mongo Router 來進行配置:

mongo mongodb-router1
mongos>sh.addShard("bes/mongodb-a1:27019,mongodb-a2:27019,mongodb-a3:27019")

加入後,再檢查一下狀態:

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
	"_id" : 1,
	"minCompatibleVersion" : 5,
	"currentVersion" : 6,
	"clusterId" : ObjectId("59b4e7b564bf31ba36e4615c")
}
  shards:
	{  "_id" : "bes",  "host" : "bes/mongsh1:27019,mongsh2:27019,mongsh3:27019",  "state" : 1 }
  active mongoses:
	"3.4.8" : 2
 autosplit:
	Currently enabled: yes
  balancer:
	Currently enabled:  yes
	Currently running:  no
		Balancer lock taken at Sun Sep 10 2017 20:27:09 GMT+0800 (CST) by ConfigServer:Balancer
	Failed balancer rounds in last 5 attempts:  5
	Last reported error:  Cannot accept sharding commands if not started with --shardsvr
	Time of Reported error:  Wed Sep 13 2017 11:18:59 GMT+0800 (CST)
	Migration Results for the last 24 hours: 
		No recent migrations
  databases:
	{  "_id" : "teammerge12",  "primary" : "bes",  "partitioned" : true }

mongos> 

實務的配置上,我們會部署多台 Router 來平衡應用程式端的查詢,在應用程式中也可以指定這一群「Router」作為 Server。到這裡 MongoDB Sharding Cluster 就算是被置完成囉,實際的使用上還需要指定 Collection Shard Key 來分配 Chunk 到不同的 Shard 上,這裡請自行參考 MongoDB 官方的 Shard Key 使用介紹。

南懷瑾:我在峨眉山閉關的經驗(重要的成就法門!)

1172516_610299175659201_478697180_o佛法是非常科學的實證,因此,大家應各走各的路,個人選定一門深入,至死不變。有人修念佛三昧,那還是依此修,有人持大悲咒習慣還是持大悲咒,有人念六字大明咒達到一心不亂,則還是念六字大明咒;或修六妙門、白骨觀,種種法門都可以,但是,大家不要變來變去。有人如果有其他信仰禱告,一樣的可以各走各的路線,選定一門。或者有人說:「我什麼法門都用不上路」,那你就用觀世音法門。

我現在講話的聲音與外面車水馬龍的聲音,大家都聽到了,但不要注意聽它;現在鞭炮聲也聽到了。鞭炮放過就清凈了,本來清凈的。這是最粗淺的觀音法門,馬上可以體會。不管是念佛也好,走任何修行法門,慢慢寧靜迴轉來可以聽到自己身體內部的聲音,不需做任何功夫。身體內部本來是有聲音的,為什麼大家聽不見?如果從事科學研究,人體血液的流動,心臟的跳動,身體內部音聲的震動,卻比一顆原子彈爆炸的聲音還大。老子說:「大音希聲」。宇宙運行的聲音很大,可是人們自己習慣了,反而聽不見。銀河系統聲音最大,我們人類也聽不見。連我們身體內部的音聲也是一樣聽不見。

什麼時候你才聽見呢?當人睡下去靠在枕頭上,還沒有睡著以前,你用手把兩耳朦起來,像包餃子把耳朵合攏起來,此時就聽到心臟血液流動聲音很大。搭乘飛機時的噪音或在戰場上炮彈爆炸的巨聲,拿手朦起耳朵,同樣比較容易與外界音聲隔離;那時,內在音聲就很大。但是,修持觀音法門的人,在靜態之時,可以聽到自己內在的音聲;即使在最熱鬧的地方,還是可以聽到自己內在的音聲。修持到此地步,身體上的轉化,可以到達相當的情況。慢慢聽自己內部的音聲靜下去,血液流動、心臟跳動的音聲都靜下去,靜到什麼程度呢?連身體內部的音聲都清凈了,那時會出現一種非常奇妙的音聲。順便告訴你們,當年我在四川峨眉山頂上閉關時候的經驗。

每當夜深人靜的時候,在峨眉山頂上,冰天雪地中,夜裡起來靜坐,萬籟俱寂,飛鳥亦無,清凈境界,如身游太虛中,安心自在,就像神仙境界一般非常舒適。而且常聽到虛空中天樂之音,非常美妙。因而想到莊子所謂「天籟之音」。莊子形容冷冷然、清雅悠美渾厚的音聲,那真是聞所未聞的天音。依我的經驗,現在雖在吵鬧的都市中,心靈一靜,天籟的梵音仍然可以聽到,與嘈雜的音聲毫不相礙。所以懇切希望諸位依此修觀世音法門,一定會有所成就。

現在引用《楞嚴經》觀音圓通法門這一段經文,再加以說明。

【爾時觀世音菩薩,即從座起,頂禮佛足,而白佛言。世尊。憶念我昔無數恆河沙劫,於時有佛出現於世,名觀世音。我於彼佛發菩提心。彼佛教我從聞思修,入三摩地。初於聞中,入流亡所。所入既寂。動靜二相瞭然不生。如是漸增。聞所聞盡。盡聞不住。覺所覺空。空覺極圓。空所空滅。生滅既滅。寂滅現前。忽然超越世出世間。十方圓明。獲二殊勝。一者,上合十方諸佛本妙覺心,與佛如來同一慈力。二者,下合十方一切六道眾生,與諸眾生同一悲仰。】

二十五位菩薩,一一起來報告心得,現在輪到觀世音菩薩起立自述。先向佛頂禮,然後向佛報告說:「我現在回想過去無量數劫以前,那時有一位觀世音佛出現世間,我就在佛前發起求證自性正覺的菩提心。觀世音佛就教我;從聞、思、修(聞聲、思惟、修證)三個階段去修持,證入如來的正定三昧,(三昧就是三摩地音聲縮短的翻譯)。我從聞思修入三摩地。」他說:我一上坐,耳根清凈自然聽到外界一切音聲,乃至呼吸的聲音,對於這些音聲不討厭它,也不用心去聽它,第六意識不起分別,慢慢靜下來,自然聽到自己內在生理血液循環流動的音聲,再靜下來,忘記了所聽的聲音,就入與能聞的自性之流,忘去所聞的聲音之相。「入流亡所」,忘掉所聽的音聲,乃至於念佛的音聲都沒有了,內在的聲音也沒有了,外面的聲音也沒有,完全清凈到極點,再由這了無所聞的寂滅中進修,有聲與無聲動靜兩種境象,都瞭然無礙,卻一念不生。

我們耳朵聽到有聲音是動相,注意聽到「沒有聽到的」叫做靜相,動相與靜相都是生滅相對法,道不在動相與靜相上,所謂「動靜二相瞭然不生」。聲音來聽見動相,聲音沒有了聽到靜相;有時當我們很靜的時候,忽然又來聲音,馬上又聽到動相,動靜只是現象的不同。我們能聽動相與能聽靜相的,不在聲音本身,更不在內不在外,不在中間,無所不在,而心理卻明明白白,沒有動過。動來知道動,靜來知道靜,能知道動與靜這個沒有動過,生而不生,用而不用。如此再加以精進,能聞與所聞的作用功能,都渙然冰釋凈盡!能聽聲音的本題功能,以及所聞聲音的作用,不管動與靜,都渙然釋然,「盡聞不住」,你甚至於覺得超越跳出宇宙觀念的範圍,如此,再進一步就可以徹底明心見性,與形而上的道體渾合為一。

「覺,所覺,空;空,覺,極圓;空,所空,滅;生滅既滅,寂滅現前。」我們聽聲音後面還有能感覺到自己在聽的,那個覺性與所覺的聲音,能覺與所覺都空掉了,空的境界與自己大徹大悟的境界都沒有了,能所雙亡,盡聞無相的境界也無所住,空與覺性就渾然一體,至極於圓明之境。

「空,所空,滅」,能空與所空的現象也沒有;「生滅寂滅」,自然就滅盡生滅的作用;於是絕對真空的寂滅自性就當下現前。空去能生能滅的,達到渾然一體圓明道體,所以到此時,呼吸也停了。(呼吸法是練氣修脈的方法,它本身是生滅法。凡是生滅法都是現象,不是道體。在此告訴你們一個重要道理,我們念頭思想先動,還是呼吸氣先動?念頭動了氣就動了。一個人如果念頭完全不動,呼吸自然停止;呼吸停止的時候,身體本能也就完全充電貫滿。所以練氣功修九節佛風種種呼吸往來的修法是很笨的事,不能完全充電;真正充電的時候,念頭完全不動,不呼也不吸,就充電了。)

那麼,你把握觀音法門,慢慢向內聽聲音,達到一念不生,身體氣脈自然起變化,定力也增加了。因念頭完全靜止,呼吸不往不來,自然腿就容易打通。坐著舒服極了,不想下座,動也不想動了,坐上七天七夜又有何困難?到此時,形而上的道體自然完全呈現了,突然超越世間出世間所有的境界。十方世界立即洞徹圓明,(十方代表整個空虛宇宙)豈止是天人合一,完全圓滿清凈一體了。

這時,獲得兩種特殊勝妙的功能:上合十方一切諸佛,本元自性的妙覺真心,與過去一切所有成就的聖賢諸佛,心心相印,同具有大慈大悲的能力;下合十方一切六道眾生(天、魔、人、畜生、餓鬼、地獄),與眾生的心慮同體。故與一切眾生同樣具有悲天憫人的行止,不分上下。所以說,觀世音菩薩大慈大悲,「觀音菩薩妙難酬,清凈莊嚴累劫修……千處祈求千處應,苦海常作度人舟。」

我常希望女性的道友們,尤其用功不上路,智慧不開、福報不具足,求求最同情女性的觀世音菩薩。男性也一樣。古代禪宗很多位祖師,就以專心稱念「南無大慈大悲救苦救難廣大靈感觀世音菩薩」而大徹大悟。有這些先輩作榜樣,我們更應效法學習觀世音耳根圓通的修法。佛當時教導弟子,一般聲聞眾也都是聽佛的聲音而入道、證果。因為東方娑婆世界眾生耳根最為靈利,一切修法皆靠耳根而傳導,不管禪宗、凈土、密宗任何法門,都離不開觀音法門。尤其初步靜坐,必需由此入手。佛經叫「預流向」,準備證果向此方修;修成功了就叫「預流果」。不由此修,想成就道果,無有是處。

摘抄自南師《定慧初修》

切不可把自己看得過重

【切不可把自己看得過重】

557305_426941384023235_2043203486_n

一只駱駝辛辛苦苦穿過了沙漠,一只蒼蠅趴在駱駝背上一點力氣也不花也過來了。

蒼蠅譏笑說:「駱駝,謝謝你辛苦把我駝過來。再見!」

駱駝看了一眼蒼蠅說:「你在我身上時我根本就不知道,你走了也沒必要跟我打招呼,你根本就沒有什麼重量,你別把自己看太重,你以為你是誰。」

英國文學家蕭伯納一日閑著無事同一個不認識的小女孩子玩耍談天,黃昏來臨時蕭伯納對小女孩說,回去告訴你媽媽,說是蕭伯納先生和你玩了一下午,沒想到小女孩子馬上就回敬了一句:「你也回去告訴你媽媽,就說瑪麗和你玩了一下午。」

後來,蕭伯納對他人講,人,切不可把自己看得過重。

著名表演藝術家英若誠曾講過一個故事。

他生長在一個大家庭中,每次吃飯都是幾十個人坐在大餐廳中一起吃,有次他突發奇想決定跟大家開個玩笑,吃飯前他把自己藏在飯廳內一個不被注意的櫃子中,想等到大家遍尋不著時再跳出來。

尷尬的是大家絲毫沒有注意到他的缺席,酒足飯飽大家離去,他才蔫蔫地走出來吃了些殘湯剩菜。從那以後他就告訴自己:永遠不要把自己看得太重要,否則就會大失所望。

蘇東坡年輕的時候是個傲氣十足的人。一日在田間小路上行走,忽然和一個村姑狹路相逢,村姑挑著一擔泥,兩個互不相讓。最後村姑提出她出一上聯,若蘇東坡能對上下聯她就甘心讓路。

村姑的上聯是:一擔重泥擋子路。

蘇東坡一聽這個上聯可生了得,一時竟想不出下聯。兩邊在水田裡插秧的農夫大聲笑。情急之下蘇東坡竟然大聲回應:兩旁夫子笑顏回。然後,蘇東坡脫下鞋襪為村姑讓了路。

事實上一個人的輕與重,貴與賤決不是自己能訂下標准的,平靜謙和,不事張揚才是最重的分量。

北京大學開學的日子,一個新生攔住了一個看門的大爺讓他照顧一下箱子。第二天才發現這個看門的大爺竟然是北京大學副校長,著名學者季羨林。這位學貫中西的學者竟然能夠如此看輕自己,也許正是他成為當代學人榜樣的原因之一。

不把自己看得太重其實是種修養,種風度,種高尚的境界,種達觀的處世姿態,是心態上的一種成熟,是心志上的一種淡泊。

用這種心態做人可以使自己更健康,更大度;用這種心態做事可以使生活更輕鬆,更踏實;用這種心態處世可以使社會更和諧。

應當給親人怎樣的臨終關懷

60616_499335773424157_2135668535_n

應當給親人怎樣的臨終關懷
作者 王慧君

一個遭遇車禍的22歲男性被送進了監護室,此時的他生命垂危,幾乎不能說話。然後,在長達3個小時的時間?,醫院不允許家人進入病房看望這個隨時會告別人生的親人,在隨後的時間?,也只允許一個親人每隔2小時進去看望5分鐘。

在漫長的等待中,沮喪的女友只好回家了,父母也抵不住身心疲憊睡著了,直到護士通知他們病人已身亡時才驚醒過來。由於痛惜沒能在最後時刻與親人見上一面,說上幾句告別的話,家屬的悲痛驟然升溫…

這還算不上殘忍。在最後的日子?,病人常常得被動地接受這樣的「待遇」:一是過度治療。有些病人甚至直到生命的最後一息仍在接受創傷性的治療。但另一個極端卻是治療不足,也就是說,病人受到的痛苦和不適直到死亡也沒有得到充分的解脫。

那麼,生命在最後的幾週、幾天、幾小時?到底處於什麼樣的狀態?一個人在臨近死亡時,體內出現了什麼變化?在想什麼?需要什麼?我們該做什麼,不該做什麼?怎樣做才能給生命以舒適、寧靜甚至美麗的終結?

臨終期一般為10-14天(有時候可以短到24小時)。在這一階段,醫生的工作應該從「幫助病人恢復健康」轉向「減輕痛苦」。

臨終病人常處於脫水狀態,吞嚥出現困難,周圍迴圈的血液量銳減,所以病人的皮膚又濕又冷,摸上去涼涼的。但你不要以為病人是因為冷,需要加蓋被縟以保溫。相反,即使只給他們的手腳加蓋一點點重量的被縟,絕大多數臨終病人都會覺得太重,覺得無法忍受。呼吸衰竭使臨終病人喘氣困難,給予氧氣似乎是順理成章的事。但他們已失去了利用氧氣的能力,此時給他們供氧無法減輕這種「呼吸饑餓」。
正確的做法是:打開窗戶和風扇,給病床周圍留出足夠的空間。另外,使用嗎啡或其他有類似鴉片製劑的合成麻醉劑是減輕病人喘氣困難和焦慮的最好辦法。
當吞嚥困難使病人無法進食和飲水時,有些家屬會想到用胃管餵食物和水,但瀕死的人常常不會感到饑餓。相反,脫水的缺乏營養的狀態造成血液內的酮體積聚,從而產生一種止痛藥的效應,使病人有一種異常歡欣感。
這時即使給病人灌輸一點點葡萄糖,都會抵消這種異常的欣快感。而且,此時給病人餵食還會造成嘔吐、食物進入氣管造成窒息、病人不配合而痛苦掙扎等後果,使病人無法安靜地走向死亡。
靜脈輸液雖然能解決陷入譫妄狀態病人的脫水問題,但同時帶給病人的是水腫、噁心和疼痛。

在生命的最後階段,甚至是在死前三個月之久,不少病人與別人的交流減少了,心靈深處的活動增多了。不要以為這是拒絕親人的關愛,這是瀕死的人的一種需要:離開外在世界,與心靈對話。
一項對100個晚期癌症病人的調查顯示:死前一週,有56%的病人是清醒的,44%嗜睡,但沒有一個處於無法交流的昏迷狀態。
但當進入死前最後6小時,清醒者僅佔8%,42%處於嗜睡狀態,一般人昏迷。所以,家屬應抓緊與病人交流的合適時刻,不要等到最後而措手不及。

隨著死亡的臨近,病人的口腔肌肉變得鬆弛,呼吸時,積聚在喉部或肺部的分泌物會發出咯咯的響聲,醫學上稱為「死亡咆哮聲」,使人聽了很不舒服。但此時用吸引器吸痰常常會失敗,並給病人帶來更大的痛苦。
應將病人的身體翻向一側,頭枕的高一些,或用藥物減少呼吸道分泌。

瀕死的人在呼吸時還常常發出嗚咽聲或喉鳴聲,不過病人並不一定有痛苦,此時可用一些止痛劑,使他能繼續與家屬交談或安安靜靜地走向死亡。
記住,沒有證據表明緩解疼痛的藥物會促使死亡。聽覺是最後消失的感覺,所以,不想讓病人聽到的話即便在最後也不該隨便說出口。

給生命最後的安詳
莫小米

這幾天,我一再地說,我一再地想—-為什麼,為什麼直到現在,我才讀到了這篇文章。現在是什麼意思? 現在是,我的父母已先後去世,而一直到他們生命的最後時光,我沒有和這篇文章相遇,所以在無知中鑄成大錯。

所有的誤解都基於一個前提,我們和臨終者已經無法溝通,我們至親的親人已經無法講出他們的心願和需求,我們只好一意孤行。而本來,只需要一點點起碼的醫學常識,事情並不複雜。

我想起我抓著父親的手,他像山泉一樣涼。我命令弟弟說:爸爸冷,快拿毯子!現在才知道,他其實並不冷,只是因為迴圈的血液量銳減,皮膚才變得又濕又冷。而此時在他的感覺中,他的身體正在變輕,漸漸地漂浮、飛昇……這時哪怕是一條絲巾,都會讓他感覺到無法忍受的重壓,更何況一條毯子!

我想起直到父親嚥氣,醫生才拔下了連接在他身體上的所有的管子,輸氣管、輸液管、心電圖儀……同時我們覺得他幾天幾夜沒進水進食,總是試圖做些哪怕是完全徒勞的嘗試。母親清早送來現榨的西瓜汁,裝在有刻度的嬰兒奶瓶?,我們姐弟每天都在交流著爸爸今天到底喝了多少水。

現在才知道,他其實並不餓。那時候,他已從病痛中解脫出來,天很藍風很輕,樹很綠花很豔,鳥在鳴水在流,就像藝術、宗教中描述的那樣……這時,哪怕給病人輸注一點點葡萄糖,都會抵消那種異常的欣快感,都會在他美麗的歸途上,橫出刀槍棍棒。

父親是個沉默寡言的人,在最後譫妄狀態中,卻忽然變得喋喋不休,而且是滿口的家鄉話。我擔心他離我而去,我想喊住他,他毫不理會。現在才知道,那個時辰,他與外界的交流少了,心靈深處的活動卻異常活躍,也許青春,也許童趣,好戲正在一幕幕地上演。我怎可無端打斷他,將他拖回慘痛現實?

我應該做的,只是靜靜地守著他,千萬千萬不要走開。臨終者昏迷再深,也會有片刻的清醒,大概就是民間傳說的迴光返照吧,這時候,他必要找他最牽腸掛肚的人,不能讓他失望而去。

我還記得父親此生表達的最後願望,是要拔去他鼻子上的氧氣管。可是我們兩個不孝子女是怎樣地違拗了他的意願啊,我和弟弟一人一邊強按住他的手,直到他的手徹底綿軟。

現在才知道,對於臨終者,最大的仁慈和人道是避免不適當的、創傷性的治療。不分青紅皂白地「不惜一切代價」搶救,是多麼的愚蠢和殘忍!父親走了。醫生下了定論,護士過來作了最後的處理。
一旁看熱鬧的病人和家屬說:兒子、女兒都在,快哭,快喊幾聲嘛。可不知為什麼,我竟然一點也哭喊不出來,弟弟也執拗地沉默著。現在才知道,聽覺是人最後消失的感覺,爸爸沒有聽到我們的哭泣,不知道他是高興還是難過?

生和死都是自然現象,這我明白。只是現在才知道,自然竟然把生命的最後時光安排得這樣有人情味,這樣合理,這樣好,這樣的—-自然而然,是人自作聰明的橫加干涉,死亡的過程才變得痛苦而又漫長。

一天上午。我突然發現我對面的同事淚流滿面,一個50多歲的男人的失態讓我詫異。忙問他怎麼了,他告訴我看了上面的文章想起了他母親臨終前情形,他說就像上文描述的那樣,覺得母親冷了給她穿保暖的衣服,蓋厚厚的被子,覺得母親幾天沒有進食,不停給她輸液,他母親想回家,可他堅持讓他住在醫院。他自認為盡了孝心,可是沒想到給她帶來莫大的痛苦。

人總是要死了,帶來輕鬆、美麗踏進另一個世界,一定會走的更好。現在,我讀到了這篇文章。我要保留著它直到最後的時光,如果有可能,我要求我的孩子照此辦理,任我的靈魂作最後的欣快飛翔。

美國老年病學會制定的臨終關懷八要素:
1、減輕病人肉體和精神症狀,以減少痛苦;
2、採取能讓病人表現自己願望的治療手段,以維護病人的尊嚴;
3、避免不適當的、有創傷的治療;
4、在病人還能與人交流時,給病人和家屬提供充分的時間相聚;
5、給予病人儘可能好的生命品質;
6、將家屬的醫療經濟分擔減少到最小程度;
7、所花醫療費用要告知病人;
8、給死者家庭提供治喪方面的幫助。