快速部署MySQL高可用方案:heartbeat + drbd + mysql

实验环境:

VIP:192.168.198.200

data1-1:

       eth0:192.168.198.140  #用于外网管理IP

       eth1:10.0.0.7   #传递心跳信息,drbd数据同步。

data1-2:

       eth0:192.168.198.150

       eth1:10.0.0.8    

1、heartbeat安装配置

准备:两节点都执行

yum install epel* -y
yum install -y heartbeat
ntpdate 202.120.2.101

1.1配置IP

#双节点
iptables -I INPUT -s 192.168.198.0/24 -j ACCEPT   #来自内网的请求全部接受。
iptables -I INPUT -s 10.0.0.0/24 -j ACCEPT
#data1-1
ifconfig eth1 10.0.0.7/24 up
route add -host 10.0.0.8 dev eth1
#data1-2
ifconfig eth1 10.0.0.8/24 up
route add -host 10.0.0.7 dev eth1
#永久有效可以修改ifcfg-eth1文件

1.2修改主机名

#双节点

cat >> /etc/hosts <<EOF
10.0.0.7 data1-1
10.0.0.8 data1-2
EOF
#data1-1
hostname data1-1
sed -i "/^H/d" /etc/sysconfig/network
sed -i "/^/a\HOSTNAME=data1-1" /etc/sysconfig/network
 #data1-2
hostname data1-2
sed -i "/^H/d" /etc/sysconfig/network
sed -i "/^/a\HOSTNAME=data1-2" /etc/sysconfig/network

1.3提供相同的配置文件

#data1-1
#cd /usr/share/doc/heartbeat-3.0.4/
#cp ha.cf haresources authkeys /etc/ha.d/  #把文件复制过去。
cd /etc/ha.d

vim authkeys   #编辑认证文件
auth 1
1 sha1 HI!
chmod 600 authkeys

vim ha.cf   #配置文件
debugfile /var/log/ha-debug
logfile     /var/log/ha-log
logfacility       local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport   694
mcast eth1 225.0.100.2 694 1 0
auto_failback on
watchdog /dev/watchdog
node       data1-1
node       data1-2
crm off

vim haresources   #资源文件
data1-1 IPaddr::192.168.198.200/24/eth0
scp /etc/ha.d/{authkeys,haresources,ha.cf} data1-2:/etc/ha.d/    #双方提供相同的配置文件

2、drbd安装配置

#下面都是在两台节点执行相同的操作
yum groupinstall -y "Development tools"  #可选
yum install -y kernel kernel-devel kernel-headers  #后期内核版本和drbd不兼容问题,可选,安装好之后不要忘记重启。
vim /etc/drbd.conf    #编辑drbd配置文件
global {
       usage-count no;
}
common {
       syncer {
#            rate 10M;
              verify-alg crc32c;
       }
}
resource data {
       protocol C;
       disk {
              on-io-error detach;
       }
       on data1-1 {
              device /dev/drbd0;
              disk /dev/sda5; 
              address 10.0.0.7:7788;
              meta-disk /dev/sda6;
       }
       on data1-2 {
              device /dev/drbd0;
              disk /dev/sda5;
              address 10.0.0.8:7788;
              meta-disk /dev/sda6;
       }
}

提前对磁盘做好分区。

#两节点
mkfs.ext4 /dev/sda5
drbdadm create-md data
mkdir -p  /usr/local/var/run/drbd
drbdadm up data

在data1-1上面:
drbdadm -- --overwrite-data-of-peer primary data
mkdir /data
mount /dev/drbd0 /data/
cat /proc/drbd #查看同步信息
vim /etc/ha.d/haresources
data1-1 IPaddr::192.168.198.200/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

scp /etc/ha.d/haresources data1-2:/etc/ha.d/

重启heartbeat测试

3、安装配置mysql。

#两边节点操作
groupadd mysql
useradd -g mysql mysql

#主节点data1-1操作
mkdir -pv /data/3306/{data,binlog}
chown -R mysql.mysql /data/
cd /usr/local/src/
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.45.tar.gz
tar -xf mysql-5.5.45.tar.gz
cd mysql-5.5.45
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make
gmake
make install
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/
cp support-files/my-small.cnf /data/3306/my.cf
vim /data/3306/my.cf
....
socket          = /data/3306/mysql.sock
 ....
datadir=/data/3306/data
server-id       = 3306
log-bin=/data/3306/binlog/mysql-bin
binlog_format=mixed
log-error=/data/3306/data/mysql-err
vim /data/3306/mysql.sh   #提供启动脚本
#!/bin/bash
#
MYSQL=/usr/local/mysql/bin
PORT=3306
DEFAULTSFILE=/data/$PORT/my.cf
CMD=shutdown
SOCKET=/data/${PORT}/mysql.sock
start_mysql () {
       echo "Starting MySQL.."
       ${MYSQL}/mysqld_safe --defaults-file=${DEFAULTSFILE} &
}
 
stop_mysql () {
       echo "Stopping MySQL.."
       ${MYSQL}/mysqladmin -S $SOCKET $CMD
}
 
case $1 in
start)
       start_mysql
       ;;
stop)
       stop_mysql
       ;;
restart)
       stop_mysql
       sleep 2
       start_mysql    
       ;;
*)
       echo "Usage:`basename $0` {start|stop}"
esac
chmod +x /data/3306/mysql.sh
mv /data/3306/mysql.sh /data/3306/mysql
cp mysql /etc/ha.d/resource.d/   #提供mysql资源文件
vim /etc/ha.d/haresources
data1-1 IPaddr::192.168.198.200/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 mysql
scp -r /etc/ha.d/ data1-2:/etc/

