在上一节高可用集群技术之heartbeat应用详解(一),我们分析了heartbeat原理及heartbeat简单的应用,下面我们以实战生产案例应用heartbeat高可用技术:


生产环境应用实例(一):基于heartbeat+nfs实现mysql高可用

(1)nfs共享存储服务配置如下:

--建立分区
# fdisk /dev/sda
# kpartx -l /dev/sda
# kpartx -af /dev/sda
# partx -a /dev/sda

--创建LVM逻辑卷管理
# pvcreate /dev/sda3 
# vgcreate myvg /dev/sda3
# lvcreate -L 10G -n mydata myvg

--格式化LVM逻辑卷并创建mysql用户及目录
# mke2fs -j /dev/myvg/mydata
# groupadd -g 3306 mysql
# useradd -u 3306 -g mysql -s /sbin/nologin -M mysql
# mkdir /mydata
# vim /etc/fstab
追加此行:
/dev/myvg/mydata    /mydata            ext4    defaults    0 0
# mount -a
# mkdir /mydata/{data,binlogs}
# chown -R mysql.mysql /mydata/{data,binlogs}

# ll /mydata/
total 24
drwxr-xr-x 2 mysql mysql  4096 Jul 25 12:11 binlogs
drwxr-xr-x 2 mysql mysql  4096 Jul 25 12:11 data

--输出nfs文件共享
# vim /etc/exports 
/mydata        172.16.0.0/16(rw,no_root_squash)
# exportfs -arv
exporting 172.16.0.0/16:/mydata

(2)配置集群节点node1的mysql数据库服务:

--配置前先检查NFS共享存储是否配置成功
# groupadd -g 3306 mysql
# useradd -g 3306 -u 3306 -s /sbin/nologin -M mysql
# mkdir /mydata 
# mount 172.16.100.9:/mydata /mydata/
# cd /mydata/;ls
binlogs  data  lost+found

--安装mysql数据库服务
# tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv mariadb-10.0.10-linux-x86_64 mysql
# cd mysql/
# chown -R root.mysql ./*
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
# mkdir /etc/mysql
# cp support-files/my-large.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
配置以下选项:
thread_concurrency = 4
datadir = /mydata/data
innodb_file_per_table = ON
log-bin=/mydata/binlogs/master-bin

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld off
--启动mysql服务
# service mysqld start
# /usr/local/mysql/bin/mysql
--创建samleedb数据库测试
MariaDB [(none)]> CREATE DATABASE samleedb;
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| samleedb           |
| test               |
+--------------------+
建立远程mysql远程用户测试:
MariaDB [(none)]>GRANT ALL ON *.* to 'root'@'%' IDENTIFIED BY 'redhat';
MariaDB [(none)]> FLUSH PRIVILEGES;

--停止mysql服务及卸载NFS目录
# service mysqld stop
# umount /mydata/


(3)配置集群节点node2的mysql数据库服务:

--配置前先检查NFS共享存储是否配置成功
# groupadd -r -g 3306 mysql
# useradd -g 3306 -u 3306 -s /sbin/nologin -M mysql
# mkdir /mydata
# mount 172.16.100.9:/mydata /mydata
# ll /mydata/
total 24
drwxr-xr-x. 2 nobody nobody  4096 Jul 25 13:18 binlogs
drwxr-xr-x. 6 nobody nobody  4096 Jul 25 13:18 data
drwx------. 2 root   root   16384 Jul 25 12:06 lost+found
# usermod -s /bin/bash mysql
# su - mysql
su: warning: cannot change directory to /home/mysql: No such file or directory
-bash-4.1$ cd /mydata/data/
-bash-4.1$ touch a
-bash-4.1$ rm a
-bash-4.1$ exit
logout

--安装mysql数据库服务
# tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv mariadb-10.0.10-linux-x86_64 mysql
# cd mysql/
# chown -R root.mysql ./*
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
# mkdir /etc/mysql
# cp support-files/my-large.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
配置以下选项:
thread_concurrency = 4
datadir = /mydata/data
innodb_file_per_table = ON
log-bin=/mydata/binlogs/master-bin

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
#  chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld off
--启动mysql服务
# service mysqld start
# /usr/local/mysql/bin/mysql
--查询数据库及日志文件测试
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| samleedb           |
| test               |
+--------------------+
MariaDB [(none)]> SHOW BINARY LOGS;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-bin.000001 |       461 |
| master-bin.000002 |       327 |
+-------------------+-----------+
--停止mysql服务及卸载NFS目录
# service mysqld stop
# umount /mydata/

