一、构建节点
#vim /etc/hosts
保证每个节点都是下面的内容:
172.16.4.5no1.corosql.com no1
172.16.4.6no2.corosql.com no2
配置各个节点对应的主机名:
No1:
#vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=no1.corosql.com
No2:
#vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=no2.corosql.com
配置完成后可以验证一下是否和当前主机名相同
#uname -n
接着建立双机互信
No1:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@no2.cpmysql.com
No2:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
还要保证时间同步,可以在每个节点执行下面命令:
#crontab -e
*/3 * * * * /usr/sbin/ntpdate 172.16.0.1 &> /dev/null
表示每3分钟自动和172.16.0.1主机同步时间
查看时间是否同步(在no1主机上)
#ssh no2 ‘date’;date
二、安装与配置Corosync
crmsh-1.2.6-4.el6.x86_64.rpm ;pssh-2.3.1-2.el6.x86_64.rpm
1、在两个节点都要安装Corosync
#yum install -y corosync
2、配置文件
#cd /etc/corosync
#cp corosync.conf.example corosync.conf
#vim corosync.conf
找到并修改bindnetaddr的值
secauth: on #启用安全认证功能
bindnetaddr: 172.16.0.0 #通过哪个网段进行通信
mcastaddr: 226.94.111.111 #多播地址(实验时相互影响的时候调整)
然后添加下面的内容
service {
ver:0
name:pacemaker
}
aisexec{
user: root
group: root
}
3、生成节点之间通信时用到的密钥
#corosync-keygen
配置两个节点有相同的配置文件和认证秘钥
#scp -p corosync.conf authkey no2:/etc/corosync/
4、每个节点都要创建集群日志以确保corosync的顺利启动
# mkdir /var/log/cluster
5、关闭两个节点的NetworkManager并且禁止自动启动,打开Network
#chkconfig NetworkManager off
#service NetworkManager stop
#service network start
查看是否开启
#chkconfig --list network
三、安装配置Pacemaker,crmsh
安装 (每个节点分别安装)
crmsh官方网站
https://savannah.nongnu.org/forum/forum.php?forum_id=7672
crmsh下载地址
http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/
#yum install -y pacemaker
RHEL自6.4起不再提供集群的命令行配置工具crmsh,转而使用pcs;如果你习惯了使用crm命令,可下载相关的程序包自行安装即可。crmsh依赖于pssh,因此需要一并下载。
# wgetftp://195.220.108.108/linux/opensuse/factory/repo/oss/suse/x86_64/crmsh-1.2.6-0.rc2.1.1.x86_64.rpm
# wget ftp://195.220.108.108/linux/opensuse/factory/repo/oss/suse/noarch/pssh-2.3.1-6.1.noarch.rpm
# yum -y --nogpgcheck localinstall crmsh*.rpm pssh*.rpm
四、启动corosync
# /etc/init.d/corosync start
或者
#service corosync start
启动成功后接着在节点1启动节点2
# ssh no2 "/etc/init.d/corosync start"
查看corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file"/var/log/cluster/corosync.log
查看初始化成员节点通知是否正常发出:
# grep TOTEM /var/log/cluster/corosync.log
检查启动过程中是否有错误产生。下面的错误信息表示packmaker不久之后将不再作为corosync的插件运行,因此,建议使用cman作为集群基础架构服务;此处可安全忽略。
# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
查看pacemaker是否正常启动:
# grep pcmk_startup /var/log/cluster/corosync.log
启动node2上的corosync
# ssh node2 -- /etc/init.d/corosync start
查看node1上的相关日志。
# tail /var/log/cluster/corosync.log
如果安装了crmsh,可使用如下命令查看集群节点的启动状态:
# crm status
执行ps auxf命令可以查看corosync启动的各相关进程。
corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:
# crm_verify -L -V
禁用stonith:
# crm configure property stonith-enabled=false
使用如下命令查看当前的配置信息:
# crm configure show
node no.magedu.com
node no2.magedu.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-enabled="false" #stonith已经被禁用
查看当前集群系统所支持的类型:
# crm ra classes
查看某种类别下的所用资源代理的列表,
# crm ra list lsb
# crm ra list ocf heartbeat
# crm ra list ocf pacemaker
# crm ra list stonith
五、DRBD 安装与配置
1、drbd-8.4.3-33.el6.x86_64.rpm
drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64.rpm
在两个节点分别安装这两个包
# wget ftp://195.220.108.108/linux/atrpms/el6-x86_64/atrpms/stable/drbd-8.4.3-33.el6.x86_64.rpm
# wget ftp://195.220.108.108/linux/atrpms/el6-x86_64/atrpms/stable/drbd-kmdl-2.6.32-358.6.2.el6-8.4.3-33.el6.x86_64.rpm
# rpm -vih drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64.rpm
分别在两个节点创建相同大小为5G的分区(注:分区不要太大)
#fdisk /dev/sda
2、配置
# vim /etc/drbd.d/global_common.conf
**********************************************************************************
global {
usage-count no; #不参加让linbit公司收集目前drbd的使用情况
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
handlers {
# These are EXAMPLE handlers only.
# They may have severe implications,
# like hard resetting the node under certain circumstances.
# Be careful when chosing your poison.
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";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
# wfc-timeout 120;
#degr-wfc-timeout 120;
}
disk {
# fencing resource-only;
on-io-error detach;#用分离同步错误
}
net {
# protocol timeout max-epoch-size max-buffers unplug-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg verify-alg
# use-rle
cram-hmac-alg "sha1"; #设置加密算法sha1
shared-secret "mydrbdlab"; #设置加密key
}
syncer {
rate 1000M; #传输速率
}
}
**********************************************************************************
3、定义一个资源/etc/drbd.d/web.res,内容如下:
resource web {
on no1 {
device /dev/drbd0;
disk /dev/sda3;
address 172.16.4.5:7789;
meta-disk internal;
}
on no2 {
device /dev/drbd0;
disk /dev/sda3;
address 172.16.4.6:7789;
meta-disk internal;
}
}
同步配置的文件至另外一个节点。
#cd /etc/drbd.d/
# scp global_common.confweb.res node2:/etcdrbd.d/
4、分别初始化两个节点已定义的资源
# drbdadm create-md drbd
#ssh drbd2 "drbdadm create-md drbd"
5、分别在两个节点上启动服务:
#service drbd start
查看一下状态
# drbd-overview
# cat /proc/drbd
在要设置为Primary的节点上使用如下命令来设置主节点:
# drbdadm -- --overwrite-data-of-peer primary drbd
# drbdadm primary --force drbd
6、同步完成后,在主节点格式化挂载
#mkdir /mydata
# mke2fs -t ext4 /dev/drbd0
# mount /dev/drbd0 /mydata/
#cd /mydata
# ls
lost+found
7、测试验证一下:
# cp /etc/fstab ./
# vim fstab
做一些操作,我们把下面一行删除
proc /proc proc defaults 0 0
# cd
# umount /mnt
将主节点降级
# drbdadm secondary web
将另外的节点进行升级
# drbdadm primary web
挂载后查看文件是否变化
# mount /dev/drbd0 /mnt
# cd /mnt
# vim fstab
发现我们删除的行不再显示,说明看到的是同一个文件
到这里,drbd配置完成。
六、MySQL 安装与配置
安装Mysql
mysql-5.5.33-linux2.6-x86_64.tar.gz
参考前面博客http://qidian510.blog.51cto.com/7319882/1282064
1、在两个节点上分别操作
安装mysql
#useradd -r -u 335 mysql
#tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/
#cd /usr/local/
#ln -sv mysql-5.5.33-linux2.6-x86_64 mysql
#chown -R root:mysql /usr/local/mysql/*
#cd /mydata/
#mkdir data
#chown -R mysql.mysql /mydata/data/
#cd /usr/localmysql
#scripts/mysql_install_db --user=mysql --datadir=/mytada/data
#cp support-files/mysql.server /etc/rc.d/init.d/mysqld
#chkconfig --add mysqld
#cp support-files/my-large.cnf /etc/my.cnf
2、然后编辑配置文件
找到相关设置进行修改操作
thread_concurrency = 4并发核心数, 如果物理核心为2,这里就可以填写4
datadir = /mydata/data
innodb_file_per_table = 1 每表一个表空间
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
# . /etc/profile.d/mysql.sh
4、启动服务
#service mysqld start
我们配置的主节点在no上,将/dev/drbd1挂载到/mydata/data目录下,连接到mysql查看以前创建的数据存在即可
#mount /dev/drbd0 /mydata/data
停止mysqld并且不让它们开机自动启动
#chkconfig mysqld off
#service mysqld stop
查看默认启动状态
#chkconfig mysqld --list
5、将node2节点上的DRBD设置为主节点并挂载测试
# umount /mydata/
#drbdadm secondary web#将no节点降级
#drbd-overview
#drbdadm primary web#将no2节点升级
#drbd-overview
在no2节点操作
#mount /dev/drbd0 /mydata/
#service mysqld start
查看数据是否完整
将两个节点的mysql和drbd都停掉并设定开机不会自动启动
#service mysqld stop
#chkconfig mysqld off
#chkconfig mysqld --list
#service drbd stop
#chkconfig drbd off
#chkconfig drbd --list
七、实现mysql高可用性
1、首先确保两个节点的corosync开启
#service corosync start
查看状态
#crm status
2、定义集群属性
# crm configure
# property stonith-enabled=false #禁止使用stonith
# property no-quorum-policy=ignore#表示对于只有两节点的集群,失去了quorum后集群服务仍然能够正常运行
# verify #验证是否有错误
# commit #提交定义的内容
3、定义drbd资源
# primitive my_drbd ocf:linbit:drbd params drbd_resource=drbdop monitor role=Master interval=10 timeout=20 op monitor role=Slave interval=20 timeout=20 op start timeout=240 op stop timeout=100
上面定义的资源意义:
drbd_resource #资源名称
Start timeout #启动服务的超时时长
stop timeout#关闭服务的超时时长
# master ms_my_drbd my_drbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="ture"
master#表示定义主资源
ms_my_drbd #主资源的名称
meta #定义额外的属性
master-max #一个集群上最多运行几个主资源
master-node-max#表示一个节点最多运行几个主资源
clone-max#定义一个群集上最多运行几个clone资源
clone-node-max#表示一个节点上最多运行几个clone资源
notify用于定义当出现故障时,是否通知对方,默认就是ture
# verify
# commit
4、测试当节点切换时资源drbd可以实现主从切换(家目录下操作)
# crm node standby #将当前的节点切换成被动节点
# crm node online #让节点上线
# drbd-overview #查看节点以及资源当前的状态
5、定义Filsystem,必须要和drbd的主节点运行在一起,用来挂载数据
# primitive mystore ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mydata" fstype="ext4" op monitor interval=40 timeout=40 op start timeout=60 op stop timeout=60
my_fs#表示资源名称
Inf #表示my_fs和ms_my_drbd在一起的意愿是百分百
Order #定义哪个资源先运行
# colocation mystore_on_ms_my_drbd inf: mystore ms_my_drbd:Master
# order mystore_after_ms_my_drbd mandatory: ms_my_drbd:start mystore:start
#verify
#commit
6、定义IP资源
# primitive my_ip ocf:heartbeat:IPaddr2 params ip="172.16.4.10" op monitor interval=20 timeout=20 on-fail=restart
#verify
7、将MySQL服务定义成资源
# primitive myserver lsb:mysqld op monitor interval=20 timeout=20 on-fail=restart
# colocation myserver_with_mystore_with_my_ip inf:myserver mystore my_ip
# order mystore_before_myserver inf: mystore:start myserver:start
#mystore先于myserver启动
#order myserver_before_my_ip inf: myserver:start my_ip:start
#myserver先于my_ip启动
#verify
#commit
8、定义完成后进行测试
首先连接到mysql进行用户授权
mysql> grant all on *.* to root@"172.16.%.%" identified by "mypass";
mysql> flush privileges;
在另外的主机上进行测试,我们以172.16.4.11为例,先确保安装mysql客户端
#yum -y install mysql
#mysql -uroot -pmypass -h 172.16.4.11
mysql> show databases;
模拟故障(在no节点上):
# crm node standby
从no2上访问数据库,可以访问就表示我们测试成功了