博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
corosync+pacemaker+mysql+drbd构建mysql高可用集群
阅读量:7097 次
发布时间:2019-06-28

本文共 10006 字,大约阅读时间需要 33 分钟。

一、构建节点

#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.pu

还要保证时间同步,可以在每个节点执行下面命令:

#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

三、安装配置Pacemakercrmsh

安装 (每个节点分别安装)

crmsh官方网站

crmsh下载地址

#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/drbd/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="ext4op monitor interval=40 timeout=40 op start timeout=60 op stop timeout=60

my_fs#表示资源名称

Inf #表示my_fsms_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.10op 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上访问数据库,可以访问就表示我们测试成功了

本文转自 宋鹏超 51CTO博客,原文链接:http://blog.51cto.com/qidian510/1300235,如需转载请自行联系原作者

你可能感兴趣的文章
基于SSM框架的Excel工具类
查看>>
ConcurrentHashMap总结
查看>>
一对多关联的两张表,确定关联属性
查看>>
小程序开发(4)
查看>>
php语法-----03 php日期和时间相关
查看>>
配置Kubernetes共享使用Ceph存储
查看>>
Oracle USE_LARGE_PAGES初始化参数
查看>>
使用SQLite打开本地*.db文件
查看>>
linux复盘:redis集群配置
查看>>
敏捷开发
查看>>
分布式系统中唯一 ID 的生成方法
查看>>
虚拟机开机提示,内核错误,软锁定
查看>>
项目中官网/准官网地址如何看
查看>>
Hi,我们再来聊一聊Java的单例吧
查看>>
谷歌浏览器请求本地文件--allow-file-access-from-files
查看>>
lvm讲解以及磁盘的小故障
查看>>
vim介绍(下)
查看>>
执行truffle时发生错误
查看>>
设置堆内存大小
查看>>
私服release库和snapshot库的区别
查看>>