(4)使用gui图形化配置heartbeat实现mysql高可用配置

(1)添加mysqlservice组并配置资源VIP:myqlip 如下图所示:

高可用集群技术之heartbeat应用案例详解(二)

(2)添加NFS共享存储资源mysqlstore资源,共享数据库文件。配置如下图:

高可用集群技术之heartbeat应用案例详解(二)

(3)配置资源mysqlserver 如下图所示:

高可用集群技术之heartbeat应用案例详解(二)

mysql高可用测试如下所示:

高可用集群技术之heartbeat应用案例详解(二)


生产环境应用实例(二):基于heartbeat+ipvs实现LVS高可用(简单应用)

1.服务器架构如下:

node1.samlee.com 172.16.100.6 为:Director1
node2.samlee.com 172.16.100.7 为:Director2
node3.samlee.com 172.16.100.11 为:RealServer1
node4.samlee.com 172.16.100.12 为:RealServer2
VIP:172.16.100.99
此时要把前四个地址和主机名同步到各主机,并且按照分配配置主机名

2.配置RealServer服务器:

--配置RealServer1服务器
# echo "<h1>Web from Node3_RS1</h1>" > /var/www/html/index.html
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
# ifconfig lo:0 172.16.100.99 netmask 255.255.255.255 broadcast 172.16.100.99 up
# route add -host 172.16.100.99 dev lo:0
# service httpd start        
# curl http://172.16.100.99
<h1>Web from Node3_RS1</h1>
# curl http://172.16.100.11
<h1>Web from Node3_RS1</h1>

--配置RealServer2服务器
# echo "<h1>Web from Node4_RS2</h1>" > /var/www/html/index.html
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
# ifconfig lo:0 172.16.100.99 netmask 255.255.255.255 broadcast 172.16.100.99 up
# route add -host 172.16.100.99 dev lo:0
# service httpd start        
# curl http://172.16.100.99
<h1>Web from Node4_RS2</h1>
# curl http://172.16.100.12
<h1>Web from Node4_RS2</h1>

2.配置Director服务:

--配置Director1集群节点(删除所有集群节点资源,并停止heartbeat服务)
# service heartbeat stop
# ssh node2 'service heartbeat stop'
--安装ipvsadm
# yum -y install ipvsadm
# chkconfig ipvsadm off
# ifconfig eth0:0 172.16.100.99/16 up
# route add -host 172.16.100.99 dev eth0:0
# ipvsadm -A -t 172.16.100.99:80 -s rr
# ipvsadm -a -t 172.16.100.99:80 -r 172.16.100.11 -g
# ipvsadm -a -t 172.16.100.99:80 -r 172.16.100.12 -g
# service ipvsadm save
# service ipvsadm stop
# ifconfig eth0:0 down
------------------------------------------------------------
------------------------------------------------------------
--配置Director2集群节点
# yum -y install ipvsadm
# chkconfig ipvsadm off
# scp node1:/etc/sysconfig/ipvsadm /etc/sysconfig/
# ifconfig eth0:0 172.16.100.99/16 up
# route add -host 172.16.100.99 dev eth0:0
# ipvsadm -R < /etc/sysconfig/ipvsadm
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.100.99:80 rr
  -> 172.16.100.11:80             Route   1      0          0         
  -> 172.16.100.12:80             Route   1      0          0 
# service ipvsadm stop
# ifconfig eth0:0 down
--启动heartbeat服务
# service heartbeat start
# ssh node1 'service heartbeat start'
---使用gui图形化配置LVS高可用---
配置资源如下:
组:director
----资源:vip
--------资源类型:ip:172.16.100.99
----------------:nic:eth0
----------------:ifabel:0
----------------:cidr_netmask:32
----------------:broadcast:172.16.100.99
----------------:lvs_support:true
----资源:ipvsadm
--------资源类型:ipvsadm

