转载

Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用及分发搭建

 环境介绍:


主节点mysql1:192.168.9.25 

主节点mysql2:192.168.9.26

Heartbeat的写的VIP:192.168.9.231

LVS1:192.168.9.27

LVS2:192.168.9.28

keepalived 分发的VIP:192.168.9.230

要分发的mysql1: 192.168.9.29

要分发的mysql2:192.168.9.30

 

整体安装注意:1drbd的两个节点,同一时期只有那个主节点能挂载盘DRBD的那个盘,2,把MySQL的数据文件,日志文件,临时文件目录要写到DRBD那个盘也就是datadir tmpdir log_error log-bin 这几个参数3,关于MySQL的配置文件(/etc/my.cnf

也应该放到drdb的那个盘上,并且把主节点和从节点上/etc目录下的my.cnf删掉,但是必须要建立软连接,到/etc/my.cnf4lvs+keepalived 架构中,lvs实现分发,keepalived实现lvs的高可用,keepalived配置里vip,作为分发的vip.


 

 

heartbeat+drbd搭建流程:
    如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbdLinux下创建一个高可用(HA)的集群服务器。
         DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了

   heartbeat 实现当本地节点出问题后,自动检测出来,并且完成主备切换,实现高可用,

 区别于MHA: mha 中从change 的时候指向的是真的IP。而DRBD指向的vip

1,DRBD的部署(两个主节点都要部署)

DRBD的安装,centOS6.5自带的yum没有drbdHeartbeat的包,需要更新yum源,再安装,步骤如下:
[root@master2 ~]# yum install kernel-devel  ##升级内核
[root@master2 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm   ## centOS6的第三方工具包集
[root@master2 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpmHeartbeat+DRBD+Mysql+Lvs+Keepalived高可用及分发搭建  ## centOS5的第三方工具包集
[root@master2 ~]# yum -y install drbd83-utils kmod-drbd83
[root@master2 ~]# modprobe drbd         #加载DRBD。执行该命令如果报错,将系统重启后再执行。
[root@master2 ~]#  lsmod |grep drbd

drbd                  332493  4       #显示此条信息,说明drbd加载成功

2,DRBD的配置

配置之前需要先使用fdisk -ldf -v看下系统的分区情况,这里用到系统现有的/dev/sdb分区做为drbd的配置。

2 . 对于DRBD的配置,配置/etc/drbd.confhosts文件,dbserver1dbserver2hosts添加的内容如下:

[root@master1 ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.9.25    master1
192.168.9.26    master2

3.  #配置/etc/sysconfig/network文件,该文件两边配置

[root@master1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=master1 、master2

4.  /etc/drbd.conf文件的内容如下(dbserver1dbserver2的配置一样)

[root@master1 ~]# cat  /etc/drbd.conf               ##注意真正配置的时候,要把##注释的东西删掉。

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

#include "drbd.d/global_common.conf";

#include "drbd.d/*.res";

global { usage-count yes; }

common { syncer { rate 10M; } }                 ###设置主,备节点同步的的网络速率最大值,单位是字节

resource r1 {                                 

        protocol C;                          ##使用drbd的第三种同步协议,表示收到远程主机的写入确认后认为写入完成

        startup {

        }

 disk {

                on-io-error detach;

               # size 1G;

                     }

 net {

        }

   on mysql_master1 {

                device /dev/drbd0;

                disk /dev/sdb;  #这里磁盘或分区两边最好一样,也可以用逻辑分区

                address 192.168.9.25:7888; 

                meta-disk internal;

        }

   on mysql_master2 {

                device /dev/drbd0;

                disk /dev/sdb;     

                address 192.168.9.26:7888;   #端口和上面一样都设置成7888就可以

                meta-disk internal;

        }

}

5 .

 先执行dd测试命令,覆盖文件系统中 的设备块信息,不然的话,在第6步创建资源的时候会报错  

Dd  if=/dev/zero of=/dev/sdb  bs=1M count=100

6.  配置好drbd以后,就需要使用命令在dbserver1dbserver2上创建drbd元数据库信息,使用如下命令

drbdadm create-md r1  r1为配置文件中resource后面定义的资源名,如下显示建立资源成功,执行命令时配置文件中的disk /dev/sdb的硬盘处在不挂载的情况,才行,两台机器都不挂载。

[root@master1 ~]# drbdadm create-md r1       

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created.

Success

6 . DRBD的启动和停止

[root@master1 ~]# /etc/rc.d/init.d/drbd start    #启动drbd

[root@master1 ~]# /etc/rc.d/init.d/drbd stop    #停止drbd

[root@master1 ~]# /etc/rc.d/init.d/drbd restart  #重启drbd

7 . 查看DRBD状态

watch -n 1 cat /proc/drbd

/etc/init.d/drbd status

8 . 设置当前节点为主节点,并进行格式化和挂载  注意只有主节点能挂载,

[root@master1 ~]#drbdadm  primary all  

如果上条命令不成功,则执行下面命令。

[root@master1 ~]# drbdadm -- --overwrite-data-of-peer primary all

[root@master1 ~]# mkfs.ext3  /dev/drbd0        ##这个也就是/dev/sdb

[root@master1 ~]# mkdir  -p /mysql/data       ##创建drbd那个盘的挂载点

[root@master1 ~]# mount /dev/drbd0  /mysql/data

drbd挂载后可以往drbd目录也就是/mysql/data目录写数据,然后主备切换,如果数据同步,表明drbd搭建成功。

主切换成从,需要先卸载文件系统,再执行降级为从的命令:

[root@master1 ~]#umount /dev/drbd0

[root@master1 ~]#drbdadm secondary all

从切换成主,要先执行升级成主的命令然后挂在文件系统:

[root@master1 ~]#drbdadm  primary all 如果不成功drbdsetup /dev/drbd0 primary -o

[root@master1 ~]#mount /dev/drbd0  /mysql/data  

 9,如下可以判断出是master1是Primary状态。  

[root@master1 ~]# more  /proc/drbd   | grep ro 

0 : cs : Connected ro : Primary/Secondary  ds:UpToDate/UpToDate C r------


DRBDMysql的迁移  (这个步骤的目的就是要把保证数据目录,日志目录,临时文件目录在drbd那个目录下)

 1. 将数据目录指定到drbd挂载的mysql目录中并将my.cnf配置文件放到mysql中即可

 

  1.  关闭dbserver1dbserver2mysql

    /etc/rc.d/init.d/mysqld stop

b)  dbserver1上创建存放数据库数据的目录及日志的目录

mkdir  -p /mysql/data  /mysql/log  /mysql/tmp 

c) 修改mysql目录的属主

chown -R  mysql:mysql  /mysql

d)   dbserver1将配置文件移动到mysql目录中:

mv /etc/my.cnf  /mysql

删除dbserver2上的/etc/my.cnfrm -f /etc/my.cnf

dbserver1dbserver2上执行如下命令创建软链接,需要写全路径

ln -s /mysql/my.cnf   /etc/my.cnf   

e)         修改/etc/my.cnf的数据目录指向/mysql/data

f)         将原来的mysql数据文件移动到/mysql/data

