当前位置:首页 >> IT/计算机 >>

Rhcs+Drbd+Mysql配置高可用集群过程


RHCS?+DRBD+MYSQL 配置 MYSQL 高可用集群?
? ? ?

作者:Nobody? 联系方式:zhonghaicheng@163.com? ? ? ? 配置环境介绍:? 集群由两台 DELL? R610? 服务器组成,集群的配置我们将在第三台服务器上通过基本 web 配置的 luci 来实现。集群 fence 是通过 IPMI 命令来实现(如果对集群和 fence 概念不熟悉可以参考? liheng 作 的《基于 CentOS 5.2 的 RHCS 的高可用性解决方案》 )? 操作系统使用的是? Centos5.4,内核升级到? 2.6.18‐164.6.1.el5? 。? ? ? ? ? 目录:? 一, 安装系统环境? 二, 安装,配置 DRBD? 三, 配置集群? 1) 配置集群基本框架? 2) 配置集群节点的 fence 设备? 3) 配置 Failover?Domains? 4) 配置集群资源? 5) 配置集群 service? 6) 启动 Mysql?service? 四, 系统测试? 五, 附录(相关参考文档及脚本)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

一,安装系统?
安装操作系统的时候勾上集群套件包。并预留部分空间用来创建 DRBD 共享磁盘。? 根据网络结构,定义好主机表信息,即? /etc/hosts(三台服务器上的都设置好) :? ? 127.0.0.1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? localhost.localdomain?localhost? ::1? ? ? ? ? ? ? ? ? ? ? ? ? localhost6.localdomain6?localhost6? 192.168.1.66? ? ? ? plserver1.physerver.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? plserver1? 192.168.1.81? ? ? ? plserver5.physerver.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? plserver5? 192.168.1.82? ? ? ? plserver6.physerver.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? plserver6? 配置? /etc/sysconfig/network 文件,将 HOSTNAME 改为你需要设置的主机名。?

? ? ?

二,安装,配置 DRBD?
# # # # tar zxvf drbd-8.3.2rc2 cd drbd-8.3.2rc2 make KDIR=/usr/src/kernels/2.6.18-164.6.1.el5-x86_64/ make install

(安装过程中需要注意的是我使用的是 drbd‐8.3.2rc2 版本,最新版本已经到了 drbd‐8.3.6.tar.gz? ,不过在本环 境下最新版本安装完成后不能使用,暂未了解是什么原因。? 安装的时候需要确保 kernel-devel,?kernel-headers 包已安装) 。

系统安装完成后会生成/etc/drbd.conf,建议初学者可以先阅读官方的说明文档对其中的配置属 性有初步的所了解: http://www.drbd.org/docs/about/

此处我的集群第一节点(plserver5.physerver.com)分区情况为图一所示:

? (图一)? 集群第二节点(plserver6.physerver.com)俄方你去情况为图二所示:?

? (图二)?

两台机器中的? sda5,sda6 即是用来做 drbd 共享磁盘。根据以上情况配置/etc/drdb.conf 配置文件(两台机器的 配置文件相同) :? global?{? ? ? ? ? usage‐count?yes;? }? common?{? ? ? syncer?{?rate?500M;?}? ? ? 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‐local‐io‐error.sh;? /usr/lib/drbd/notify‐emergency‐shutdown.sh;? echo? o? >? /proc/sysrq‐trigger?;?halt?‐f";? ? ? }? startup?{? ? ? ? ? degr‐wfc‐timeout?120;? ? ? ? #?2?minutes.? ? ? ? ? outdated‐wfc‐timeout?2;? ? #?2?seconds.? ? ? }? ? ? net?{? ? ? ? ? #allow‐two‐primaries;? ? ? ? ? after‐sb‐0pri?discard‐zero‐changes;? ? ? ? ? after‐sb‐1pri?discard‐secondary;? ? ? ? ? after‐sb‐2pri?disconnect;? ? ? ? ? rr‐conflict?disconnect;? ? ? ? ? #?data‐integrity‐alg?"md5";? ? ? }? ? ? disk?{? ? ? ? ? on‐io‐error?detach;? ? ? ? ? no‐disk‐barrier;? ? ? ? ? no‐disk‐flushes;? ? ? ? ? no‐disk‐drain;? ? ? ? ? no‐md‐flushes;? ? ? }? }? resource?"mysqldata"?{? ? ? protocol?C;? ? ? disk?{? ? ? ? ? on‐io‐error? ? ? detach;? ? ? }? ? ? syncer?{? ? ? ? ? after?"r1";? ? ? ? ? al‐extents?257;? ? ? }? ? ? device? ? ? ? ? "/dev/drbd0";? ? ? disk? ? ? ? ? ? ? "/dev/sda5";? ? ? meta‐disk? ? internal;? ? ? on?plserver5.physerver.com?{? ? ? ? ? address? ? ? ? 192.168.1.81:7788;?

? ? }? ? ? on?plserver6.physerver.com?{? ? ? ? ? address? ? ? 192.168.1.82:7788;? ? ? }? }? resource?"r1"?{? ? ? protocol?C;? ? ? device? ? ? ? ? ? ? ? "/dev/drbd1";? ? ? disk? ? ? ? ? ? ? ? ? ? "/dev/sda6";? ? ? meta‐disk? ? ? ? ? internal;? ? ? on?plserver5.physerver.com?{? ? ? ? ? address? ? ? ? ? 192.168.1.81:7789;? ? ? }? ? ? on?plserver6.physerver.com?{? ? ? ? ? address? ? ? ? ? 192.168.1.82:7789;? ? ? }? }? 配置完成后,分别在每台机器上建立 drbd 的 metadata 和 drbd 节点?