#使用heartbeat-gui图形化配置过程如下:

高可用集群技术之heartbeat应用案例详解(二)

##测试heartbeat+LVS高可用:

高可用集群技术之heartbeat应用案例详解(二)



生产环境应用实例(二):基于heartbeat+ipvs实现LVS高可用(实现健康状态检测)


1.服务器架构如下:

node1.samlee.com 172.16.100.6 为:Director1
node2.samlee.com 172.16.100.7 为:Director2
node3.samlee.com 172.16.100.11 为:RealServer1
node4.samlee.com 172.16.100.12 为:RealServer2
VIP:172.16.100.99
此时要把前四个地址和主机名同步到各主机,并且按照分配配置主机名

2.配置RealServer服务器:

--配置RealServer1服务器
# echo "<h1>Web from Node3_RS1</h1>" > /var/www/html/index.html
#  echo "OK" > /var/www/html/.health.html
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
# ifconfig lo:0 172.16.100.99 netmask 255.255.255.255 broadcast 172.16.100.99 up
# route add -host 172.16.100.99 dev lo:0
# service httpd start        
# curl http://172.16.100.99
<h1>Web from Node3_RS1</h1>
# curl http://172.16.100.11
<h1>Web from Node3_RS1</h1>

--配置RealServer2服务器
# echo "<h1>Web from Node4_RS2</h1>" > /var/www/html/index.html
#  echo "OK" > /var/www/html/.health.html
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
# ifconfig lo:0 172.16.100.99 netmask 255.255.255.255 broadcast 172.16.100.99 up
# route add -host 172.16.100.99 dev lo:0
# service httpd start        
# curl http://172.16.100.99
<h1>Web from Node4_RS2</h1>
# curl http://172.16.100.12
<h1>Web from Node4_RS2</h1>

2.配置Director服务:

--配置Director1集群节点(删除所有集群节点资源,并停止heartbeat服务)
# service heartbeat stop
# ssh node2 'service heartbeat stop'
--安装ipvsadm
# yum -y install ipvsadm
# chkconfig ipvsadm off
--安装配置ldirectord
# rm -rf /etc/sysconfig/ipvsadm    --删除ipvs规则
# yum -y install  heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
# chkconfig ldirectord off
# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
# vim /etc/ha.d/ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
# Sample for an http virtual service
virtual=172.16.100.99:80
        real=172.16.100.11:80 gate
        real=172.16.100.12:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        request=".health.html"
        receive="OK"
        scheduler=rr
--启动http服务
# echo "<h1>Maintanance Time</h1>" > /var/www/html/index.html
# service httpd start

------------------------------------------------------------
------------------------------------------------------------
--配置Director2集群节点
# rm -rf /etc/sysconfig/ipvsadm    --删除ipvs规则
# yum -y install  heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
# chkconfig ldirectord off
# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
# vim /etc/ha.d/ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
# Sample for an http virtual service
virtual=172.16.100.99:80
        real=172.16.100.11:80 gate
        real=172.16.100.12:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        request=".health.html"
        receive="OK"
        scheduler=rr
--启动http服务
# echo "<h1>Maintanance Time</h1>" > /var/www/html/index.html
# service httpd start

--启动heartbeat服务
# service heartbeat start
# ssh node1 'service heartbeat start'

---使用gui图形化配置LVS高可用---
配置资源如下:
组:director
----资源:vip
--------资源类型:ip:172.16.100.99
----------------:nic:eth0
----------------:ifabel:0
----------------:cidr_netmask:32
----------------:broadcast:172.16.100.99
----------------:lvs_support:true
----资源:ldirectord
--------资源类型:configfile:/etc/ha.d/ldirectord.cf

#使用heartbeat-gui图形化配置过程如下:

高可用集群技术之heartbeat应用案例详解(二)

##在node2节点上查询ipvs规则

# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.100.99:80 rr
  -> 172.16.100.11:80             Route   1      0          0         
  -> 172.16.100.12:80             Route   1      0          0

##停止Rs1和Rs2测试如下:

高可用集群技术之heartbeat应用案例详解(二)

以上关于heartbeat所有应用内容。