博彩网站
 
当前位置: 首页 > 科技

博彩网站:Corosync+Pacemaker+DRBD实现高可用 Mariadb

时间:2017年11月11日 08:20   浏览:156   来源:博彩网站


原标题:Corosync+Pacemaker+DRBD实现高可用 Mariadb

一、DRBD简介

DRBD全称Distributed Replicated Block (分布式的复制块设备),开源项目。它是一款基于块设备的文件复制解决方案,速度比文件级别的软件如NFS,samba快很多,而且不会出现单点故障,是很多中小企业的共享存储首选解决方案。

二、DRBD的工作模式

从上图中我们可以清楚的看到DRBD是工作在内核中,将协议建立在buffer cache(内核缓存)与Disk scheduler(磁盘调度器)之间,将上下文传输的二进制数据复制一份,通过tcp/ip协议封装后由网卡发送至另一台DRBD节点上进行数据同步的。

DRBD可以工作在主备(一个节点运行,另一个节点备份)模式,也可以工作在双主(上个节点同时运行)模式,在双主模式下要求必须建立在高可用集群的基础上工作。实现DRBD的必要条件是多个节点上必须准备相同大小相同名称的磁盘或分区。

三、搭建DRBD主备模型

1.准备环境

1).系统centos6.8;内核2.6.32-504.el6.x86_64

2).两个节点

node1:192.168.1.35

node2:192.168.1.47

3).两个磁盘分区

/dev/sda3 大小5G

4).时间同步

crontab -e */3 * * * * /usr/sbin/ntpdate 202.120.2.101 &> /dev/null

5).基于密钥互访

ssh-keygen -t rsa -f /root/.ssh/id_rsa -P '' ssh-copy-id -i /root/.ssh/id_rsa.pub root@IP

2.安装程序包

对应自己系统内核版本的软件包,下载至本地目录:

drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm;

kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm # rpm -ivh drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm 3.配置文件

drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d/目录中,主配置文件中仅使用”include”指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。

# vim /etc/drbd.d/global-common.confglobal { usage-count no; 关闭在线帮助 # minor-count dialog-refresh disable-ip-verification}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"; # 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 { on-io-error detach; 磁盘错误处理机制 #fencing resource-only; } net { cram-hmac-alg "sha1"; 数据加密算法 shared-secret "mydrbdlab"; } syncer {

rate 500M; 传输速率限制

}}resource mystore { device /dev/drbd0; disk /dev/sda3; meta-disk internal; on node1 { address 192.168.1.35:7789; } on node2 { address 192.168.1.47:7789; }}

4.启动服务

# scp -r /etc/drbd.d/* node2:/etc/drbd.d/ 配置文件复制给node2 # drbdadm create-md data 初始化资源(在两节点上分别进行) initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created.# service drbd start; ssh node2 'service drbd start' 两节点同时启动服务 # drbd-overview 查看服务状态(# cat /proc/drbd 也可以实现) Secondary/Secondary (两节点为备)# drbdadm primary --force mystore 将当前节点设置为主节点# drbd-overview Primary/Secondary (当前节点节点1为主,节点2为备) 5.挂载文件系统

文件系统的挂载只能在Primary节点进行,只有在设置了主节点后才能对drbd设备进行格式化, 格式化与手动挂载测试。

# mke2fs -t ext4 -L DRBD /dev/drbd0 初始化# mount /dev/drbd0 /mnt/drbd

6.测试

[[node1]]# touch /mnt/{a,b}# umount /mnt# drbdadm secondary web 将node1设为备用节点[[node2]]# mount /dev/drbd0 /mnt# drbdadm primary web

# drbd-overview

# ls /mnt/drbd 查看目录下有没有a,b文件,有的话表示成功 7.停止brbd服务# service drbd stop (node1&2)# chkconfig drbd off (node1&2)

四、安装配置corosync+pacemaker+crmsh

1、安装corosync+pacemaker