# # # #

drbdadm create-md mysqldata drbdadm create-md r1 mknod /dev/drbd0 b 147 0 mknod /dev/drbd1 b 147 1

在 plserver5.physerver.com? 上面启动 drbd?

# service drbd start 在系统询问 wait timeout 时,yes,因为 plserver6.physerver.com 还没有启动 drbd,所以不需 要让 drbd 去连接对方。 在 plserver6.physerver.com 上面启动 drbd 系统正常启动 在 plserver5.physerver.com 上面,进行同步初始化 # drbdadm -- --overwrite-data-of-peer primary mysqldata 这个需要一段时间,根据磁盘容量的大小,可以 cat /proc/drbd 看到同步的进度,完成后同步 drbd1 # drbdadm -- --overwrite-data-of-peer primary r1

同步完成后?

? 同步完成后我们在 plserver5.physerver.com? 再对共享磁盘进行格式化:?

# mkfs.ext3 /dev/drbd0 # mkfs.ext3 /dev/drbd1

? ? 至此,DRBD 基本配置完毕了。? ? ? ? ?

三,配置集群?
配置集群之前我们需要确保已经做好几项准备工作:? 一.配置好 IPMI 管理? a) 配置 IPMI 我们可以参考? bbs.linuxtone.org 里的两篇文章来配置。 两份文档已经很详细的说明了配置方 法,此处我也不再浪费篇幅来一一介绍。文章地址如下:? http://bbs.linuxtone.org/thread‐1668‐1‐1.html? http://bbs.linuxtone.org/thread‐4200‐1‐1.html? 二.确定 RHCS 集群套件已经安装,配置好 iptables(我在此配置中是禁用了 IPTABLES)附件中附了配置集群需要 开放的端口。? ? 接下来我们开始配置集群:? 1. 配置集群基本框架:? 在第三台服务器中输入以下命令,初始化集群配置软件。?

# luci_admin init

? 配置 luci 服务自动启动,启动 luci 服务:?

# chkcofnig luci on # service luci restart?

? 然后在集群配置服务器上登陆 luci:?

? 点击 cluster?‐>?create?a?New?Cluster,填写相关信息:? Cluster?Name:Mysq‐cluster? Node?Hostname? plserver5.physerver.com? plserver6.physerver.com? 点击? View? SSL? cert? fingerprints 检查是否能顺利连接到? plserver5.physerver.com 和 plserver6.physerver.com? 两台 服务器。?

? 点击 Submit 按钮?

?

Conga 集群配置组建正在配置? Mysql‐cluster 集群 (此时 plserver5,plserver6 两台服务器将会重启一次完成配置) , 如上图所示。? 在经过? install‐>Reboot‐>Configure‐>Join? 四个过程后,Mysql‐cluster 基本框架形成。如下图:? ?

? ? ? 点击 cluster‐>Cluster?list?‐>? 查看 Mysql‐cluster 的状态。?

