corosync+pacemaker+drbd+mysql配置安裝詳解

一, 

基本環境介紹及基本環境配置

節點1: node1.hulala.com      192.168.1.35     centos6.5_64    添加8G新硬盤

節點2: node1.hulala.com      192.168.1.36     centos6.5_64    添加8G新硬盤

vip   192.168.1.39   

節點1與節點2均需配置

修改主機名:

vim /etc/sysconfig/network

HOSTNAME=node1.hulala.com

配置hosts解析:

vim /etc/hosts

192.168.1.35    node1.hulala.com node1 

192.168.1.36    node2.hulala.com node1      

同步系統時間:

ntpdate cn.pool.ntp.org

關閉防火墻與SELINUX

service iptables stop

chkconfig iptables off

cat /etc/sysconfig/selinux

SELINUX=disabled

以上配置在兩個節點都需要配置,配置完成之后重啟兩個節點

二:

配置ssh互信

[root@node1~]#ssh-keygen -t rsa -b 1024

[root@node1~]#ssh-copy-id root@192.168.1.36

[root@node2~]#ssh-keygen -t rsa -b 1024

[root@node2~]#ssh-copy-id root@192.168.1.35

三:DRBD的安裝與配置(node1和node2執行相同操作)

[root@node1~]#wget -c http://elrepo.org/linux/elrepo/el6/x86_64/RPMS/drbd84-utils-8.4.2-1.el6.elrepo.x86_64.rpm

[root@node1~]#wget -c http://elrepo.org/linux/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.2-1.el6_3.elrepo.x86_64.rpm

[root@node1~]#rpm -ivh *.rpm

獲取一個sha1值做為shared-secret

[root@node1~]#sha1sum /etc/drbd.conf

8a6c5f3c21b84c66049456d34b4c4980468bcfb3  /etc/drbd.conf

創建并編輯資源配置文件:/etc/drbd.d/dbcluster.res

[root@node1~]# vim /etc/drbd.d/dbcluster.res

resource dbcluster {

    protocol C;

    net {

        cram-hmac-alg sha1;

        shared-secret "8a6c5f3c21b84c66049456d34b4c4980468bcfb3";

        after-sb-0pri discard-zero-changes;

after-sb-1pri discard-secondary;

        after-sb-2pri disconnect;

        rr-conflict disconnect;

    }

    device    /dev/drbd0;

    disk      /dev/sdb1;

meta-disk internal;

    on node1.hulala.com {

        address   192.168.1.35:7789;

    }

    on node2.hulala.com {

        address   192.168.1.36:7789;

    }

}

以上配置所用參數說明:

RESOURCE: 資源名稱

PROTOCOL: 使用協議”C”表示”同步的”,即收到遠程的寫入確認之后,則認為寫入完成.

NET: 兩個節點的SHA1 key是一樣的

after-sb-0pri : “Split Brain”發生時且沒有數據變更,兩節點之間正常連接

after-sb-1pri : 如果有數據變更,則放棄輔設備數據,并且從主設備同步

rr-conflict: 假如前面的設置不能應用,并且drbd系統有角色沖突的話,系統自動斷開節點間連接

META-DISK: Meta data保存在同一個磁盤(sdb1)

ON <NODE>: 組成集群的節點

將DRBD配置拷貝到node機器:

[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/

創建資源及文件系統:

創建分區(未格式化過)

在node1和node2上創建LVM分區:

[root@node1~]#fdisk /dev/sdb

在node1和node2上給資源(dbcluster)創建meta data:

[root@node1~drbd]#drbdadm create-md dbcluster

激活資源(node1和node2都得查看)

– 首先確保drbd module已經加載

查看是否加載:

# lsmod | grep drbd

若未加載,則需加載:

# modprobe drbd

# lsmod | grep drbd

drbd                  317261  0 

libcrc32c               1246  1 drbd

– 啟動drbd后臺進程:

[root@node1 drbd]# drbdadm up dbcluster

[root@node2 drbd]# drbdadm up dbcluster

查看(node1和node2)drbd狀態:

[root@node2 drbd]# /etc/init.d/drbd status

GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10

m:res        cs         ro                   ds                         p  mounted  fstype

0:dbcluster  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

從上面的信息可以看到,DRBD服務已經在兩臺機器上運行,但任何一臺機器都不是主機器(“primary” host),因此無法訪問到資源(block device).

開始同步:

僅在主節點操作(這里為node1)

[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster

查看同步狀態:

[root@node1 drbd.d]# cat /proc/drbd 

version: 8.4.2 (api:1/proto:86-101)

GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—–

 ns:8297248 nr:0 dw:0 dr:8297912 al:0 bm:507 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

上面的輸出結果的一些說明:

cs (connection state): 網絡連接狀態

ro (roles): 節點的角色(本節點的角色首先顯示)

ds (disk states):硬盤的狀態

復制協議: A, B or C(本配置是C)

看到drbd狀態為”cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate”即表示同步結束.

也可以這樣查看drbd狀態:

[root@centos193 drbd]# drbd-overview 

  0:dbcluster/0  Connected Secondary/Primary UpToDate/UpToDate C r—–

創建文件系統:

在主節點(Node1)創建文件系統:

[root@node1 drbd]# mkfs -t ext4 /dev/drbd0

mke2fs 1.41.12 (17-May-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

…….

180 days, whichever comes first.  Use tune2fs -c or -i to override.

注:沒必要在輔節點(Node2)做同樣的操作,因為DRBD會處理原始磁盤數據的同步.

另外,我們也不需要將這個DRBD系統掛載到任何一臺機器(當然安裝MySQL的時候需要臨時掛載來安裝MySQL),因為集群管理軟件會處理.還有要確保復制的文件系統僅僅掛載在Active的主服務器上.

三:mysql的安裝

1,在node1和node2節點安裝mysql:

yum install mysql* -y

2.node1和node2都操作停止mysql服務

[root@node1~]# service mysql stop

Shutting down MySQL.        [  OK  ]

3.node1和node2都操作創建數據庫目錄并將該目錄權限屬主修改為mysql

[root@host1 /]# mkdir -p /mysql/data

[root@host1 /]# chown -R mysql:mysql /mysql

4,關閉mysql臨時掛載DRBD文件系統到主節點(Node1):

[root@node1 ~]# mount /dev/drbd0  /mysql/

5.node1和node2都操作修改my.cnf文件修改

在[mysqld]下添加新的數據存放路徑

datadir=/mysql/data

7.將默認的數據路徑下的所有文件和目錄cp到新的目錄下(node2不用操作)

[root@host1 mysql]#cd /var/lib/mysql

[root@host1 mysql]#cp -R * /mysql/data/

node1和node2都操作這里注意copy過去的目錄權限屬主需要修改為mysql,這里直接修改mysql目錄即可.

[root@host1 mysql]# chown -R mysql:mysql /mysql

8.啟動node1上的mysql進行登陸測試

[root@host1 mysql]# mysql 

9.在節點Node1卸載DRBD文件系統

[root@node1 ~]# umount /var/lib/mysql_drbd

[root@node1 ~]# drbdadm secondary dbcluster

將DRBD文件系統掛載節點Node2

[root@node2 ~]# drbdadm primary dbcluster

[root@node2 ~]# mount /dev/drbd0 /mysql/

節點Node2上配置MySQL并測試

[root@node1 ~]# scp node2:/etc/my.cnf /etc/my.cnf

[root@node2 ~]# chown mysql /etc/my.cnf

[root@node2 ~]# chmod 644 /etc/my.cnf 

10. node2上做mysql登陸測試

[root@node2 ~]# mysql

11.在Node2上卸載DRBD文件系統,交由集群管理軟件Pacemaker來管理

[root@node2~]# umount /var/lib/mysql_drbd

[root@node2~]# drbdadm secondary dbcluster

[root@node2~]# drbd-overview 

  0:dbcluster/0  Connected Secondary/Secondary UpToDate/UpToDate C r—– 

[root@node2~]#

四:Corosync和Pacemaker的安裝配置(node1和node2都需安裝)

安裝Pacemaker必須依賴:

[root@node1~]#yum -y install automake autoconf libtool-ltdl-devel pkgconfig python glib2-devel libxml2-devel libxslt-devel python-devel gcc-c++ bzip2-devel gnutls-devel pam-devel libqb-devel

安裝Cluster Stack依賴:

[root@node1~]yum -y install clusterlib-devel corosynclib-devel

安裝Pacemaker可選依賴:

[root@node1~]yum -y install ncurses-devel openssl-devel cluster-glue-libs-devel docbook-style-xsl

Pacemaker安裝:

[root@node1~]yum -y install pacemaker

crmsh安裝:

[root@node1~]wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo

[root@node1~]yum -y install crmsh

1,配置corosync

Corosync Key

– 生成節點間安全通信的key:

[root@node1~]# corosync-keygen

– 將authkey拷貝到node2節點(保持authkey的權限為400):

[root@node~]# scp /etc/corosync/authkey node2:/etc/corosync/

2,[root@node1~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

編輯/etc/corosync/corosync.conf:

# Please read the corosync.conf.5 manual page

compatibility: whitetank

aisexec { 

        user: root 

        group: root 

totem {

        version: 2

secauth: off

threads: 0

interface {

ringnumber: 0

bindnetaddr: 192.168.1.0

mcastaddr: 226.94.1.1

mcastport: 4000

ttl: 1

}

}

logging {

fileline: off

to_stderr: no

to_logfile: yes

to_syslog: yes

logfile: /var/log/cluster/corosync.log

debug: off

timestamp: on

logger_subsys {

subsys: AMF

debug: off

}

}

amf {

mode: disabled

}

– 創建并編輯/etc/corosync/service.d/pcmk,添加”pacemaker”服務

[root@node1~]# cat /etc/corosync/service.d/pcmk 

service {

# Load the Pacemaker Cluster Resource Manager

name: pacemaker

ver: 1

}

將上面兩個配置文件拷貝到另一節點

[root@node1]# scp /etc/corosync/corosync.conf node2:/etc/corosync/corosync.conf

[root@node1]# scp /etc/corosync/service.d/pcmk node2:/etc/corosync/service.d/pcmk

3,啟動corosync和Pacemaker

 分別在兩個節點上啟動corosync并檢查.

[root@node1]# /etc/init.d/corosync start

Starting Corosync Cluster Engine (corosync):               [  OK  ]

[root@node1~]# corosync-cfgtool -s

Printing ring status.

Local node ID -1123964736

RING ID 0

id = 192.168.1.189

status = ring 0 active with no faults

[root@node2]# /etc/init.d/corosync start

Starting Corosync Cluster Engine (corosync):               [  OK  ]

– 在兩節點上分別啟動Pacemaker:

[root@node1~]# /etc/init.d/pacemaker start

Starting Pacemaker Cluster Manager:                        [  OK  ]

[root@node2~]# /etc/init.d/pacemaker start

Starting Pacemaker Cluster Manager:  

資源配置

配置資源及約束                  

配置默認屬性

查看已存在的配置:

[root@node1 ~]# crm configure show

node node1.hulala.com

node node2.hulala.com

property $id="cib-bootstrap-options" dc-version="1.1.8-7.el6-394e906" cluster-infrastructure="classic openais (with plugin)" expected-quorum-votes="2"

禁止STONITH錯誤:

[root@node1 ~]# crm configure property stonith-enabled=false

[root@node1 ~]# crm_verify -L

讓集群忽略Quorum:

[root@node1~]# crm configure property no-quorum-policy=ignore

防止資源在恢復之后移動:

[root@node1~]# crm configure rsc_defaults resource-stickiness=100

設置操作的默認超時:

[root@node1~]# crm configure property default-action-timeout="180s"

設置默認的啟動失敗是否為致命的:

[root@node1~]# crm configure property start-failure-is-fatal="false"

配置DRBD資源

– 配置之前先停止DRBD:

[root@node1~]# /etc/init.d/drbd stop

[root@node1~]# /etc/init.d/drbd stop

– 配置DRBD資源:

[root@node1~]# crm configure

crm(live)configure# primitive p_drbd_mysql ocf:linbit:drbd params drbd_resource="dbcluster" op monitor interval="15s" op start timeout="240s" op stop timeout="100s"

– 配置DRBD資源主從關系(定義只有一個Master節點):

crm(live)configure# ms ms_drbd_mysql p_drbd_mysql meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"

– 配置文件系統資源,定義掛載點(mount point):

crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"

配置VIP資源

crm(live)configure# primitive p_ip_mysql ocf:heartbeat:IPaddr2 params ip="192.168.1.39" cidr_netmask="24" op monitor interval="30s"

配置MySQL資源

crm(live)configure# primitive p_mysql lsb:mysql op monitor interval="20s" timeout="30s" op start interval="0" timeout="180s" op stop interval="0" timeout="240s"

組資源和約束

通過”組”確保DRBD,MySQL和VIP是在同一個節點(Master)并且確定資源的啟動/停止順序.

啟動: p_fs_mysql–>p_ip_mysql->p_mysql

停止: p_mysql–>p_ip_mysql–>p_fs_mysql

crm(live)configure# group g_mysql p_fs_mysql p_ip_mysql p_mysql

組group_mysql永遠只在Master節點:

crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master

MySQL的啟動永遠是在DRBD Master之后:

crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start

配置檢查和提交

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# quit

查看集群狀態和failover測試

狀態查看:

[root@node1 mysql]# crm_mon -1r

Failover測試:

將Node1設置為Standby狀態

[root@node1 ~]# crm node standby

過幾分鐘查看集群狀態(若切換成功,則看到如下狀態):

[root@node1 ~]# crm status

將Node1恢復online狀態:

[root@node1 mysql]# crm node online

[root@node1 mysql]# crm status

原創文章,作者:eryang,如若轉載,請注明出處:http://www.www58058.com/16032

(0)
eryangeryang
上一篇 2016-05-07
下一篇 2016-05-09

相關推薦

  • linux基礎(第二天)

    一、終端:ternimal     COMMAND:tty     串行終端:/dev/ttyS#      物理終端:/dev/console 鍵盤顯示器 單一用戶     虛擬終端:/d…

    Linux干貨 2016-07-26
  • 馬哥教育網絡班21期+第6周課程練習

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@centos ~]# cp /etc/rc.d/rc.sysinit /tmp/ [root@centos&nbs…

    Linux干貨 2016-07-27
  • LAMP的編譯安裝

    一、編譯安裝amp: (1)系統環境:centos6,7 httpd依賴于apr和apr-util appache protable runtime (2)開發環境: Development Tools,Server Platform Development (3)各程序的版本: httpd:2.2,2.4 php:5.x mysql:5.1,5.5,5.6…

    Linux干貨 2016-10-17
  • shell腳本小練習..

    剛剛接觸vim和shell腳本,用幾個小腳本練練手。 1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中。 3、編寫腳本…

    2017-04-13
  • keepalived+lvs 實現站點高可用

    lvs實現負載均衡
    keepalived 解決 director單點和realserver監控檢測

    2017-12-13
  • netstat

    netstat命令 netstat 命令用于顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等 1 常用選項: -a :(all)顯示所有選項,默認不顯示LISTEN相關 -t :(tcp)僅顯示tcp相關選項 -u :(…

    Linux干貨 2017-05-07
欧美性久久久久