伺服器高可用為什麼是奇數
㈠ 為什麼zookeeper集群中節點配置個數是奇數個
選舉機制(FastLeaderElection演算法):sid最大且被超過集群中超過半數的機器擁護就會成為leader.
所以只有兩種情況無法選出leader:
整個集群只有2台伺服器(注意不是只剩2台,而是集群的總節點數為2)
整個集群超過半數機器掛掉。
所謂的偶數問題其實是另一個集群優化配置問題,即:集群的容災數量=集群總節點數/2-1
假如集群有5節點,那麼最多允許2個節點掛掉,如果有3節點掛了,那麼整個集群的選舉結果不會滿足條件:集群中超過半數的機器擁護。
假如集群有6個節點,那麼最多也只能掛掉2台,因為掛了3台時,選舉結果也不會滿足條件:集群中超過半數的機器擁護。
結果可以看出,多那一台用處並不大。所以集群總數推薦為奇數。
㈡ 伺服器有哪幾種
機架式伺服器
機架式伺服器的外形看來不像計算機,而像交換機,有1U(1U=1.75英寸=4.445CM)、2U、4U等規格。機架式伺服器安裝在標準的19英寸機櫃裡面。這種結構的多為功能型伺服器。對於信息服務企業(如ISP/ICP/ISV/IDC)而言,選擇伺服器時首先要考慮伺服器的體積、功耗、發熱量等物理參數,因為信息服務企業通常使用大型專用機房統一部署和管理大量的伺服器資源,機房通常設嚴密的保安措施、良好的冷卻系統、多重備份的供電系統,其機房的造價相當昂貴。如何在有限的空間內署更多的伺服器直接關繫到企業的服務成本,通常選用機械尺寸符合19英寸工業標準的機架式伺服器。機架式伺服器也有多種規格,例如1U(4.45cm高)、2U、4U、6U、8U等。通常1U的機架式伺服器最節省空間,但性能和可擴展性較差,適合一些業務相對固定的使用領域。4U以上的產品性能較高,可擴展性好,一般支持4個以上的高性能處理器和大量的標准熱插拔部件。管理也十分方便,廠商通常提供人相應的管理和監控工具,適合大訪問量的關鍵應用,但體積較大,空間利用率不高。
刀片伺服器
所謂刀片伺服器(准確的說應叫做刀片式伺服器)是指在標准高度的機架式機箱內可插裝多個卡式的伺服器單元,實現高可用和高密度。每一塊"刀片"實際上就是一塊系統主板。它們可以通過"板載"硬碟啟動自己的操作系統,如Windows NT/2000、Linux等,類似於一個個獨立的伺服器,在這種模式下,每一塊母板運行自己的系統,服務於指定的不同用戶群,相互之間沒有關聯,因此相較於機架式伺服器和機櫃式伺服器,單片母板的性能較低。不過,管理員可以使用系統軟體將這些母板集合成一個伺服器集群。在集群模式下,所有的母板可以連接起來提供高速的網路環境,並同時共享資源,為相同的用戶群服務。在集群中插入新的"刀片",就可以提高整體性能。而由於每塊"刀片"都是熱插拔的,所以,系統可以輕松地進行替換,並且將維護時間減少到最小。
塔式伺服器
塔式伺服器應該是大家見得最多,也最容易理解的一種伺服器結構類型,因為它的外形以及結構都跟我們平時使用的立式PC差不多,當然,由於伺服器的主板擴展性較強、插槽也多出一堆,所以個頭比普通主板大一些,因此塔式伺服器的主機機箱也比標準的ATX機箱要大,一般都會預留足夠的內部空間以便日後進行硬碟和電源的冗餘擴展。由於塔式伺服器的機箱比較大,伺服器的配置也可以很高,冗餘擴展更可以很齊備,所以它的應用范圍非常廣,應該說使用率最高的一種伺服器就是塔式伺服器。我們平時常說的通用伺服器一般都是塔式伺服器,它可以集多種常見的服務應用於一身,不管是速度應用還是存儲應用都可以使用塔式伺服器來解決。
機櫃式伺服器
在一些高檔企業伺服器中由於內部結構復雜,內部設備較多,有的還具有許多不同機櫃式伺服器的 設備單元或幾個伺服器都放在一個機櫃中,這種伺服器就是機櫃式伺服器。機櫃式通常由機架式、刀片式伺服器再加上其它設備組合而成。對於證券、銀行、郵電等重要企業,則應採用具有完備的故障自修復能力的系統,關鍵部件應採用冗餘措施,對於關鍵業務使用的伺服器也可以採用雙機熱備份高可用系統或者是高性能計算機,這樣的系統可用性就可以得到很好的保證。
㈢ X86伺服器上使用高可用(雙機熱備)軟體的比例大概是多少根據是什麼
額,做雙機的話一般看客戶的需求吧。主要還是看他們伺服器跑什麼應用。根據我們客戶買伺服器的情況,一般做雙機的比例是5%吧。需要幫助的Q我!
㈣ 伺服器是做什麼用的,具體有什麼作用,為什麼機房要用伺服器。
摘要 客官您好,一、伺服器的定義和作用如下:
㈤ 為保證伺服器高可靠性,高可用性,應採取哪些技術
1,從伺服器硬體系統的匯流排和處理器的處理能力入手。伺服器的系統匯流排已經從過去的16位、32位發展到現在的64位;局部I/O匯流排技術(例如AGP、PCI-Express)在不斷改進;SMP(對稱多處理器)技術和DP(雙處理器)技術的應用,硬體冗餘和負載均衡技術的發展,大容量內存校驗、糾錯和專用內存技術的進步。 2,伺服器硬體設計改進。硬體設計高度模塊化,便於故障診斷與維修。硬體冗餘,例如雙電源、雙CPU(雙CPU還能提高性能)。大功率的冷卻系統。指示燈故障示警。 3,高速、多個數、大容量磁碟的應用。支持 SCSI 高速硬碟及 Raid 技術,支持陣列卡以及光通訊設備。外接磁碟擴展陣列櫃滿足了大容量存儲和提高了存儲的I/O性能,高智能的陣列可以保證數據的安全和完整。本地Raid1雙硬碟基本杜絕了由於磁碟損壞而破壞OS的可能性。 4,支持集群、熱備和均衡技術。集群和均衡技術的使用,使伺服器系統具備了整體的容錯功能和承載能力,我們不必擔心由於伺服器的意外故障和突發訪問而引起的服務關閉甚至系統崩潰。 5,系統備份和容災。高性能的備份軟體可以對系統進行備份,便於軟體系統(OS、資料庫系統、郵件系統、財務軟體等)的及時恢復。異地容災、應用級容災降低了軟體系統遭受數據丟失的災難,和提高了災難恢復的效率。 本文來自「十萬個為什麼」電腦學習網 http://www.why100000.com
希望採納
㈥ zookeeper集群為什麼是3個以上節點
Apache Zookeeper是我最近遇到的最酷的技術,我是在研究Solr Cloud功能的時候發現的。Solr的分布式計算讓我印象深刻。你只要開啟一個新的實例就能自動在Solr Cloud中找到。它會將自己分派到某個分片中,並確定出自己是一個Leader(源)還是一個副本。不一會兒,你就可以在你的那些伺服器上查詢到了。即便某些伺服器宕機了也可以繼續工作。非常動態、聰明、酷。
將運行多個應用程序作為一個邏輯程序並不是什麼新玩意。事實上,我在幾年前就已寫過類似的軟體。這種架構比較讓人迷惑,使用起來也費勁。為此Apache Zookeeper提供了一套工具用於管理這種軟體。
為什麼叫Zoo?「因為要協調的分布式系統是一個動物園」。
在本篇文章中,我將說明如何使用php安裝和集成Apache ZooKeeper。我們將通過service來協調各個獨立的PHP腳本,並讓它們同意某個成為Leader(所以稱作Leader選舉)。當Leader退出(或崩潰)時,worker可檢測到並再選出新的leader。
ZooKeeper是一個中性化的Service,用於管理配置信息、命名、提供分布式同步,還能組合Service。所有這些種類的Service都會在分布式應用程序中使用到。每次編寫這些Service都會涉及大量的修bug和競爭情況。正因為這種編寫這些Service有一定難度,所以通常都會忽視它們,這就使得在應用程序有變化時變得難以管理應用程序。即使處理得當,實現這些服務的不同方法也會使得部署應用程序變得難以管理。
雖然ZooKeeper是一個Java應用程序,但C也可以使用。這里就有個PHP的擴展,由Andrei Zmievski在2009創建並維護。你可以從PECL中下載,或從GitHub中直接獲取PHP-ZooKeeper。
要使用該擴展你首先要安裝ZooKeeper。可以從官方網站下載。
$ tar zxfv zookeeper-3.4.5.tar.gz
$ cd zookeeper-3.4.5/src/c
$ ./configure --prefix=/usr/
$ make
$ sudo make install
這樣就會安裝ZooKeeper的庫和頭文件。現在准備編譯PHP擴展。
$ cd$ git clone https://github.com/andreiz/php-zookeeper.git
$ cd php-zookeeper
$ phpize
$ ./configure
$ make
$ sudo make install
將「zookeeper.so」添加到PHP配置中。
$ vim /etc/php5/cli/conf.d/20-zookeeper.ini
因為我不需要運行在web服務環境下,所以這里我只編輯了CLI的配置。將下面的行復制到ini文件中。
extension=zookeeper.so
使用如下命令來確定擴展是否已起作用。
$ php -m | grep zookeeper
zookeeper
現在是時候運行ZooKeeper了。目前唯一還沒有做的是配置。創建一個用於存放所有service數據的目錄。
$ mkdir /home/you-account/zoo
$ cd$ cd zookeeper-3.4.5/
$ cp conf/zoo_sample.cfg conf/zoo.cfg
$ vim conf/zoo.cfg
找到名為「dataDir」的屬性,將其指向「/home/you-account/zoo」目錄。
$ bin/zkServer.sh start
$ bin/zkCli.sh -server 127.0.0.1:2181[zk: 127.0.0.1:2181(CONNECTED) 14] create /test 1
Created /test[zk: 127.0.0.1:2181(CONNECTED) 19] ls /[test, zookeeper]
此時,你已成功連到了ZooKeeper,並創建了一個名為「/test」的znode(稍後我們會用到)。ZooKeeper以樹形結構保存數據。這很類似於文件系統,但「文件夾」(譯者註:這里指非最底層的節點)又和文件很像。znode是ZooKeeper保存的實體。Node(節點)的說法很容易被混淆,所以為了避免混淆這里使用了znode。
因為我們稍後還會使用,所以這里我們讓客戶端保持連接狀態。開啟一個新窗口,並創建一個zookeeperdemo1.php文件。
<?php
class ZookeeperDemo extends Zookeeper {
public function watcher( $i, $type, $key ) {
echo "Insider Watcher\n";
// Watcher gets consumed so we need to set a new one
$this->get( '/test', array($this, 'watcher' ) );
}
}
$zoo = new ZookeeperDemo('127.0.0.1:2181');$zoo->get( '/test', array($zoo, 'watcher' ) );
while( true ) {
echo '.';
sleep(2);}
現在運行該腳本。
$ php zookeeperdemo1.php
此處應該會每隔2秒產生一個點。現在切換到ZooKeeper客戶端,並更新「/test」值。
[zk: 127.0.0.1:2181(CONNECTED) 20] set /test foo
這樣就會靜默觸發PHP腳本中的「Insider Watcher」消息。怎麼會這樣的?
ZooKeeper提供了可以綁定在znode的監視器。如果監視器發現znode發生變化,該service會立即通知所有相關的客戶端。這就是PHP腳本如何知道變化的。Zookeeper::get方法的第二個參數是回調函數。當觸發事件時,監視器會被消費掉,所以我們需要在回調函數中再次設置監視器。
現在你可以准備創建分布式應用程序了。其中的挑戰是讓這些獨立的程序決定哪個(是leader)協調它們的工作,以及哪些(是worker)需要執行。這個處理過程叫做leader選舉,在ZooKeeper Recipes and Solutions你能看到相關的實現方法。
這里簡單來說就是,每個處理(或伺服器)緊盯著相鄰的那個處理(或伺服器)。如果一個已被監視的處理(也即Leader)退出或者崩潰了,監視程序就會查找其相鄰(此時最老)的那個處理作為Leader。
在真實的應用程序中,leader會給worker分配任務、監控進程和保存結果。這里為了簡化,我跳過了這些部分。
創建一個新的PHP文件,命名為worker.php。
<?php
class Worker extends Zookeeper {
const CONTAINER = '/cluster';
protected $acl = array(
array(
'perms' => Zookeeper::PERM_ALL,
'scheme' => 'world',
'id' => 'anyone' ) );
private $isLeader = false;
private $znode;
public function __construct( $host = '', $watcher_cb = null, $recv_timeout = 10000 ) {
parent::__construct( $host, $watcher_cb, $recv_timeout );
}
public function register() {
if( ! $this->exists( self::CONTAINER ) ) {
$this->create( self::CONTAINER, null, $this->acl );
}
$this->znode = $this->create( self::CONTAINER . '/w-',
null,
$this->acl,
Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE );
$this->znode = str_replace( self::CONTAINER .'/', '', $this->znode );
printf( "I'm registred as: %s\n", $this->znode );
$watching = $this->watchPrevious();
if( $watching == $this->znode ) {
printf( "Nobody here, I'm the leader\n" );
$this->setLeader( true ); }
else {
printf( "I'm watching %s\n", $watching );
}
}
public function watchPrevious() {
$workers = $this->getChildren( self::CONTAINER );
sort( $workers );
$size = sizeof( $workers );
for( $i = 0 ; $i < $size ; $i++ ) {
if( $this->znode == $workers[ $i ] ) {
if( $i > 0 ) {
$this->get( self::CONTAINER . '/' . $workers[ $i - 1 ], array( $this, 'watchNode' ) );
return $workers[ $i - 1 ];
}
return $workers[ $i ];
}
}
throw new Exception( sprintf( "Something went very wrong! I can't find myself: %s/%s",
self::CONTAINER,
$this->znode ) );
}
public function watchNode( $i, $type, $name ) {
$watching = $this->watchPrevious();
if( $watching == $this->znode ) {
printf( "I'm the new leader!\n" );
$this->setLeader( true );
}
else {
printf( "Now I'm watching %s\n", $watching ); }
}
public function isLeader() {
return $this->isLeader;
}
public function setLeader($flag) {
$this->isLeader = $flag;
}
public function run() {
$this->register();
while( true ) {
if( $this->isLeader() ) {
$this->doLeaderJob();
}
else {
$this->doWorkerJob();
}
sleep( 2 );
}
}
public function doLeaderJob() {
echo "Leading\n";
}
public function doWorkerJob() {
echo "Working\n";
}
}
$worker = new Worker( '127.0.0.1:2181' );$worker->run();
打開至少3個終端,在每個終端中運行以下腳本:
# term1
$ php worker.php
I'm registred as: w-0000000001Nobody here, I'm the leader
Leading
# term2
$ php worker.php
I'm registred as: w-0000000002I'm watching w-0000000001
Working
# term3
$ php worker.php
I'm registred as: w-0000000003I'm watching w-0000000002
Working
現在模擬Leader崩潰的情形。使用Ctrl+c或其他方法退出第一個腳本。剛開始不會有任何變化,worker可以繼續工作。後來,ZooKeeper會發現超時,並選舉出新的leader。
雖然這些腳本很容易理解,但是還是有必要對已使用的Zookeeper標志作注釋。
$this->znode = $this->create( self::CONTAINER . '/w-', null, $this->acl, Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE );
每個znode都是EPHEMERAL和SEQUENCE的。
EPHEMRAL代表當客戶端失去連接時移除該znode。這就是為何PHP腳本會知道超時。SEQUENCE代表在每個znode名稱後添加順序標識。我們通過這些唯一標識來標記worker。
在PHP部分還有些問題要注意。該擴展目前還是beta版,如果使用不當很容易發生segmentation fault。比如,不能傳入普通函數作為回調函數,傳入的必須為方法。我希望更多PHP社區的同仁可以看到Apache ZooKeeper的好,同時該擴展也會獲得更多的支持。
ZooKeeper是一個強大的軟體,擁有簡潔和簡單的API。由於文檔和示例都做的很好,任何人都可以很容易的編寫分布式軟體。讓我們開始吧,這會很有趣的。
㈦ 伺服器領域講的「高可用」是什麼意思,怎麼理解
高可用(High Availability)是系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。
如果一台系統能夠不間斷的提供服務,那麼這台系統的可用性據說100%。那如果系統每運行100個時間單位,就會出現1個時間單位無法提供服務,那麼該台系統的可用性是99%。
目前大部分企業的高可用目標是4個9,也就是99.99%,也就是允許這台系統的年停機時間為52.56分鍾。
㈧ 伺服器有幾種類型呢
目前按照外形結構劃分,伺服器可分為塔式、機架式、刀片式三種類型。
塔式伺服器
一般的塔式伺服器機箱和我們常用的PC機箱差不多,而大型的塔式機箱就要粗大很多,總的來說外形尺寸沒有固定標准。
機架式伺服器
機架式伺服器是由於滿足企業的密集部署,形成的以19英寸機架作為標准寬度的伺服器類型,高度則從1U到數U。將伺服器放置到機架上,並不僅僅有利於日常的維護及管理,也可能避免意想不到的故障。首先,放置伺服器不佔用過多空間。機架伺服器整齊地排放在機架中,不會浪費空間。其次,連接線等也能夠整齊地收放到機架里。電源線和LAN線等全都能在機櫃中布好線,可以減少堆積在地面上的連接線,從而防止腳踢掉電線等事故的發生。
規定的尺寸是伺服器的寬(48.26cm=19英寸)與高(4.445cm的倍數)。由於寬為19英寸,所以有時也將滿足這一規定的機架稱為「19英寸機架」。
刀片式伺服器
刀片伺服器是一種HAHD(High Availability High Density,高可用高密度)的低成本伺服器平台,是專門為特殊應用行業和高密度計算機環境設計的,其中每一塊「刀片」實際上就是一塊系統母板,類似於一個個獨立的伺服器。在這種模式下,每一個母板運行自己的系統,服務於指定的不同用戶群,相互之間沒有關聯。不過可以使用系統軟體將這些母板集合成一個伺服器集群。在集群模式下,所有的母板可以連接起來提供高速的網路環境,可以共享資源,為相同的用戶群服務。
㈨ zookeeper 集群為什麼是3個以上節點
因為在zookeeper的選舉過程中,為了保證選舉過程最後能選出leader就一定不能出現兩台機器得票相同的僵局,所以一般就會要求zk集群的server數量一定要是奇數,也就是2n+1台。
並且,如果集群出現問題,其中存活的機器必須大於n+1台,否則leader就無法獲得多數server的支持,系統就自動掛掉,所以一般是3個或者3個以上節點。
㈩ 伺服器是做什麼用的,具體有什麼作用,為什麼機房要用伺服器。
伺服器的定義和作用如下:
伺服器是一種高性能計算機,作為網路的節點,存儲、處理網路上80%的數據、信息,因此也被稱為網路的靈魂。
也可以這樣講,伺服器指一個管理資源並為用戶提供服務的計算機軟體,通常分為文件伺服器、資料庫伺服器和應用程序伺服器。運行以上軟體的計算機或計算機系統也被稱為伺服器。
相對於普通PC來說,伺服器在穩定性、安全性、性能等方面都要求更高,因此CPU、晶元組、內存、磁碟系統、網路等硬體和普通計算機有所不同,在質量與處理器數據性能上更出色。
伺服器和電腦功能都是一樣的,我們也可以講伺服器稱之為電腦,只是伺服器對穩定性與安全性以及處理器數據能力有更高要求。
伺服器作用比較廣,網路游戲、網站、部分軟體都是需要存到伺服器的,還有一些企業會配伺服器,他們平時工作上的重要資料都是存在伺服器的硬碟中的。
(10)伺服器高可用為什麼是奇數擴展閱讀:
按照體系架構來區分,伺服器主要分為兩類:
非x86伺服器:包括大型機、小型機和UNIX伺服器,它們是使用RISC(精簡指令集)或EPIC(並行指令代碼) 處理器,並且主要採用UNIX和其它專用操作系統的伺服器。
精簡指令集處理器主要有IBM公司的POWER和PowerPC處理器,SUN與富士通公司合作研發的SPARC處理器、EPIC處理器主要是Intel研發的安騰處理器等。
這種伺服器價格昂貴,體系封閉,但是穩定性好,性能強,主要用在金融、電信等大型企業的核心系統中。
x86伺服器:又稱CISC(復雜指令集)架構伺服器,即通常所講的PC伺服器,它是基於PC機體系結構,使用Intel或其它兼容x86指令集的處理器晶元和Windows操作系統的伺服器。
價格便宜、兼容性好、穩定性較差、安全性不算太高,主要用在中小企業和非關鍵業務中。