? 我们看到,Mysql‐cluster? 集群下面有两个节点。如果状态正确,Cluster? Name 和? Nodes 的名字均显示为绿色。 点击 Nodes 下的 plserver5.physerver.com,? 看到? cman,?rgmanager? 正在运行,并且在系统启动时,这两个服务是 自动启动,如下图:?

? 如果 cman,?rgmanager? 没有运行,可以在服务器上手动执行以下命令:? Service?cman?start,? Service?rgmanager?start? 然后再点击? Update?node?daemon?properties,更新其状态。? 同样的方法检查 plserver6.physerver.com 节点的状态。? ? 2. 配置集群节点的? Fence 设备? 在查看节点信息界面中, 点击 Add?a?fence?device?to?this?level,? 在 Main?Fencing?Method? 下面的下拉框中选中? IPMI? lan,在 Name 中输入 BMCS5(名字可以随意命名),IP?Address?:?192.168.1.241?,?login?:?root,? 密码:****? (这些 信息都是你在配置 ipmi 的时候设置好的) ,? 确认完毕后点击? Update?main?fence?properties。?

?

? 同样的方法配置好? plserver6.physerver.com 的 fence 设备。注意:?IP 地址,用户名,密码都是在当前服务器上配 置的 IPMI 信息。? ?

? 3. 配置 Failover?Domains? 点击 Failover?Domains‐>Add?a?Failover?Domain,填写相关信息。? Failover?Domain?Name?:?prefer_plserver5? 勾上 Prioritized? 选择框? 勾上 plserver6.physerver.com,plserver5.physerver.com? 后面的 member 选择框,并将 plserver6.physerver.com? 的 Priority 值改为? 10.? 点击? Submit。?

?

? 4. 配置集群资源:? 现在我们为集群配置好相关的资源(IP 地址,共享文件系统,mysql 服务,以及相关脚本)? 单击 Resources‐>? Add? a? Resource? ,? 在? Select? a? Resource? Type? 下啦框中选择? IP? address,此处所填写的地址及用 来提供 mysql 服务的浮动 IP 地址(VIP) 。勾上 Monitor?link 选项,点击? Submit。? ? 接着添加共享文件系统,单击 Resources‐>?Add?a?Resource?,? 在? Select?a?Resource?Type? 下啦框中选择 File?System,? ? Name? 中输入? mysqldata? File?system?type?ext3? Mount?point? ? /dbdata?(你的 mysql 数据库所保存的位置)? Device? ? /dev/drbd/by‐res/mysqldata? 点击? Submit? ? 接着再添加 mysql 服务(mysql 的编译步骤本文已经省略,可以参考相关的编译资料或通过 yum 来安装) ,以及 一个用来切换 drbd 共享磁盘主从状态的脚本。 单击 Resources‐>?Add?a?Resource?,? 在? Select?a?Resource?Type? 下啦 框中选择 Script,填写 Name:Mysql5,Full? path? to? script? file:/etc/init.d/mysqld? (此处的路径即你的 mysql 启 动脚本位置) ,点击 Submit。? ? 用和添加 mysql 服务一样的方法再来添加切换 drbd 共享磁盘主从状态的脚本(脚本的内容我会在后面贴出)。单 击 Resources‐>?Add?a?Resource?,? 在? Select?a?Resource?Type? 下啦框中选择 Script, 填写 Name: drbd‐primary‐switch, Full?path?to?script?file:/etc/drbd.sh? ? 至此,Mysql 高可用集群所需要的资源都已经配置完毕,点击? Recources 可以看到刚才添加的所有资源,如下 图。?

? ? ?

5. 配置集群 service? 单击 Services‐>?Add?a?Service,填写相关信息。? Service?name:Mysql? 选中 Automatically?start?this?service? Failover?Domain:none? (第一次配置时不知为何不能选择开始配置的 Prefer_plserver5?failover?Domain,待第一次 配置完成后再来修改 Mysql?service 的时候就可以选择了)? Recovery?policy:disable;? 然后再单击? Add? a? resource? to? this? service,? 在 Use? an? existing? global? resource? 下面的下拉框中选择开始添加的 IP 资源。再次点击 Add? a? resource? to? this? service,同样在 Use? an? existing? global? resource? 下面的下拉框中选择刚才 添加的资源,这次添加上 drbd‐primary‐switch 资源。? 然后再点击刚添加的? drbd‐primary‐switch 资源下面的? Add?a?child, 同样在 Use?an?existing?global?resource? 下面的 下拉框中选择开始添加的? mysqldata(File? System).? 最后再单击刚才添加的? mysqldata 资源下面的? Add? a? child, 依旧在新弹出的 Use? an? existing? global? resource? 下面的下拉框中选择刚才添加的 mysql 启动脚本资源。点击 submit 确定。?