4、测试,查看输出信息是否正确

ip addr show    #查看VIP
cat /proc/drbd   #查看drbd状态
ss -tnl | grep 330   #查看mysql是否启动

5、总结

    1、为什么叫快速部署方案呢?因为下次再次部署这个方案的时候,直接复制粘贴过去就可以了。

    2、在mysql上可以在增加从库,实现主从同步,参考 http://www.178linux.com/8496

    3、这个方案还有很多需要完善的地方。

附录:

关于裂脑

导致裂脑的原因

       1、高可用服务器之间心跳链路故障,导致无法通信。

              网线直连为例: 断线,老鼠咬了,老化了,网卡坏了,驱动坏了。IP配置及冲突问题。

              心跳线间连接的设备故障(网卡,交换机坏了)。

              仲裁的机器出问题了。

      2、高可用服务器上面开启了防火墙阻挡了心跳信息传输。

      3、高可用网卡信息配置不正确。

      4、其他服务配置不当,如心跳方式,心跳广播冲突。

防止裂脑:

       裂脑危害是非常大的。有时候可能是致命的,以后用高可用的时候,先去想想高可用的危害,做高可用是有代价的。

       以下几个方面防止裂脑的问题的发生。

       1、同时使用串行电缆和以太网电缆连接,同时用两条心跳线路。

       2、检测到裂脑时强行关闭一个心跳节点,这个功能需要特殊设备支持,stonith fence。备节点发现心跳故障,发送关机命令到主节点

       3、做好裂脑的监控报警(邮件及手机短信),在问题发生时候人为第一时间介入仲裁,降低损失,当然在实施高可用方案时,要根据业务实际需要确定是否能容忍这样的损失,对于一般的网站业务,这个损失是可控的。

       4、报警报在服务器接管之前,给人员处理留足够空间。一分钟内报警了,但是服务器此时没有接管,而是5分钟接管。数据不会丢,导致用户无法写。

       5、报警后不自动接管,而是认为人员控制接管。

       6、增加仲裁机制,确定谁该获得资源。

       6.1 列入设置参考IP,当心跳线断开时候,谁ping一下餐开IP,能够相互通信的一方就接管。ping不通的一方可以自我重启,以彻底释放资源。

       6.2 第三方软件。

裂脑发生了,影响是比较大的,尽量不让它发生。而不是已经发生再去解决。

drbd裂脑,参考:http://itindex.net/detail/50197-drbd

故障处理:

[root@data1-1 ~]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data1-1, 2015-10-05 08:52:17
 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
    ns:1057605 nr:8 dw:24 dr:1059271 al:1 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

在从节点执行

drbdadm connect --discard-my-data data
[root@data1-1 ~]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data1-1, 2015-10-05 08:52:17
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:1057605 nr:8 dw:24 dr:1059271 al:1 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

原创文章,作者:艾贺,如若转载,请注明出处:http://www.178linux.com/8608

赞 (0)
艾贺艾贺
上一篇 2015-10-05 22:30
下一篇 2015-10-07 12:00

相关推荐

  • 08.04 笔记总结

    1.ps axo  user,ruser,group,rgroup,cmd  //  ruser  表示程序发起的用户,一般是指系统当前的用户  //  user  表示程序的所有者。在大数情况下,两个用户都是系统当前的用户, 之后当程序被赋予suid的时候,可能user会发生变化。 2.…

    Linux干货 2016-08-08
  • 简述计算机网络数据链路层

    数据链路层    数据链路层是什么?      数据链路层工作在七层网络模型的第二层,它定义了在单个链路上如何传输数据。 数据链路层:是为了提供功能上和规程上的方法,以便建立、维护和释放网络实体间的数据链路 。 物理链路(物理线路):是由传输介质与设备组成的。原始的物理传输线路是指没有采用高层差错控…

    Linux干货 2017-05-15
  • 在学习的过程中,我们应该如何获取帮助?

    正文 在学习的过程当中,我们总是遇到不会使用的问题,以各种姿势来获取帮助是一个运维人员的基本要求 在Linux系统中我们获取帮助主要有以下几种方式 1. 使用命令内建的选项来获取帮助 2. 使用man来查看命令使用手册 3. 使用info来查看命令的信息页 4. 查看软件自带的帮助文档 5. 查看软件官方的文档 6. 查看发行版本的文档 7. Google相…

    Linux干货 2016-03-04
  • 交互式与非交互式的区别

    交互式与非交互式shell /登录shell于非登录shell 外网连不上,教室装修太吵,相关资料找不到,云云不知所云,托托症又犯了 登录shell_非登录shell // .bash_profile .bashrc profile 文件的作用的执行顺序 http://blog.csdn.net/robertaqi/archive/2010/04/04/54…

    Linux干货 2017-06-11
  • M25初尝试部署RAID磁盘阵列组

    在学习了linux系统管理硬盘设备的基础后,现在尝试部署RAID10硬盘组技术,在部署前我们先了解一下什么叫“RAID”磁盘冗余阵列(Redundant Array of Independent Disks)。 RAID技术就是把多块硬盘设备组合成一个容量更大、更安全的硬盘组,可以把数据切割成多个区段后分别存在各个不同物理硬盘设备上,然后利用分散读写需求赖提…

    2017-07-12
  • linux的发展史

                  linux的发展史     1  Linux的诞生:    1988年:芬兰赫尔辛基大学迎来一位新生-linus benedict torvalds (后面简称linus)   2 &nbsp…

    Linux干货 2016-10-19