# yum install corosync pacemaker -y# rpm -ql corosync# cd /etc/corosync# cp corosync.conf.example corosync.conf# vim corosync.confcompatibility withetank 兼容性选项 toten { secauth:on 安全认证功能开启 threads:0 多线程 interface{ ringnumber:0 心跳回传功能,一般不需要 bindnetaddr:192.168.1.0 网络地址 mcastaddr:239.165.17.13 多播地址 mcastport: 5405 多播端口 ttl:1 }}loggging { fileline:off to_stderr:no 日志是否发往标准错误输出 to_logfile:yes logfile:/var/log/cluster/corosync.log to_syslog:no debug:off timestamp:on 日志记录时间戳 logger_subsys { subsys:AME debug:off }} service { 将pacemaker用作corosync的插件来运行 ver: 0 name: pacemaker # use_mgmtd: yes}aisexec { user: root group: root} # corosync-keygen 会生成密码文件authkey# scp -p authkey corosync.conf node2:/etc/corosync# service corosync start; ssh node2 'service corosync start' # ss -tunl :5540# tail -f /var/log/cluster/sorosync.log# grep pcmk_startup /var/log/cluster/corosync.log 查看pacemaker是否正常启动 2、安装crmsh # rpm -ivh crmsh-2.1-1.6.x86_64.rpm pssh-2.3.1-2.e16.x86_64.rpm python-pssh-2.3.1-4.2.x86_64.rpm warning: pssh-2.3.1-4.2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 17280ddf: NOKEY Preparing... ########################################### [100%] 1:python-pssh ########################################### [ 33%] 2:pssh ########################################### [ 67%] 3:crmsh ########################################### [100%] # crm status 查看集群状态

3、corosync默认启用了stonith功能,而我们要配置的集群并没有stonith设备,因此在配置集群的全局属性时要对其禁用。

# crm crm(live)# configure 进入配置模式 crm(live)configure# property stonith-enabled=false 禁用stonith设备 crm(live)configure# property no-quorum-policy=ignore 不具备法定票数时采取的动作 crm(live)configure# rsc_defaults resource-stickiness=100 设置默认的资源黏性,只对当前节点有效。 crm(live)configure# verify 校验 crm(live)configure# commit 校验没有错误再提交 crm(live)configure# show 查看当前配置 五、[[ node1 ]] 把drbd设为主从资源# crm crm(live)# configure crm(live)configure# pimitive mystor ocf:linbit:drbd params drbd_resource="mystore" op monitor role="Master" interval=20s timeout=20s monitor role="Slave" interval=20s timeout=20s op start timeout=240s op stop timeout=100s crm(live)configure# verity crm(live)configure# ms ms_mystor mystor meta clone-max="2" clone-node-max="1" master-max="1" master-node-max="1" notify="ture" clone-max="2" :克隆资源克隆几份 clone-node-max="1" :每个节点运行几个克隆资源 master-max="1" :宕启动或停止1份克隆资源是是否通知给其他克隆资源 master-node-max="1" :主从资源中最多有几个主资源 notify="ture":每个节点能运行几个主资源 crm(live)configure# verity crm(live)configure# commit 提交 crm(live)configure# cd crm(live)# status Stack: classic openais (with plugin) Current DC: node1 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured, 2 expected votes 2 Resources configured Online: [ node1 node2 ] Master/Slave Set: ms_mydrbd [mydrbd] Masters: [ node1 ] Slaves: [ node2 ] Note:切换测试时有时会出现警告提示,影响真实状态查看,提示哪个资源报警就清哪个(resource cleanup+资源名),清理后,再次crm status查看状态显示正常[[ node1&2 ]]# mkdir /mydata [[ node1 ]]--文件系统挂载资源# crm crm(live)# configure crm(live)configure# primitive mydata ocf:heartbeat:Filesystem device=/dev/drbd0 directory=/mydata fstype=ext4 op monitor interval=20s timeout=40s op start timeout=60s op stop timeout=60s crm(live)configure# verify[[ node1 ]]--定义约束# crm crm(live)# cofigure crm(live)configure# colocation mydata_with_ms_mystor_master inf: mydata ms_mystor:Master 排列约束:mydata存储挂载要与drbd主节点在一起 crm(live)configure# order mydata_after_ms_mystor_master Mandatory: ms_mystor:promode mydata:start 顺序约束:强制限定drbd的主资源提升完成之后mydata才能启动 crm(live)configure# verity crm(live)configure# commit crm(live)configure# cd crm(live)# status Stack: classic openais (with plugin) Current DC: node1 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured, 2 expected votes 3 Resources configured Online: [ node1 node2 ] Master/Slave Set: ms_mydrbd [mydrbd] Masters: [ node1 ] Slaves: [ node2 ] # mount /dev/drbd0 on /mydata type ext4 (rw)六、构建mariadb集群--(在主节点配置)[[ node1 ]]# tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local