? ? ? ?

6. 启动 Mysql?service? 点击 Services, 此时已经能看见刚才添加的? Mysql?service 了, 如果没问题的话此时我们已经能看见 Mysql?service 已经启动了, 我们手工来切换 Mysql?service 在哪台服务器上运行。 选择? Choose?a?Task 下拉框, 再选择? start?this? service?on?plserver5.physerver.com? 。? (注意执行完上面操作的时候可能? Status:中提示服务是停止状态,Service?Name 也显示为红色的,此时按 F5 刷新一下页面,服务的状态就会正确显示了,当然,前提是前面的步骤都正确配置好了)? 至此,我们的配置工作就全部结束了: )接下来测试吧。? ?

? ?

四,系统测试?
我们在 plserver5.physerver.com 服务器上查看挂载文件系统,可以看到/dev/drbd0 已经挂载到/dbdata 目录下: ?

? 查看 mysql 运行状态(我的 mysql 启动脚本被命令为 mysqld)? ? 接下来我们模拟 plserver5.physerver.com? 这台服务器宕机,或者直接 reboot 这台服务器? ?? 接着我们来查看 plserver6 这台服务器的日志,我们可以看到这样一段日志,此时 plserver6? 这台服务器已经成 功接管了 plserver5 这台机器的? Mysql? service,并且将 plserver5 这台机器 fence 掉了,过一会 plserver5 这台机 器重启完后又会重新加入到集群中来,并且 Mysqlservice 将会自动恢复到 plserver5 上面运行:?

? ? 此时我们在 plserver6 上面查看文件系统挂载情况,可以看到 plserver6 上的/dev/drbd0 已被挂载到/dbdata 目录 下了。?

? 查看 mysql 运行状态,此时 plserver6 上的 mysql 服务已经启动了:? ? ? 至此,可以宣布 RHCS?+DRBD+MYSQL 配置 MYSQL 高可用集群已经配置成功了: )? ? ?

附录:?
本文主要参考的几处资料列出如下(多谢这些前辈们的无私奉献我才能完整的实现本配置方案) :? 史应生的? 基于红帽企业版 Linux?RHEL5U2?GFS2+ISCSI+虚拟化 XEN+Cluster 的高可用性(HA)解决方案‐最新技术本版? 某人博客—GFS2 集群文件系统测试指南? ? http://blog.chinaunix.net/u3/93425/showart_1864554.html? Linuxtone 论坛的《使用 IPMI 实现远程终端重定向》一文? http://bbs.linuxtone.org/thread‐4200‐1‐1.html?
Liheng 的基于 CentOS 5.2 的 RHCS 的高可用性解决方案 http://linux.chinaunix.net/bbs/thread-1098882-1-1.html

? 最后附上用来切换? drbd 共享磁盘主从状态的脚本内容(此脚本完全可以自己重新写一个,本人偷懒,直接拿 drbd 的启动脚本改了下) :? #!/bin/bash? #? #?chkconfig:?345?70?08? #?description:?Loads?and?unloads?the?drbd?module? #? #?Copright?2001‐2008?LINBIT?Information?Technologies? #?Philipp?Reisner,?Lars?Ellenberg? #? ###?BEGIN?INIT?INFO? #?Provides:?drbd?

