corosync+pacemaker+drbd+mysql

一、环境

系统:CentOS 6.4x64最小化安装

node1    192.168.3.61    node1.test.com

node2    192.168.3.62    node2.test.com

vip     192.168.3.63

二、基础配置

a.配置ssh互信

node1:

[root@node1 ~]# ssh-keygen 
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

node2:

[root@node2 ~]# ssh-keygen 
[root@node2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

b.在node1和node2进行同样的操作,这里只给出node1的操作

配置hosts本地解析

[root@node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.3.61	node1.test.com	node1
192.168.3.62	node2.test.com	node2

关闭防火墙和selinux

[root@node1 ~]# service iptables stop
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@node1 ~]# getenforce
Disabled

安装epel源

[root@node1 ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Retrieving http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
warning: /var/tmp/rpm-tmp.J6fbZA: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
[root@node1 ~]# sed -i ‘s@#b@b@g‘ /etc/yum.repos.d/epel.repo
[root@node1 ~]# sed  -i ‘s@mirrorlist@#mirrorlist@g‘ /etc/yum.repos.d/epel.repo

配置ntp同步

[root@node1 ~]# echo "*/10 * * * * /usr/sbin/ntpdate asia.pool.ntp.org  &>/dev/null" >/var/spool/cron/root
[root@node1 ~]# ntpdate asia.pool.ntp.org
11 Jun 14:42:40 ntpdate[1529]: step time server 120.119.31.1 offset 167.549052 sec
[root@node1 ~]# hwclock -w

三、corosync的安装和配置

a.安装corosync

node1:

[root@node1 ~]# yum install corosync -y

node2:

[root@node2 ~]# yum install corosync -y

b.配置corosync

[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# cp corosync.conf.example corosync.conf
[root@node1 corosync]# egrep -v "^$|^#|^[[:space:]]+#" /etc/corosync/corosync.conf
compatibility: whitetank
totem {
	version: 2
	secauth: on    #开启认证
	threads: 0
	interface {
		ringnumber: 0
		bindnetaddr: 192.168.3.0    #心跳线网段
		mcastaddr: 239.255.11.49    #组播地址
		mcastport: 5405
		ttl: 1
	}
}
logging {
	fileline: off
	to_stderr: no
	to_logfile: yes
	logfile: /var/log/cluster/corosync.log
	to_syslog: no
	debug: off
	timestamp: on
	logger_subsys {
		subsys: AMF
		debug: off
	}
}
	
amf {
	mode: disabled
}
	
service {                    #开始pacemaker
	ver: 0
	name: pacemaker
}
	
aisexec {
	user: root
	group: root	
}

c.配置秘钥文件

[root@node1 corosync]# mv /dev/{random,random.bak}
[root@node1 corosync]# ln -s /dev/urandom /dev/random    #主要作用是缩短key的生成时间

#生成key文件
[root@node1 corosync]# corosync-keygen 
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.
[root@node1 corosync]# ll
total 24
-r-------- 1 root root  128 Jun 11 15:05 authkey        #这是刚生成的key文件
-rw-r--r-- 1 root root 2769 Jun 11 14:59 corosync.conf
-rw-r--r-- 1 root root 2663 Oct 15  2014 corosync.conf.example
-rw-r--r-- 1 root root 1073 Oct 15  2014 corosync.conf.example.udpu
drwxr-xr-x 2 root root 4096 Oct 15  2014 service.d
drwxr-xr-x 2 root root 4096 Oct 15  2014 uidgid.d

d.将node1的配置文件盒key文件复制到node2节点上

[root@node1 corosync]# scp authkey corosync.conf node2:/etc/corosync/
authkey                                                                                       100%  128     0.1KB/s   00:00    
corosync.conf                                                                                 100% 2769     2.7KB/s   00:00

因为我们在corosync配置文件中启动了pacemaker,所有我们要等安装完pacemaker后再启动corosync

四、pacemaker的安装和配置

a.安装pacemaker

node1:

[root@node1 corosync]# yum install pacemaker -y

node2:

[root@node2 ~]# yum install pacemaker -y

b.安装crmsh

node1和node2的操作是一样的

[root@node1 corosync]# wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/RedHat_RHEL-6/x86_64/crmsh-2.1-1.2.x86_64.rpm
[root@node1 corosync]# yum install  python-dateutil python-lxml redhat-rpm-config pssh -y
[root@node1 corosync]# rpm -ivh crmsh-2.1-1.2.x86_64.rpm 
warning: crmsh-2.1-1.2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 17280ddf: NOKEY
Preparing...                ########################################### [100%]
   1:crmsh                  ########################################### [100%]

d.启动corosync

[root@node1 ~]# ssh node2 service corosync start
Starting Corosync Cluster Engine (corosync): [  OK  ]
[root@node1 ~]# service corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]

e.查看启动信息

(1).查看corosync引擎是否正常启动

[root@node1 ~]# egrep "Corosync Cluster Engine|configuration file" /var/log/cluster/corosync.log 
Jun 11 15:23:10 corosync [MAIN  ] Corosync Cluster Engine (‘1.4.7‘): started and ready to provide service.
Jun 11 15:23:10 corosync [MAIN  ] Successfully read main configuration file ‘/etc/corosync/corosync.conf‘.

(2).查看初始化节点成员信息

[root@node1 ~]# grep TOTEM /var/log/cluster/corosync.log 
Jun 11 15:35:57 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Jun 11 15:35:57 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Jun 11 15:35:57 corosync [TOTEM ] The network interface [192.168.3.61] is now up.
Jun 11 15:35:57 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Jun 11 15:35:58 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

(3).检查启动过程中是否有错误产生

[root@node1 ~]# grep ERROR: /var/log/cluster/corosync.log 
Jun 11 15:23:10 corosync [pcmk  ] ERROR: process_ais_conf: You have configured a cluster using the Pacemaker plugin for Corosync. The plugin is not supported in this environment and will be removed very soon.
Jun 11 15:23:10 corosync [pcmk  ] ERROR: process_ais_conf:  Please see Chapter 8 of ‘Clusters from Scratch‘ (http://www.clusterlabs.org/doc) for details on using Pacemaker with CMAN

(4).查看pacemaker是否正常启动

[root@node1 ~]# grep pcmk_startup /var/log/cluster/corosync.log 
Jun 11 15:23:10 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
Jun 11 15:23:10 corosync [pcmk  ] Logging: Initialized pcmk_startup
Jun 11 15:23:10 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Jun 11 15:23:10 corosync [pcmk  ] info: pcmk_startup: Service: 9
Jun 11 15:23:10 corosync [pcmk  ] info: pcmk_startup: Local hostname: node1.test.com

(5).查看集群状态

[root@node1 ~]# crm status
Last updated: Thu Jun 11 15:36:15 2015
Last change: Thu Jun 11 15:36:09 2015
Stack: classic openais (with plugin)
Current DC: node2.test.com - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
0 Resources configured


Online: [ node1.test.com node2.test.com ]

从结果能看出node1和node2都在线

五、安装DRBD

这里使用编译安装的方式进行安装,node1和node2的操作一样

DRBD的编译安装需要安装kernel-devel,kernel-heaeds这2个rpm包,且版本要和uname -r保持一致,我们从系统光盘中提取出这2个包,DRBD的下载地址http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz

a.安装DRBD

[root@node1 ~]# uname -r
2.6.32-358.el6.x86_64
[root@node1 ~]# ll |grep rpm
-r--r--r--  1 root root 8548160 Jun 11 15:44 kernel-devel-2.6.32-358.el6.x86_64.rpm
-r--r--r--  1 root root 2426756 Jun 11 15:44 kernel-headers-2.6.32-358.el6.x86_64.rpm
[root@node1 ~]# rpm -ivh kernel-devel-2.6.32-358.el6.x86_64.rpm kernel-headers-2.6.32-358.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:kernel-headers         ########################################### [ 50%]
   2:kernel-devel           ########################################### [100%]

[root@node1 ~]# yum install gcc make flex -y
[root@node1 ~]# tar xf drbd-8.4.4.tar.gz && cd drbd-8.4.4
[root@node1 drbd-8.4.4]# ./configure --prefix=/usr/local/drbd --with-km --with-pacemaker --with-heartbeat 
[root@node1 drbd-8.4.4]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
[root@node1 drbd-8.4.4]# make install
[root@node1 drbd-8.4.4]# mkdir -p /usr/local/drbd/var/run/drbd 
[root@node1 drbd-8.4.4]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/
[root@node1 drbd-8.4.4]# chkconfig --add drbd
[root@node1 drbd-8.4.4]# chkconfig drbd off

#安装DRBD模块
[root@node1 drbd-8.4.4]# cd drbd
[root@node1 drbd]# make clean
rm -rf .tmp_versions Module.markers Module.symvers modules.order
rm -f *.[oas] *.ko .*.cmd .*.d .*.tmp *.mod.c .*.flags .depend .kernel*
rm -f compat/*.[oas] compat/.*.cmd
[root@node1 drbd]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
[root@node1 drbd]# cp drbd.ko /lib/modules/2.6.32-358.el6.x86_64/kernel/lib/
[root@node1 drbd]# depmod 
[root@node1 drbd]# modprobe drbd
[root@node1 drbd]# lsmod |grep drbd
drbd                  340519  0 
libcrc32c               1246  1 drbd

b.配置DRBD

[root@node1 ~]# egrep -v "^$|^#|^[[:space:]]+#" /usr/local/drbd/etc/drbd.d/global_common.conf 
global {
	usage-count no;
}
common {
	protocol C;
	handlers {
		pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
		pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
		local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
	}
	startup {
	}
	options {
	}
	disk {
		on-io-error detach;
		rate 200M;
		no-disk-flushes;
		no-md-flushed;
	}
	net {
		cram-hmac-alg "sha1";
		shared-secret  "123456";
		sndbuf-size 512k;
    	max-buffers     8000;
    	unplug-watermark   1024;
    	max-epoch-size  8000;
		after-sb-0pri disconnect;
    	after-sb-1pri disconnect;
    	after-sb-2pri disconnect;
    	rr-conflict disconnect;
	}
}

c.node1和node2的/dev/sdb拆分成2部分,/dev/sdb1=48G,/dev/sdb2=剩余空间,并格式化成ext4文件系统

node1:

[root@node1 ~]# fdisk -l |grep /dev/sdb
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
/dev/sdb1               1        6267    50339646   83  Linux    #大小48G
/dev/sdb2            6268        6527     2088450   83  Linux    #大小是剩余的空间,用来存放meta数据
[root@node1 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3147760 inodes, 12584911 blocks
629245 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
385 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@node1 ~]# tune2fs -c -1 /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1

node2:

[root@node2 drbd]# fdisk -l |grep dev/sdb
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
/dev/sdb1               1        6267    50339646   83  Linux
/dev/sdb2            6268        6527     2088450   83  Linux
[root@node2 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3147760 inodes, 12584911 blocks
629245 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
385 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@node2 ~]# tune2fs -c -1 /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1

d.增加资源

[root@node1 ~]# cat  /usr/local/drbd/etc/drbd.d/web.res
resource web {
	on node1.test.com {
		device /dev/drbd1;
		disk	/dev/sdb1;
		address	192.168.3.61:7789;
		meta-disk /dev/sdb2 [0];
	}
	on node2.test.com {
		device /dev/drbd1;
		disk	/dev/sdb1;
		address	192.168.3.62:7789;
		meta-disk /dev/sdb2 [0];
	}
}

e.将配置文件和资源复制到node2上

[root@node1 ~]# cd /usr/local/drbd/etc/drbd.d/
[root@node1 drbd.d]# scp global_common.conf web.res node2:/usr/local/drbd/etc/drbd.d/
global_common.conf                                                                                                                            100% 2542     2.5KB/s   00:00    
web.res                                                                                                                                       100%  255     0.3KB/s   00:00

f.在node1和node2上初始化DRBD资源

node1:

[root@node1 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.

node2:

[root@node2 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.

g.启动DRBD

node1:

[root@node1 ~]# /etc/init.d/drbd start
Starting DRBD resources: [
     create res: web
   prepare disk: web
    adjust disk: web
     adjust net: web
]

node2:

[root@node2 ~]# /etc/init.d/drbd start
Starting DRBD resources: [
     create res: web
   prepare disk: web
    adjust disk: web
     adjust net: web
]

h.查看DRBD状态

[root@node1 ~]# ln -s /usr/local/drbd/sbin/* /usr/bin/
[root@node1 ~]# drbd-overview 
  1:web/0  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

i.设置node1为主节点

[root@node1 ~]# drbdadm -- --overwrite-data-of-peer primary web
[root@node1 ~]# drbd-overview 
  1:web/0  SyncSource Primary/Secondary UpToDate/Inconsistent C r---n- 
	[>....................] sync‘ed:  0.9% (48744/49156)M
	
#将DRBD设备挂载到/mnt下,写入一个测试数据
[root@node1 ~]# mount /dev/drbd1 /mnt
[root@node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              18G  1.7G   16G  10% /
tmpfs                 495M   22M  473M   5% /dev/shm
/dev/sda1             194M   28M  156M  16% /boot
/dev/sr0               48G  180M   45G   1% /mnt
/dev/drbd1             48G  180M   45G   1% /mnt
[root@node1 ~]# touch /mnt/test.txt
[root@node1 ~]# ll /mnt/
total 16
drwx------ 2 root root 16384 Jun 11 16:26 lost+found
-rw-r--r-- 1 root root     0 Jun 11 16:45 test.txt
[root@node1 ~]# umount /mnt

#通过命令能看到DRBD正在同步
[root@node1 ~]# drbd-overview 
  1:web/0  SyncSource Primary/Secondary UpToDate/Inconsistent C r----- 
	[====>...............] sync‘ed: 27.2% (35808/49156)M
	
#同步完成
[root@node1 ~]# drbd-overview 
  1:web/0  Connected Primary/Secondary UpToDate/UpToDate C r----- 
  
#在node2上挂载/dev/sdb1,查看数据是否同步
[root@node2 ~]# drbdadm down web
[root@node2 ~]# mount /dev/sdb1 /mnt
[root@node2 ~]# ll /mnt
total 16
drwx------ 2 root root 16384 Jun 11 16:26 lost+found
-rw-r--r-- 1 root root     0 Jun 11 16:45 test.txt            #数据已同步过来
[root@node2 ~]# umount /mnt
[root@node2 ~]# drbdadm up web

六.mysql安装和配置

node1:

#安装基础软件包
[root@node1 ~]# yum -y install make gcc-c++ cmake bison-devel  ncurses-devel

#创建用户
[root@node1 ~]# groupadd mysql
[root@node1 ~]# useradd -g mysql mysql -s /sbin/nologin

#解压软件包,这里我们是事先下载好的mysql-5.5.37.tar.gz
[root@node1 ~]# tar xf mysql-5.5.37.tar.gz 

#创建用来存放Mysql数据的目录,因为我们这里使用DRBD做高可用,所以我们的目录应该创建在DRBD设备上
[root@node1 ~]# mkdir /data
[root@node1 ~]# mount /dev/drbd1 /data/
[root@node1 ~]# mkdir -p /data/mysql/data        #将数据目录创建在DRBD设备上

#安装mysql
[root@node1 mysql-5.5.37]# cmake > -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.37 > -DMYSQL_DATADIR=/data/mysql/data > -DSYSCONFDIR=/etc > -DWITH_MYISAM_STORAGE_ENGINE=1 > -DWITH_INNOBASE_STORAGE_ENGINE=1 > -DWITH_MEMORY_STORAGE_ENGINE=1 > -DWITH_READLINE=1 > -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock > -DMYSQL_TCP_PORT=3306 > -DENABLED_LOCAL_INFILE=1 > -DWITH_PARTITION_STORAGE_ENGINE=1 > -DEXTRA_CHARSETS=all > -DDEFAULT_CHARSET=utf8 > -DDEFAULT_COLLATION=utf8_general_ci
[root@node1 mysql-5.5.37]# make && make install

#数据目录初始化
[root@node1 mysql-5.5.37]# scripts/mysql_install_db --datadir=/data/mysql/data/ --user=mysql --basedir=/usr/local/mysql-5.5.37/

#复制mysql配置文件
[root@node1 mysql-5.5.37]# cp -rf support-files/my-large.cnf /etc/my.cnf


本文出自 “ly36843运维” 博客,请务必保留此出处http://ly36843.blog.51cto.com/3120113/1660835

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。