萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> 基於corosync+pacemaker的nginx高可用集群安裝配置

基於corosync+pacemaker的nginx高可用集群安裝配置

   一、corosync、pacemaker介紹

  corosync是用於高可用環境中的提供通訊服務的,它位於高可用集群架構中的底層(Message Layer),扮演著為各節點(node)之間提供心跳信息傳遞這樣的一個角色;

  pacemaker是一個開源的高可用資源管理器(CRM),位於HA集群架構中資源管理、資源代理(RA)這個層次,它不能提供底層心跳信息傳遞的功能,它要想與對方節點通信需要借助底層的心跳傳遞服務,將信息通告給對方。通常它與corosync的結合方式有兩種:

  pacemaker作為corosync的插件運行;

  pacemaker作為獨立的守護進程運行;

  corosync與pacemaker組成的是高可用的容器,需要高可用的服務,可隨時添到容器中,或者從容器中刪除。靈活性很強。

  heartbeat我也用過,請參考:heartbeat mysql雙機互備實現高可用 安裝配置,

  用過corosync與pacemaker後,個人推薦corosync與pacemaker。

  二,服務器說明

  192.168.10.130 虛擬ip

  192.168.10.103 node1

  192.168.10.219 node2

  三,安裝配置corosync,pacemaker,crmsh

  1,node1和node2上安裝

 代碼如下  

# yum install corosync pacemaker python-dateutil redhat-rpm-config pssh  
  
# rpm -ivh http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/crmsh-2.1-1.6.x86_64.rpm 

  2,node1和node2,修改主機名

 代碼如下  

# vim /etc/sysconfig/network  
HOSTNAME=node1   //103機器node1,219機器就是node2  
  
# vim /etc/hosts     //添加以下內容  
192.168.10.103 node1  
192.168.10.219 node2  
  
# /etc/init.d/network restart   //重啟網絡 

  3,node1配置corosync

 代碼如下  

[root@node1 corosync]# cp corosync.conf.example corosync.conf     
  
[root@node1 corosync]# cat /etc/corosync/corosync.conf |awk '{if($0 !~ /^$/ && $0 !~ /#/) {print $0}}'  
compatibility: whitetank //兼容08.以前的版本  
totem { //totem定義集群內各節點間是如何通信的,totem本是一種協議,專用於corosync專用於各節點間的協議,協議是有版本的  
    version: 2 //totme 的版本  
    secauth: off //安全認證是否打開,最好打開  
    threads: 0 //用於安全認證開啟並行線程數  
    interface {  
        ringnumber: 0 //環號碼,如果一個主機有多塊網卡,避免心跳信息回流  
        bindnetaddr: 192.168.10.0 //網絡地址(節點所在的網絡地址段)  
        mcastaddr: 239.255.1.1 //廣播地址(系統自帶的廣播地址,沒作任何修改)  
        mcastport: 5405    //多播占用的端口  
        ttl: 1 //只向外一跳心跳信息,避免組播報文環路  
    }  
}  
  
logging {  
    fileline: off  
    to_stderr: no //日志信息是否發往錯誤輸出(否)  
    to_logfile: yes //是否記錄日志文件  
    to_syslog: yes //是否記錄於syslog日志-->此類日志記錄於/var/log/message中  
    logfile: /var/log/cluster/corosync.log //日志存放位置  
    debug: off //只要不是為了排錯,最好關閉debug,它記錄的信息過於詳細,會占用大量的磁盤IO.  
    timestamp: on //記錄日志的時間戳  
    logger_subsys {  
        subsys: AMF  
        debug: off  
    }  
}  
amf {  
    mode: disabled  
}  
service {  
    ver:0  
    name:pacemaker     //corosync啟動後會自動啟動pacemaker  
}  
aisexec {    //啟用ais功能時以什麼身份來運行,默認為root,aisexec區域也可以不寫  
    user :root  
    group:root  

  4,node1上用corosync-keygen命令來生成密鑰

  [root@node1 corosync]# corosync-keygen //在/etc/corosync目錄下生成一個文件,authkey

  網上查資料時,很多資料都說要,配置各節點ssh互信(就是ssh不要密碼登錄),經證實根本不需要,多此一舉。

  5,將node1上配置文件復制到node2,nodeN上

 代碼如下  

[root@node1 corosync]# scp authkey corosync.conf root@node2:/etc/corosync/  
...  
[root@node1 corosync]# scp authkey corosync.conf root@nodeN:/etc/corosync/   //如果有很多節點都要copy 

  6,node1和node2,啟動並查看

 代碼如下   # chkconfig nginx off      //關閉開機啟動  
# /etc/init.d/nginx stop   //停止nginx,啟動corosync時,會啟動nginx,前提是nginx高可用配置成功後  
  
# /etc/init.d/corosync start  //啟動  
  
# netstat -na |grep 5405    //啟動成功了  
udp 0 0 192.168.10.103:5405 0.0.0.0:*  
udp 0 0 239.255.1.1:5405 0.0.0.0:*   
  
# crm status         //查看節點狀態  

  用crm status查看狀態時,如果報Could not establish cib_ro connection: Connection refused (111) ,說明本節點,連不上其他節點,經個人測試,解決辦法如下:

  1,安全配置有問題,如iptables和selinux,配置成功前最好關閉iptables和selinux

  2,corosync-keygen命令生

copyright © 萬盛學電腦網 all rights reserved