#?Required‐Start:?$network?$syslog?sshd? #?Required‐Stop:?$network?$syslog?sshd? #?Default‐Start:? ? 2?3?4?5? #?Default‐Stop:? ? ? 0?1?6? #?Short‐Description:? ? ? ? Control?drbd?resources.? ###?END?INIT?INFO? ? DEFAULTFILE="/etc/default/drbd"? DRBDADM="/sbin/drbdadm"? DRBDRESOURCE="mysqldata"? DRBDSETUP="/sbin/drbdsetup"? PROC_DRBD="/proc/drbd"? MODPROBE="/sbin/modprobe"? RMMOD="/sbin/rmmod"? UDEV_TIMEOUT=10? ADD_MOD_PARAM=""? ? if?[?‐f?$DEFAULTFILE?];?then? ? ? .?$DEFAULTFILE? fi? ? test?‐f?$DRBDADM?||?exit?5? ? #?we?only?use?these?two?functions,?define?fallback?versions?of?them?...? log_daemon_msg()?{?echo?‐n?"${1:‐}:?${2:‐}";?}? log_end_msg()?{?echo?".";?}? #?...?and?let?the?lsb?override?them,?if?it?thinks?it?knows?better.? if?[?‐f?/lib/lsb/init‐functions?];?then? ? ? ? ? .?/lib/lsb/init‐functions? fi? ? function?assure_module_is_loaded? {? ? ? ? ? [?‐e?"$PROC_DRBD"?]?&&?return? ? ? ? ? ? $MODPROBE?‐s?drbd?`$DRBDADM?sh‐mod‐parms`?$ADD_MOD_PARAM?||?{? ? ? ? ? ? ? ? ? echo?"Can?not?load?the?drbd?module."$'\n';?exit?20? ? ? ? ? }? ? ? ? ? #?tell?klogd?to?reload?module?symbol?information?...? ? ? ? ? [?‐e?/var/run/klogd.pid?]?&&?[?‐x?/sbin/klogd?]?&&?/sbin/klogd?‐i? }? ? function?adjust_with_progress? {? ? ? ? ? IFS_O=$IFS? ? ? ? ? NEWLINE='? '? ? ? ? ? IFS=$NEWLINE? ? ? ? ? local?res?

