DRBD+keepalived+LAMP+discuz

DRBD(Distributed Replicated Block Device)是一个基于块设备级别在远程服务器直接同步和镜像数据的开源软件,类似于RAID1数据镜像,通常配合keepalived、heartbeat等HA软件来实现高可用性。

DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能,当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中。

本地(master)与远程主机(backup)的保证实时同步,如果本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据。

通过本次课程的学习,大家可以熟练构建企业级MySQL+DRBD+Keepalived高性能高可用架构,满足企业网站高效的访问,有突发故障及时切换。

MySQL+DRBD+Keepalived企业实战

MASTER:192.168.77.133
SLAVE:192.168.77.166
VIP:192.168.77.189

初始化配置

1) 在128、129两台服务器/etc/hosts里面都添加如下配置:

192.168.77.133  node1
192.168.77.166  node2

每台单独划一个分区,我这里直接各增加一个大小相同的磁盘
两台服务器分别添加一块设备,用于DRBD主设备存储,我这里为/dev/sdb 20G硬盘;
执行如下命令初始化:

mkfs.ext4 /dev/sdb ;dd if=/dev/zero of=/dev/sdb bs=1M count=1;sync

DRBD安装配置
Yum方式安装:在两台机器上安装

rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm 

yum -y install drbd83* kmod-drbd83 ; modprobe  drbd
lsmod | grep drbd   查看drbd模块

[[email protected]_168_77_133 ~]# modprobe  drbd
FATAL: Module drbd not found.
需要重启系统

修改配置文件/etc/drbd.conf两台配置文件一样

global {
    usage-count yes;
}
common {
syncer { rate 100M; }    #同步每s的速率
}
resource r0 {            #节点r0
 protocol C;
 startup {

 }
 disk {
 on-io-error detach;       #错误的信息
 #size 1G;                 #同步的磁盘空间
 }
 net {                     #网络节点node1,node2
 }
 on node1 {                 #
 device /dev/drbd0;         #块设备
 disk /dev/sdb;
 address 192.168.77.133:7898;
 meta-disk internal;
 }
 on node2 {
 device /dev/drbd0;
 disk /dev/sdb;
 address 192.168.77.166:7898;
 meta-disk internal;
 }
}

配置修改完毕后执行如下命令初始化:

drbdadm create-md  r0  ;/etc/init.d/drbd restart ;/etc/init.d/drbd status

这里主要如果报错主机名问题需要修改主机名为node1、node2

两台都启动后查看状态会发现两台都是secondary备用状态表示目前两台都为从,我们需要设置node1为master,命令如下:

[[email protected] ~]# drbdadm  --  --overwrite-data-of-peer primary all

[[email protected] ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by [email protected], 2014-11-24 14:49:06
m:res  cs          ro                 ds                     p  mounted  fstype
...    sync‘ed:    44.4%              (586368/1048576)K
0:r0   SyncSource  Primary/Secondary  UpToDate/Inconsistent  C

查看为主后初始化块然后挂载:

[[email protected] ~]# mkfs.ext4  /dev/drbd0

[[email protected] ~]# mkdir  /app  ;mount /dev/drbd0  /app

[[email protected] ~]# df -h       #查看app已经挂载上
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5       3.1G  2.8G  138M  96% /
tmpfs           442M     0  442M   0% /dev/shm
/dev/sda1       190M   40M  141M  23% /boot
/dev/sda2        15G   55M   14G   1% /data
/dev/drbd0       20G   44M   19G   1% /app

注意只需要在主上格式化drbd0然后挂载app即可

LAMP:我这里便于实验采用yum安装方式

yum install http mysql mysql-devel mysql-server php php-mysql php-devel -y

停止mysql
nohup cp /var/lib/mysql/* . -a &  后台将mysql数据copy到app目录下面

然后将my.cnf中的数据文件路径改为datadir=/app即可,然后重启mysql

登录mysql正常

模拟drbd主down机:

[[email protected] app]# poweroff

在从上查看drbd状态还是从:

[[email protected] ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by [email protected], 2014-11-24 14:49:06
m:res  cs            ro                 ds                 p  mounted  fstype
0:r0   WFConnection  Secondary/Unknown  UpToDate/DUnknown  C

把从设置为主需要执行命令:

[email protected] ~]# drbdadm  --  --overwrite-data-of-peer primary all
[[email protected] ~]# /etc/init.d/drbd status                          
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by [email protected], 2014-11-24 14:49:06
m:res  cs            ro               ds                 p  mounted  fstype
0:r0   WFConnection  Primary/Unknown  UpToDate/DUnknown  C

然后创建一个挂载点app

[[email protected] ~]# mkdir /app

[[email protected] ~]# mount /dev/drbd0 /app

[[email protected] ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        29G  2.8G   25G  10% /
tmpfs           442M     0  442M   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sda5        48G   73M   46G   1% /data
/dev/drbd0       20G  106M   19G   1% /app

[[email protected] ~]# cd /app

[[email protected] app]# ls
bbs          mysql             mysql-bin.000011  mysql-bin.000022  mysql-bin.000033  mysql-bin.000044
cacti        mysql-bin.000001  mysql-bin.000012  mysql-bin.000023  mysql-bin.000034  mysql-bin.000045
discuz       mysql-bin.000002  mysql-bin.000013  mysql-bin.000024  mysql-bin.000035  mysql-bin.index
ibdata1      mysql-bin.000003  mysql-bin.000014  mysql-bin.000025  mysql-bin.000036  nagios
ib_logfile0  mysql-bin.000004  mysql-bin.000015  mysql-bin.000026  mysql-bin.000037  nohup.out
ib_logfile1  mysql-bin.000005  mysql-bin.000016  mysql-bin.000027  mysql-bin.000038  yuning
jfdeu        mysql-bin.000006  mysql-bin.000017  mysql-bin.000028  mysql-bin.000039
li           mysql-bin.000007  mysql-bin.000018  mysql-bin.000029  mysql-bin.000040
lijq         mysql-bin.000008  mysql-bin.000019  mysql-bin.000030  mysql-bin.000041
linux        mysql-bin.000009  mysql-bin.000020  mysql-bin.000031  mysql-bin.000042
lixi         mysql-bin.000010  mysql-bin.000021  mysql-bin.000032  mysql-bin.000043

查看会发现down机的node1下的文件都挂载到了node2下面的app下面了,,node2下切记不要格式化,否则数据会丢失

然后修改my.cnf路经重启mysql进入数据库,会看到数据都存在

以下为DRBD脑裂手动恢复过程:主down机后主恢复后发生脑裂,,无法通信

将Node1设置为主节点并挂载测试

[[email protected] ~]#/etc/init.d/mysqld stop

[[email protected] ~]# umount /app

[[email protected] ~]# drbdadm primary r0

[[email protected] ~]# mount /dev/drbd0 /app

将Node2设置为从节点并丢弃资源数据

[[email protected] ~]# drbdadm secondary r0

[email protected] ~]# drbdadm -- --discard-my-data connect r0

在Node1主节点上手动连接资源

[[email protected] ~]# drbdadm connect r0

查看drbd服务启动没,,如果没启动启动后

[[email protected] ~]# cat /proc/drbd 
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by [email protected], 2014-11-24 14:51:37
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:304 nr:0 dw:548 dr:12866 al:12 bm:15 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Keepalived配置实现自动切换:

安装:

wget 

./configure; make ;make install 

做成系统服务
DIR=/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/ ; cp$DIR/etc/sysconfig/keepalived /etc/sysconfig/ ;
mkdir -p /etc/keepalived ; cp $DIR/sbin/keepalived /usr/sbin/

两台服务器均安装keepalived,并进行配置,首先在node1(master)上配置,keepalived.conf内容如下:

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_script check_mysql {
        script "/data/sh/check_mysql.sh"
        interval 5
        }
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.77.189
         }
        track_script {
        check_mysql
        }
}

然后创建check_mysql.sh检测脚本,内容如下:

#!/bin/sh
A=`ps -C mysqld --no-header |wc -l`
if
[ $A -eq 0 ];then
/bin/umount /app/
drbdadm secondary r0
killall keepalived
fi

添加node2(backup)上配置,keepalived.conf内容如下:

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_sync_group VI{
group {
      VI_1
}
notify_master /data/sh/master.sh
notify_backup /data/sh/backup.sh
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.77.189
         }
}

创建master.sh检测脚本,内容如下:

#!/bin/bash
drbdadm primary r0
/bin/mount /dev/drbd0 /app/
/etc/init.d/mysqld start

创建backup.sh检测脚本,内容如下:

#!/bin/bash
/etc/init.d/mysqld stop
/bin/umount /dev/drbd0
drbdadm secondary r0

在主上查看vip:

[[email protected] sh]# ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:3c:a1:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.77.133/24 brd 192.168.77.255 scope global eth0
    inet 192.168.77.189/32 scope global eth0
    inet6 fe80::20c:29ff:fe3c:a15a/64 scope link 
       valid_lft forever preferred_lft forever

模拟主down机:

[[email protected] sh]# poweroff

然后在从上查看,,vip自动切换到从上,,切mysql启动磁盘自动挂载等

discuz安装:

省略,前面已安装多次

主上mysql授权vip权限,,注册数据库用vip注册,,然后用vip访问测试,可以访问

copy一份论坛网站到从上的html目录下面,模拟主down机,,vip自动漂移到从上,然后用vip访问问得出结果,网站正常访问。。。

时间: 2024-10-13 01:55:33

DRBD+keepalived+LAMP+discuz的相关文章

corosync+pacemaker+drbd 实现lamp集群(Discuz)

实验平台: CentOS 6.4 实现功能: 利用corosync+pacemaker+drbd完成lamp平台的高可用,并安装Discuz论坛进行测试 实验步骤: 1. 同步双方hosts文件,加入node6与node7的解析 10.32.9.56 node6 10.32.9.57 node7 实现SSH双机互信 node1 ssh-keygen -t rsa --- 生成一对公私钥文件,默认放在/root/.ssh/id_rsa目录下 ssh-copy-id [email protected

构建MySQL+DRBD+Keepalived高性能架构

前言* DRBD(DistributedReplicatedBlockDevice)是一个基于块设备级别在远程服务器直接同步和镜像数据的开源软件,类似于RAID1数据镜像,通常配合keepalived.heartbeat等HA软件来实现高可用性.这里简单记录仅供参考. 一.实施环境 系统版本:CentOS 5.8 DRBD版本: drbd-8.3.15 Keepalived:keepalived-1.1.15 Master:192.168.149.128 Backup:192.168.149.1

LAMP+discuz网站搭建过程

LAMP+discuz网站的搭建 一. LAMP环境搭建 0x01下载配置虚拟机 网上下载centOS7 64的镜像,然后在vmware里面配置好,我配置的是linux终端桌面,运行快,占内存小. 0x02配置apache 1.ip addr 2.yum install httpd  安装apache软件包 3.systemctl start htttpd.service   启动apache服务 4.systemctl enable httpd.service   #设置开机自启 5.syst

安装lamp+discuz脚本

#!/bin/bash#by 2015-7-25--lijq#directiof for use:源码包和脚本在同一目录且在root目录下的文件里DIR=/mnt/soft/SCRIPT_DIR=/root/autolamp        if [ $UID -ne 0 ]; then        echo -e "\033[32monly for root to install this LAMP\033[0m"                exit 3        fi   

centos7 LAMP+Discuz搭建自己的论坛

一.LAMP环境搭建 文章参考https://www.linode.com/docs/web-servers/lamp/lamp-on-centos-7/ 1.apache相关操作 yum install httpd #保持好习惯,修改配置文件以前备份,以免搞坏了无法使用 cp /etc/httpd/conf/httpd.conf ~/httpd.conf.backup vim /etc/httpd/conf/httpd.conf  在最后加入 KeepAlive Off <IfModule p

lamp +discuz+wordpress+phpmyadmin实例安装详解

应用需求如下:1. 准备两台centos 6,其中一台机器跑mysql,另外一台机器跑apache和nginx + php 2. 同时安装apache和nginx,其中nginx启动80端口,用来跑静态对象(图片.js.css),apache监听88端口,负责跑动态页(php相关的),并且需要由nginx代理对外访问3. mysql服务器需要开启慢查询日志4. 搭建discuz.wordpress以及phpmyadmin,域名分别为bbs.test.com, blog.test.com, php

图文详解阿里云下lamp+discuz搭建实例

lamp(Web应用软件) Linux +Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台.随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注.从网站的流量上来说,70%以上的访问流量是LAMP来提供的,L

MySQL+DRBD+Keepalived

一.     环境描述 OS环境:CentOS 5.5 x86_64 (development环境) DRBD版本: drbd83-8.3.13-2.el5.centos.x86_64 kmod-drbd83-8.3.13-1.el5.centos.x86_64 MySQL版本:MySQL 5.5.28 Keepalived版本:keepalived-1.1.19-1.i386.rpm drbd3:192.168.0.96 drbd4:192.168.0.97 drbd_vip:192.168.

使用DRBD+KEEPALIVED来实现NFS高可用

目录 一 DRBD介绍 二 DRBD的模式 三 DRBD的同步协议 四 实验环境 五 安装配置 关于脑裂(split-brain)处理 一 DRBD介绍 DRBD(Distributed ReplicatedBlock Device)是一种基于软件的,无共享,分布式块设备复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像. 也就是说当某一个应用程序完成写操作后,它提交的数据不仅仅会保存在本地块设备上,DRBD也会将这份数据复制一份,通过网络传输到另一个节点的块设备上,这样