Note:在进行接下来操作前要确保两个节点都有mysql用户,切id相同

[[ node1&node2 ]]# groupadd -r -g 306 mysql# useradd -r -g 306 -u 306 mysql[[ node1 ]]# cd /usr/local/# mount# mkdir /mydata/data/# chown -R mysql.mysql /mydata/data/ 修改属主属组# ll /mydata/# ln -sv mariadb-5.5.43-linux-x86_64/ mysql# cd mysql/# chown -R root.mysql ./*# ll# s/mysql_install_db --user=mysql --datadir=/mydata/data 初始化# ls /mydata/data 验证# cp support-file/mysql.server /etc/rc.d/init.d/mysqld# chkconfig --add mysqld 添加mysqld服务# chkconfig mysqld off 确保mysqld不能开机自启动# mkdir /etc/mysql# cp support-files/my-large.cnf /etc/mysql/my.cnf # vim /etc/mysql/my.cnf thread_concurrency = 8 datadir = /mydata/data innodb_file_per_table = on skip_name_resolve = on# service mysqld start# /usr/local/mysql/bin/mysql 测试 > GRANT ALL ON *.* TO 'root'@192.168.%.%' IDENTFIED BY 'queen'; 授权root用户可远程连接 > FLUSH PRIVILEGES; > q # service mysqld stop# crm node standby 切换当前节点为备# crm node online [[ node2 ]]# tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local# ln -sv mariadb-5.5.43-linux-x86_64/ mysql# cd mysql/# chown -R root.mysql ./*# cp support-file/mysql.server /etc/rc.d/init.d/mysqld# chkconfig --add mysqld # chkconfig mysqld off # service mysqld start# /usr/local/mysql/bin/mysql > CREATE DATABASE testdb; > SHOW DATABASE; > exit;# service mysqld stop# crm node standby # crm node online[[ node1 ]]# service mysqld start# /usr/local/mysql/bin/mysql > SHOW DATABASE 查看testdb是否存在,如果存在,说明两个节点是同步的# service mysqld stop七、将mysql定义为高可用资源 说明:vip 192.168.1.48# crm crm(live)# configure crm(live)configure# primitive myip ocf:heartbeat:IPaddr params ip="192.168.1.48" op monitor interval=10s timeout=20s primitive :定义资源命令 myip :资源ID名,可自行定义 ocf:heartbeat:IPaddr :资源代理(RA) params ip=192.168.1.48 :定义VIP op monitor :监控该资源 interval=30s :间隔时间 timeout=20s :超时时间 crm(live)configure# verity crm(live)configure# primitive myserver lsb:mysqld op monitor interval=20s timeout=20s crm(live)configure# verity crm(live)configure# colocation myip_with_mystor_master inf: myip ms_mystor:Master crm(live)configure# colocation myserver_with_mydata inf: myserver mydata crm(live)configure# order myserver_after_mydata Mandatory: mydata:start myserver:start crm(live)configure# verity crm(live)configure# show crm(live)configure# order myserver_after_myip Mandatory: myip:start myserver:start crm(live)configure# verity crm(live)configure# commit crm(live)configure# cd crm(live)# status Stack: classic openais (with plugin) Current DC: node1 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured, 2 expected votes 5 Resources configured Online: [ node1 node2 ] Master/Slave Set: ms_mydrbd [mydrbd] Masters: [ node1 ] Slaves: [ node2 ] mydata (ocf::heartbeat::Filesystem): Started node1 myip (ocf::heartbeat::IPaddr): Started node1 myserver (lsb::mysqld): Started node1[[ 192.168.1.35 ]]# mysql -uroot -h192.168.1.37 -p > SHOW DATABASE; 查看有没有testdb是否存在,如果存在,说明可以远程连接 >不断开mysql,让两个节点切换,服务访问依然正常node1:# crm node stangby 此时node2为主节点 # crm node online

@深圳返回搜狐,查看更多

责任编辑:



 
相关资讯