? ? ? ? ? COMMANDS=`$DRBDADM?‐d?‐n?res?adjust?all`?||?exit?20? ? ? ? ? echo?‐n?"[?"? ? ? ? ? ? for?CMD?in?$COMMANDS;?do? ? ? ? ? ? ? ? ? case?"$CMD"?in? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? res=*)? ? ? ? ? ? ? ? ? ? eval?"$CMD";;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *\?disk\?*)? ? ? ? ? echo?‐n?"d($res)?"?;;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *\?syncer\?*)? ? ? echo?‐n?"s($res)?"?;;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *\?net\?*)? ? ? ? ? ? echo?‐n?"n($res)?"?;;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *)? ? ? ? ? ? ? ? ? ? ? ? ? ? echo?"..?"?;;? ? ? ? ? ? ? ? ? esac? ? ? ? ? ? ? ? ? if?!?eval?"$CMD";?then? ? ? ? ? ? ? ? ? ? ? ? ? echo?‐e?"\n[$res]?cmd?$CMD?failed?‐?continuing!\n?"? ? ? ? ? ? ? ? ? fi? ? ? ? ? done? ? ? ? ? echo?‐n?"]"? ? ? ? ? ? IFS=$IFS_O? }? ? drbd_pretty_status()? {? ? ? ? ? ? ? ? ? local?proc_drbd=$1? ? ? ? ? ? ? ? ? #?add?resource?names? ? ? ? ? ? ? ? ? if?!?type?column?&>?/dev/null?||? ? ? ? ? ? ? ? ? ? ? ? !?type?paste?&>?/dev/null?||? ? ? ? ? ? ? ? ? ? ? ? !?type?join?&>?/dev/null?||? ? ? ? ? ? ? ? ? ? ? ? !?type?sed?&>?/dev/null?||? ? ? ? ? ? ? ? ? ? ? ? !?type?tr?&>?/dev/null? ? ? ? ? ? ? ? ? then? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cat?"$proc_drbd"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return? ? ? ? ? ? ? ? ? fi? ? ? ? ? ? ? ? ? sed?‐e?'2q'?<?"$proc_drbd"? ? ? ? ? ? ? ? ? sed_script=$(? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _sh_status_process()?{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? let?i++?;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? stacked=${_stacked_on:+"^^${_stacked_on_minor:‐${_stacked_on//[!a‐zA‐Z0‐9_?‐]/_}}"}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf?"s|^?*%u:|%6u\t&%s%s|\n"?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $_minor?$i?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "${_res_name//[!a‐zA‐Z0‐9_?‐]/_}"?"$stacked"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? };? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? eval?"$(drbdadm?sh‐status)"?)? ? ? ? ? ? ? ? ? ? p()?{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sed?‐e?"1,2d"?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?"$sed_script"?\?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'/^?*[0‐9]\+:?cs:Unconfigured/d;'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'s/^\(.*?cs:.*[^?]\)? ? ? \([rs]...\)$/\1?‐?\2/g'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'s/^\(.*?\)cs:\([^?]*?\)st:\([^?]*?\)ds:\([^?]*\)/\1\2\3\4/'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'s/^\(.*?\)cs:\([^?]*?\)ro:\([^?]*?\)ds:\([^?]*\)/\1\2\3\4/'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'s/^\(.*?\)cs:\([^?]*\)$/\1\2/'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'s/^?*[0‐9]\+:/?x?&??not‐found??/;'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'/^$/d;/ns:.*nr:.*dw:/d;/resync:/d;/act_log:/d;'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'s/^\(.\[.*\)\(sync.ed:\)/...?...?\2/;/^.finish:/d;'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ‐e?'s/^\(.[0‐9?%]*oos:\)/...?...?\1/'?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <?"$proc_drbd"?|?tr?‐s?'\t?'?'? ? '? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? m()?{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? join?‐1?2?‐2?1?‐o?1.1,2.2,2.3?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <(?(?drbdadm?sh‐dev?all?;?drbdadm?‐S?sh‐dev?all?)?|?cat?‐n?|?sort?‐k2,2)?\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <(sort?<?/proc/mounts?)?|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sort?‐n?|?tr?‐s?'\t?'?'? ? '?|?sed?‐e?'s/^?*//'? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? #?echo?"===?p?==="? ? ? ? ? ? ? ? ? #?p? ? ? ? ? ? ? ? ? #?echo?"===?m?==="? ? ? ? ? ? ? ? ? #?m? ? ? ? ? ? ? ? ? #?echo?"========="? ? ? ? ? ? ? ? ? #?join?‐a1?<(p|sort)?<(m|sort)? ? ? ? ? ? ? ? ? #?echo?"========="? ? ? ? ? ? ? ? ? (? ? ? ? ? ? ? ? ? echo?m:res?cs?ro?ds?p?mounted?fstype? ? ? ? ? ? ? ? ? join?‐a1?<(p|sort)?<(m|sort)?|?cut?‐d'?'?‐f2‐6,8‐?|?sort?‐k1,1n?‐k2,2? ? ? ? ? ? ? ? ? )?|?column?‐t? }? ? #?Just?in?case?drbdadm?want?to?display?any?errors?in?the?configuration? #?file,?or?we?need?to?ask?the?user?about?registering?this?installation? #?at?http://usage.drbd.org,?we?call?drbdadm?here?without?any?IO? #?redirection.? $DRBDADM?sh‐nop? ? case?"$1"?in? ? ? ? ? start)? ? ? ? ? ? ? ? ? log_daemon_msg?"Put?mysqldata?resource?become?primary"? ? ? ? ? ? ? ? ? assure_module_is_loaded? ? ? ? ? ? ? ? ? adjust_with_progress? ? ? ? ? ? ? ? ? ? $DRBDADM?primary?$DRBDRESOURCE?#?Become?primary?if?configured? ? ? ? ? ? ? ? ? log_end_msg?0? ? ? ? ? ? ? ? ? ;;? ? ? ? ? stop)? ? ? ? ? ? ? ? ? log_daemon_msg?"Drbdadm?secondary?mysqldata"? ? ? ? ? ? ? ? ? $DRBDADM?secondary?$DRBDRESOURCE? ? ? ? ? ? ? ? ? log_end_msg?0?

? ? ? ? ? ? ? ? ;;? ? ? ? ? status)? ? ? ? ? ? ? ? ? #?NEEDS?to?be?heartbeat?friendly...? ? ? ? ? ? ? ? ? #?so:?put?some?"OK"?in?the?output.? ? ? ? ? ? ? ? ? if?[?‐e?$PROC_DRBD?];?then? ? ? ? ? ? ? ? ? ? ? ? ? echo?"drbd?driver?loaded?OK;?device?status:"? ? ? ? ? ? ? ? ? ? ? ? ? drbd_pretty_status?$PROC_DRBD?2>/dev/null? ? ? ? ? ? ? ? ? ? ? ? ? exit?0? ? ? ? ? ? ? ? ? else? ? ? ? ? ? ? ? ? ? ? ? ? echo?>&2?"drbd?not?loaded"? ? ? ? ? ? ? ? ? ? ? ? ? exit?3? ? ? ? ? ? ? ? ? fi? ? ? ? ? ? ? ? ? ;;? ? ? ? ? reload)? ? ? ? ? ? ? ? ? log_daemon_msg? ? "Reloading?DRBD?configuration"? ? ? ? ? ? ? ? ? #$DRBDADM?adjust?all? ? ? ? ? ? ? ? ? log_end_msg?0? ? ? ? ? ? ? ? ? ;;? ? ? ? ? restart|force‐reload)? ? ? ? ? ? ? ? ? log_daemon_msg?"Restarting?DRBD?primary"? ? ? ? ? ? ? ? ? #$DRBDADM?down?all? ? ? ? ? ? ? ? ? #$RMMOD?drbd? ? ? ? ? ? ? ? ? #assure_module_is_loaded? ? ? ? ? ? ? ? ? #$DRBDADM?up?all? ? ? ? ? ? ? ? ? log_end_msg?0? ? ? ? ? ? ? ? ? ;;? ? ? ? ? *)? ? ? ? ? ? ? ? ? echo?"Usage:?/etc/drbd.sh?{start|stop|status|reload|restart|force‐reload}"? ? ? ? ? ? ? ? ? exit?1? ? ? ? ? ? ? ? ? ;;? esac? ? exit?0?