g)  启动mysql,如果没有移动数据目录内容,需要将mysql重新初始化再启动mysql

初始化过程:{(1)进入./mysql/bin目录下,执行脚本./mysql_install_db  
(2)
执行完(1)后,此时会在./mysql/var目录下创建两个目录文件mysqltest
(3)
修改mysqltest两个目录及目录下所有文件的权限:chown mysql:mysql -R mysql test}

  1. Mysql-master1 上主配文件/etc/my.cnf配置如下,当然master2master1用的是同一个配置文件,不需要配置。

 [root@mysql_master1 ~]# cat /etc/my.cnf

[mysql]

default-character-set=utf8

[mysqld]

user=mysql

pid-file=/var/run/mysql/mysql.pid

#socket=/var/run/mysql/mysql.sock

socket=/tmp/mysql.sock

basedir=/usr/local/mysql

datadir=/mysql/data

tmpdir=/mysql/tmp

max_connections = 2000   #定义最大连接数

server-id=3 #每个MySQL server的此选项都必须唯一

 

###begin innodb settiong###

innodb_file_per_table=1

innodb_lock_wait_timeout=500

innodb_buffer_pool_size=512M

###end innodb setting###

 

###key buffer size set###

key-buffer-size=500M

sort_buffer_size=500M

max_user_connections=1000

table-cache=5000

query_cache_size=500M

###key buffer size set###

 

###begin bin log###

log-bin=/mysql/log/binlog

log-bin-index=/mysql/log/binlog.index

expire-logs-days=90

###end bin log###

 

###begin general log###

#general_log=1

#general_log_file=/mysql/log/record.log

###end general log###

 

###begin error log###

log_error=/mysql/log/error.log

###end error log###

 

###begin skip name resolve###

###end skip name resolve###

 

###being slow query log###

slow_query_log=1

long_query_time=60

slow_query_log_file=/mysql/log/slow.log

###end slow query log###

 3. Mysql的主从配置

  mysql主上创建复制账号

  mysql> create user repl identified by ‘%#7a@H)’;

  为从mysql授权

 mysql> GRANT replication slave ON *.* TO 'repl'@'%' ;

 mysql> Flush privileges; 

 4. Mysql/etc/my.cnf配置

 [root@localhost ~]# cat /etc/my.cnf

[mysql]

default-character-set=utf8

[mysqld]

user=mysql

pid-file=/var/run/mysql/mysql.pid

#socket=/var/run/mysql/mysql.sock

socket=/tmp/mysql.sock

basedir=/usr/local/mysql

datadir=/wgz/mysql/data

tmpdir=/wgz/mysql/tmp

max_connections = 2000   #定义最大连接数

server-id=12 #每个MySQL server的此选项都必须唯一

read_only=1   #设置只读

###begin innodb settiong###

innodb_file_per_table=1

innodb_lock_wait_timeout=500

innodb_buffer_pool_size=512M

###end innodb setting###

 

###key buffer size set###

key-buffer-size=500M

sort_buffer_size=500M

max_user_connections=1000

table-cache=5000

query_cache_size=500M

###key buffer size set###

 

###begin bin log###

log-bin=/wgz/mysql/log/binlog

log-bin-index=/wgz/mysql/log/binlog.index

expire-logs-days=90

###end bin log###

 

###begin general log###

#general_log=1

#general_log_file=/wgz/mysql/log/record.log

###end general log###

 

###begin error log###

log_error=/wgz/mysql/log/error.log

###end error log###

 

###begin skip name resolve###

###end skip name resolve###

 

###being slow query log###

slow_query_log=1

long_query_time=60

slow_query_log_file=/wgz/mysql/log/slow.log

###end slow query log###

5.mysql从上做指向主的操作

mysql>change master to master_host='192.168.15.47', master_port=3306, master_user='repl', master_password='%#7a@H)', master_log_file='binlog.000011',master_log_pos=3234;

启动主从复制

mysql> start slave;

 #查看同步状态

mysql> show slave status /G

         Slave_IO_Running: Yes

     Slave_SQL_Running: Yes

Slave_IO_RunningSlave_SQL_Running:两个显示Yes说明主从同步成功。

 

Heartbeat的部署  (自动完成两个主之间的切换)

  1. 安装heartbeat,需安装epel扩展源

[root@master1 ~]# yum -y install epel-release

[root@master1 ~]# yum  install -y heartbeat

2. .Hearbeat的配置主要包括三个配置文件,authkeysha.cfharesources的配置,下面就分别来看!

Authkerys密码认证文件的配置,两台机器配置一样。

[root@master1 ~]# vim /etc/ha.d/authkeys

auth 1

1 crc

[root@master1 ~]# chmod 600 /etc/ha.d/authkeys  #配置完成后,修改文件的权限,否者heartbeat启动报错

  1. ha.cf的配置

Master1(dbserver1)ha.cf的配置

[root@master1 ~]#  cat  /etc/ha.d/ha.cf

logfile /var/log/ha-log

logfacility     local0

keepalive 2

deadtime 30

warntime 10

initdead 60

udpport 694

ucast eth0 192.168.9.26       #写对方的ip

auto_failback off     ##  建议使用off,如果使用on会导致主备机之间来回切换,增加成本。

node    master1

node     master2

ping 192.168.15.254             #网关就行

respawn hacluster /usr/lib64/heartbeat/ipfail

Master2(dbserver2)ha.cf的配置

[root@master2 ~]# cat  /etc/ha.d/ha.cf

logfile /var/log/ha-log

logfacility     local0

keepalive 2

deadtime 30

warntime 10

initdead 60

udpport 694

ucast eth0 192.168.9.25         #写对方的ip

auto_failback on

node    master1

node    master2

ping   192.168.9.254

respawn hacluster /usr/lib64/heartbeat/ipfail

  1. haresources的配置,两台机器配置完全一样,mysqld需要做成服务,放在/etc/rc.d/init.d/目录下,配置配置如下:

[root@master1 ~]#  cat /etc/ha.d/haresources
master1 IPaddr::192.168.9.231/24/eth0:0 drbddisk::r1 Filesystem::/dev/drbd0::/mysql/data::ext3 mysqld

以上/etc/ha.d/haresources配置文件说明:192.168.9.231/24/eth0:0192.168.9.231/24mysql高可用的vipeth0:0:表示vipeth0:0口,r1:表示上面drbd定义的资源库,/dev/drbd0:表示以上drbd自己形成的硬盘分区,/mysql/data:表示drbd挂载的目录,mysqld:表示mysql的服务。

5 . Heartbeat的管理

配置好heartbeat之后,需要将mysql从自启动服务器中去掉,因为主heartbeat启动的时候会挂载drdb文件系统以及启动mysql,切换的时候会将主上的mysql停止并卸载文件系统,从上会挂载文件系统,并启动mysql。因此需要做如下操作:

[root@master1 ~]#chkconfig mysqld off

[root@master1 ~]#chkconfig --add heartbeat

[root@master1 ~]#chkconfig heartbeat on

[root@master1 ~]#service  heartbeat start    #启动Heartbeat

6. Heartbeat+DRBD+Mysql测试

用脚本判断mysql宕后,脚本将 heartbeat服务stop掉,vipdrbd的分区挂载自转移到drbd从的上,当主mysql修复启动,在将heartbeat服务启动,vipdrbd的分区挂载又自转移到drbd主的上。

7. 判断mysql服务及停止heartbeat服务脚本,在主的上后台执行,nohup  /opt/check_mysql_heartbeat.sh &,脚本中的password需要改成当前mysqlroot密码。

[root@mysql_master1 opt]# cat check_mysql_heartbeat.sh

#!/bin/bash

trap 'echo  PROGRAM INTERRUPTED; exit 1'  INT

username=root

password=123456

n=0

log='/var/log/mysqlmon.log'

while true

do

    if mysql  -u${username} -p${password} -e "use test"   >&/dev/null

    then

        echo `date +"%Y-%m-%d  %H:%M:%S"`  mysqld is alive!  >> ${log}

        n=0

    else

        echo  "`date +"%Y-%m-%d  %H:%M:%S"`  mysqld  cannot be  connected!"  >> ${log}

        n=$[n + 1]

        if [ $n -eq 3 ]

        then

            /etc/init.d/heartbeat stop

            echo  "`date +"%Y-%m-%d  %H:%M:%S"`  mysqld  switched to backup!" >> ${log}

            echo "`date +"%Y-%m-%d  %H:%M:%S"`  mysqld  switched to backup"

            break

        fi

    fi

    sleep 10

done

 

测试总结:

判断脚本放在drbd主的上后台执行就行,从的上不用,如果主的mysql宕掉后,脚本将heartbeat服务杀掉,vip和挂载自动切换到从上,等主的mysqlheartbeat修复启动后,vip和挂载又自动切换到主。

 

二: lvs+keepalived 安装部署

试验环境:

LVS1:192.168.9.27

LVS2:192.168.9.28

keepalived  的VIP:192.168.9.230

要分发的mysql1: 192.168.9.29

要分发的mysql2:192.168.9.30

具体安装步骤:

#下载ipvsadm (也就是LVS程序包)

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

#解压

[root@lvs-a ~]# tar -zxf ipvsadm-1.24.tar.gz

#进入该ipvsadm目录  

[root@lvs-a ~]# cd /usr/local/ipvsadm-1.24

#安装开发包及库文件

[root@lvs-a ipvsadm-1.24]# yum install zlib-devel gcc gcc-c++ openssl-devel pcre-devel libtool kernel-devel ncurses-devel -y

#创建内核连接

[root@lvs-a ipvsadm-1.24]# ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux  #2.6.18-194.el5-i686)根据系统版本修改。

#编译安装

[root@lvs-a ipvsadm-1.24]# make;make install

#进入目录

[root@lvs-a ~]# cd  /usr/local/

#下载keepalived

wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz

#解压

[root@lvs-a ipvsadm-1.24]# tar -zxf keepalived-1.2.12.tar.gz

#进入该keepalived目录

[root@lvs-a ~]cd keepalived-1.2.12

#编译安装

[root@lvs-a keepalived-1.2.12]#./configure --prefix=/usr/local/keepalived  #这里编译完后面显示三个yes,说明编译成功,否则安装不成功。

#以下为1.2.12版本./configure结果如下

Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用及分发搭建

#如果为1.1.17版本./configure结果如下

 

Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用及分发搭建

[root@lvs-a keepalived-1.2.12]#make

[root@lvs-a keepalived-1.2.12]#make install

#复制启动文件

[root@lvs-a keepalived-1.2.12]#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/    ##这样才能用service keepalived 的命令。

#复制命令文件

[root@lvs-a keepalived-1.2.12]#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

#复制【配置文件

[root@lvs-a keepalived-1.2.12]#cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/

#新建主配置文件目录

[root@lvs-a keepalived-1.2.12]#mkdir -p /etc/keepalived

#编辑配置文件LVS1

[root@lvs-a sysconfig]#vim  /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lvs
}

vrrp_sync_group http {                            #设置vrrp组,随便起名字,
group {
           mysql                                             ###随便起的名字
         }
}

vrrp_instance apache {                          ###定义一个vrrp实例
    state MASTER                                     #设置lvs的状态, MASTERBACKUP两种,必须大写,主节点master,从节点backup
    interface eth0                                      #设置对外服务的接口,也就是/LVS监控的网络接口
    virtual_router_id 01                             #设置lvs监听的接口,同一实例下virtual_router_id必须相同 ,随便起名字
    priority 500                                          # #设置优先级,数值越大,优先级越高 ,也就是主节点的这个值大
    advert_int 1                                          ## //MASTERBACKUP负载均衡器之间同步检查的时间间隔,单位是秒 

    authentication {                                   #设置验证类型和密码
        auth_type PASS                                 
        auth_pass aabb                                ##密码
    }
    virtual_ipaddress {                          ##设置keepalived的VIP
        192.168.9.230                           #如果有多个,往下加就行了 

        #192.168.9.231

        #192.168.9.232

   }
}

virtual_server 192.168.9.230 3306 {               ##定义虚拟服务器 
    delay_loop 6                                              #健康检查时间,单位是秒。
    lb_algo rr                                                   #负载调度算法,这里设置为rr,即轮询算法
    lb_kind DR                                                 #LVS实现负载均衡的机制,可以有NATTUNDR三个模式可选 
    nat_mask 255.255.255.0                             #可以不填写这个参数,
#    persistence_timeout 50
    protocol TCP

    real_server 192.168.9.29 3306 {                      ##要分发的目标服务器IP,
        weight 1                                                        #设置权重,也就是分发的次数,这里表示每个分发一次,
        TCP_CHECK {                                                  #通过tcpcheck判断RealServer的健康状态 
              connect_timeout 3                                     ##连接超时时间 

              #nb_get_retry 3                                           #重连次数 ,有默认值
              #delay_before_retry 3                                #
重连间隔时间    有默认值                       
              connect_port 3306
            }
        }
    real_server 192.168.9.30 3306 {
        weight 1
        TCP_CHECK {
              connect_timeout 3
              connect_port 3306
            }
        }
}

#配置完成重启keepalived

[root@lvs-a sysconfig]#service keepalived restart

#添加自己的网关

[root@lvs-a network-scripts]# route add -host 192.168.9.254  dev eth0


 #安装keepalivedlvs1相同

 #安装keepalived后配置LVS2,配置如下:

[root@lvs-b ~]# cat /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
   router_id lvs
}

vrrp_sync_group http {
group {
           mysql
         }
}

vrrp_instance apache {
    state BACKUP 
    interface eth0
    virtual_router_id 01
    priority 400
    advert_int 1
 #  nopreempt
    authentication {
        auth_type PASS
        auth_pass aabb
    }
    virtual_ipaddress {
        192.168.9.230
    }
}

virtual_server 192.168.9.230 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
#    persistence_timeout 50
    protocol TCP

    real_server 192.168.9.29 3306 {
        weight 1
        TCP_CHECK {
              connect_timeout 3
              connect_port 3306
            }
        }
    real_server 192.168.9.30 3306 {
        weight 1
        TCP_CHECK {
              connect_timeout 3
              connect_port 3306
            }
        }
}

       

#配置完成重启keepalived

service keepalived restart

#添加自己的网关

route add -host 192.168.9.254  dev eth0

#查看

route -n

#查看分发结果

Ipvsadm -ln

#清除分发

Ipvsadm -C

#查看虚拟ipVIP

Ip addr

#配置 mysql-realserver1  192.168.9.29上执行:

[root@lvs-a ~]# ifconfig lo:0 192.168.9.230 netmask 255.255.255.0  broadcast 192.168.9.230 up       ##设置的一个临时的IP

设置到主机的路由

[root@lvs-b ~]# route add -host 192.168.9.230 dev lo:0

设置默认路由

[root@lvs-b ~]#route add default gw 192.168.9.137   

保证arp协议在连接过程中,路由器上,只知道网络中192.168.9.230对应的是分发器

[root@lvs-b ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore           

[root@lvs-b ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

#配置 mysql-realserver2  192.168.9.30上执行:

[root@lvs-a ~]# ifconfig lo:0 192.168.9.230 netmask 255.255.255.0  broadcast 192.168.9.230 up 

设置到主机的路由

[root@lvs-a ~]#route add -host 192.168.9.230 dev lo:0

设置默认路由

[root@lvs-a ~]#route add default gw 192.168.153.137

保证arp协议在连接过程中,路由器上,只知道网络中192.168.9.230对应的是分发器

[root@lvs-a ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore           

[root@lvs-a ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

#两台mysql-realserver配置完成后启动分别mysql

Service mysqld start

LVS分发测试:

1,在  mysql-realserver1(192.168.9.29)  创建一个名字叫做slave1的数据库:

mysql> create database slave1;

Query OK, 1 row affected (0.00 sec)

2,在mysql-realserver2  192.168.9.30)上创建一个名字叫做slave2的数据库:

mysql> create database slave2  ; 

Query OK, 1 row affected (0.00 sec)

3,在一台能ping通mysql-realserver1和mysql-realserver2的机器上执行(注意不要在正在用着的lvs机器上执行,例如我现在lvs用着[root@lvs-a ~]#这个机器,如果你在这里执行他会报错

[root@lvs-a ~]#  mysql -uroot -pliuwenhe -h192.168.9.230 -e'show databases';
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.9.230' (111)
You have new mail in /var/spool/mail/root

[root@lvs-b ~]# mysql -uroot -pliuwenhe -h192.168.9.230 -e'show databases';

+--------------------+
| Database           |
+--------------------+
| information_schema | 
| he                 | 
| liuwenhe           | 
| mysql              | 
| performance_schema | 
| slave1             | 
| test               | 
+--------------------+
[root@lvs-b ~]# mysql -uroot -pliuwenhe -h192.168.9.230 -e'show databases';
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| he                 | 
| liuwenhe           | 
| mysql              | 
| performance_schema | 
| slave2             | 
| test               | 
+--------------------+

 

 说明lvs分发成功。

 

 


 

、故障处理:

当主drbd (mysql)宕掉以后恢复过程:

1. 先恢复启动主drbd上的mysql服务

  service mysqld start

2. 确定主drbdmysql启动后,在启动heartbeat服务,这时vip和挂载自动切换到主drbd

 service heartbeat start

3. 在主drbd上执行后台脚本

 nohup /opt/check_mysql_heartbeat.sh &

 

 六、参考网址

http://blog.chinaunix.net/uid-20639775-id-3337484.html  #部署主要参考网址

http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html#安装drbd网址

http://www.51ou.com/browse/Apache/60681.html  #安装heartbeat网址

 

 

迁移mysql说明mysql迁移需要注意的步骤

部署在drbd搭建成后,主从切换drbd同步没有问题,将mysql的配置文件移动到drbd的挂载目录下,将drbd从上的配置文件删除或改名,然后将挂载目录下的配置文件软连接到/etc/my.cn,因为他们用的同一个配置文件,在挂载目录下,建立mysql的数据目录和日志目录,并且修改目录的属主mysql,如果原有的mysql有数据将数据和日志移动到新建的目录下,配置文件也将相应的目录修改,然后重启mysql,如果不移动数据,数据库需要初始化,然后重启,这时可以参照网址上的步骤手动切换drbd的主从,看从drbdmysql是否能正常启动,在主上mysql插入的数据是否同步,如果同步,然后就可以启动已经配置好的heartbeat服务,这时看当前主drbd上挂载和vip是否显示,在主drbd上执行后台脚本后,关闭主drbd上的mysql服务,看从drbd上的mysql是否正常启动,以及挂载和vip是否自动切换到从上,如果以上三项正常飘移,说明搭建成功。

 

故障处理说明:

   当主mysql宕以后,需要修复时,需要先启动heartbeat,否则drbd不会飘到主上,自然挂载也不会切换过来,更别说启动mysql了,mysql主配置文件都在drbd的磁盘上,所以修复时,启动heartbeat后,看主drbdmysql是否正常启动,如果没有,解决后再启动。

 

 

 

附录1

下面是keepalived详细配置文件解析:

[root@localhost kernels]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived 
global_defs { 
#  notification_email { 
#    acassen@firewall.loc 
#    failover@firewall.loc 
#    sysadmin@firewall.loc 
#  } 
#  notification_email_from Alexandre.Cassen@firewall.loc 
#  smtp_server 192.168.200.1
#  smtp_connect_timeout 30
router_id LVS_DEVEL    //
负载均衡器标识,同一网段内,可以相同 

vrrp_sync_group VGM {  //
定义一个vrrp 
group { 
VI_1 


vrrp_instance VI_1 {    //
定义vrrp实例 
state MASTER        //
LVSMASTER,从的BACKUP 
interface eth0      //LVS
监控的网络接口 
virtual_router_id 51  //
同一实例下virtual_router_id必须相同 
priority 100            //
定义优先级,数字越大,优先级越高 
advert_int 5          //MASTER
BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 
authentication {      //
验证类型和密码 
auth_type PASS 
auth_pass 1111

virtual_ipaddress {    //
虚拟IP 
192.168.1.8
#        192.168.1.9    //
如果有多个,往下加就行了 
#        192.168.1.7


virtual_server 192.168.1.8 80 {    //
定义虚拟服务器 
delay_loop 6                  //
健康检查时间,单位是秒 
lb_algo rr              //
负载调度算法,这里设置为rr,即轮询算法 
lb_kind DR              //LVS
实现负载均衡的机制,可以有NATTUNDR三个模式可选 
persistence_timeout 50        //
会话保持时间,单位是秒(可以适当延长时间以保持session 
protocol TCP                  //
转发协议类型,有tcpudp两种 
sorry_server 127.0.0.1 80      //web
服务器全部失败,vip指向本机80端口 
real_server 192.168.1.16 80 {  //
定义WEB服务器 
weight 1                  //
权重 
TCP_CHECK {                //
通过tcpcheck判断RealServer的健康状态 
connect_timeout 5      //
连接超时时间 
nb_get_retry 3        //
重连次数 
delay_before_retry 3  //
重连间隔时间 
connect_port 80        //
检测端口 


real_server 192.168.1.17 80 { 
weight 1
TCP_CHECK { 
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80


}

 ,解决后再启动。

正文到此结束
Loading...