相关文章:
组建MySQL集群的几种方案,优劣与讨论
组建 MySQL 集群的几种方案 LVS+Keepalived+MySQL(有脑裂问题?但似乎很多人推荐这个) DRBD+Heartbeat+MySQL (有一台机器空余? Heartbeat 切换时...
Linux高可用集群与服务器搭建_系统架构_教学视频大全
03.配置mysql+heartbeat+drbd实现Mysql写操作高可用 04.配置mysql+lvs+keeplived实现Mysql读操作的负载均衡 红帽集群套件RHCS 01.RHCS集群概述 02.安装RHCS集群 03....
RHCS+ORACLE10G安装
这里只介绍高可用集群 高可用集群(High Availability Cluster) 常见的就是 2 个...二、RHCS 原理目前常用的集群环境框架 常用服务(如 oracle,mysql,httpd 等) |...
Linux集群_解析RHCS高可用集群HA及负载均衡集群LB的实...
Linux 集群概述_解析 RHCS 高可用集群 HA 及负载均衡集群 LB 的实现方法 Linux 集群概述 集群是个热门话题,在企业中越来越多地应用 Linux 操作系统提供邮件、Web...
Mysql+DRBD+heartbeat配置手册
Rhcs+Drbd+Mysql配置高可... 19页 1下载券 heartbeat+mysql 2页 免费 heartbeat安装配置手册 3页 免费 Mysql高可用集群应用drb... 暂无评价 4页 免费 Nginx+ke...
heartbeat+drbd+mysql的高可用性
heartbeat+drbd+mysql高可用性_计算机软件及应用_IT...>> 说明: mysql 编译安装的路径和 yum 命令安装 ...但是我们实际部署集群时可能一般都不会用到 stonith ...
安装配置DRBD8.3.13+Heartbeat3.0.4
安装配置DRBD8.3.13+Heartbeat3.0.4_计算机软件及应用_IT/计算机_专业资料。1....我们通过 heartbeat+dr bd 在 Linux 下创建一个高可用(HA)的集群服务器。 2...
Ubuntu下Mysql+drbd+heartbeat高性能服务集群配置。
高性能服务集群配置。 环境如下: VMware 下的两台虚拟机, drbd01 192.168.1...Rhcs+Drbd+Mysql配置高可... 19页 1下载券 Mysql+DRBD+heartbeat配... 9页...
heartbeat+mysql+drbd高可用数据库
Rhcs+Drbd+Mysql配置高可... 19页 1下载券 基于主动TCP连接复制的高... 7页...Mysql高可用集群应用drb... 暂无评价 4页 免费 mysql数据库高可用性方案... ...
51CTO学院-MySQL主集群企业高可用综合实战-老男孩运维D...
1、MYSQL 高可用需求介绍 2、MySQL 主库宕机切换过程架构拓扑 3、配置 heartbeat 服务(细节见前面课程) 4、配置 DRBD 服务 5、配合 heartbeat 调试 drbd 服务 6...
更多相关标签: