CentOS7 平台 源码编译安装Heartbeat,并实现nginx的HA集群

参考
http://www.91tl.top/?p=269
http://blog.csdn.net/liaomin416100569/article/details/76087448

1.修改主机名
主服务器:hostname=master
从服务器:hostname=slave

(这一部分不用做
网卡设置:(这个心跳IP不确定要不要,我暂时没有用)
xenserver的networking选项中添加网卡

# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth1
# vim ifcfg-eth1

主要修改网卡设备名称和IP地址,删除uuid
启用网卡 #ifup eth1
重启服务

# /etc/init.d/network restart

(注意:有时候重启网卡服务,系统识别不到新网卡信息,这时候你需要重新启动一下操作系统)
卸载网卡 ifconfig eth1 down

我的配置:
主服务器:
eth0:192.168.192.111
从服务器
eht0:192.168.192.110

(这一部分不需要
虚拟VIP:192.168.192.211
手工配置辅助IP:ip addr add 192.168.192.211/24 dev eth0
ip add命令可以查看辅助IP情况
删除辅助IP ip addr del 192.168.40.20/24 dev eth0

2.先关闭防火墙和selinux (selinux是不是一定要关不确定,暂时没有关)
查看selinux状态:getenforce sestatus -v
关闭sestatus :setenforce 0
3.配置hosts文件(两个都要做)
vim /etc/hosts
增加:
192.168.192.111 master
192.168.192.110 slave
4.安装heartbeat (2台都操作)
(1)安装配置HeartBeat
下载:http://www.linux-ha.org/wiki/Downloads,从官方下载最新的HeartBeat版本:Heartbeat 3.0.6和Cluster Glue 1.0.12,Resource Agents 3.9并安装!
(2)配置基础环境

# yum install -y bzip2 autoconf automake libtool glib2-devel libxml2-devel \
bzip2-devel libtool-ltdl-devel asciidoc libuuid-devel

(3)安装glue

# tar xf 0a7add1d9996.tar.bz2         (下载的安装包的名字)
# cd Reusable-Cluster-Components-glue–0a7add1d9996/
# groupadd haclient
# useradd -g haclient hacluster
# ./autogen.sh
# ./configure --prefix=/usr/local/heartbeat/
# make && make install

(4)安装Resource Agents

# tar xf v3.9.6.tar.gz
# cd resource-agents-3.9.6/
# ./autogen.sh
# export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
# ./configure --prefix=/usr/local/heartbeat/     (这一步的时候报错:configure: error: C compiler cannot create executables。解决:export CFLAGS= )(究竟能不能解决,我也不知道)
# vim /etc/ld.so.conf.d/heartbeat.conf
/usr/local/heartbeat/lib
# ldconfig
# make && make install

(5)安装HeartBeat

# tar xf 958e11be8686.tar.bz2
#cd Heartbeat-3-0-958e11be8686
# ./bootstrap
# export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
# ./configure --prefix=/usr/local/heartbeat/
# vim /usr/local/heartbeat/include/heartbeat/glue_config.h
/*define HA_HBCONF_DIR “/usr/local/heartbeat/etc/ha.d/”*/ #把这一行用/**/注释掉
# make && make install

5.Heartbeat的配置
(1)拷贝配置文件(System configuration = “/usr/local/heartbeat/etc” 默认的配置需要置于 /usr/local/heartbeat/etc目录下 默认该目录不存在配置文件)

# cp  /usr/local/heartbeat/share/doc/heartbeat/ha.cf  /usr/local/heartbeat/etc/ha.d
# cp /usr/local/heartbeat/share/doc/heartbeat/authkeys /usr/local/heartbeat/etc/ha.d
# cp  /usr/local/heartbeat/share/doc/heartbeat/haresources /usr/local/heartbeat/etc/ha.d

(2)修改配置authkeys(该文件表示发送心跳时 机器用于验证的key的hash算法 双方必须配置成一致的密码)

# vim /usr/local/heartbeat/etc/ha.d/authkeys

增加或者修改:
auth 3 表示使用id为3的验证 下边需要定义一个3的验证算法 #(这里要保持一致,输了2下面就对应2,输了3下面就对应3)
3 md5 Hello! #口令(Hello!)随便给 主从配置相同即可
修改权限:

# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys

(3)修改配置haresources(该文件表示资源的管理 如果是主机 当主机启动后 自动加载该文件中配置的所有启动资源 资源脚本默认在 haresources同级目录下的resource.d目录下)(这里配置的是一个虚拟的IP和原来的不同)

# vim /usr/local/heartbeat/etc/ha.d/haresources

添加或修改:
master 192.168.192.211/24/eth0:0 nginx
(这里的192.168.192.211写自己配置的虚拟IP)
添加nginx脚本(见步骤6)
(4)修改ha.cf ( 该配置文件用于配置 心跳的核心配置)

# vim /usr/local/heartbeat/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 192.168.192.110
auto_failback on
node master
node slave
ping 192.168.192.5
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail  

说明:
debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息。
logfile /var/log/ha-log:heartbeat的日志文件。
keepalive 2:心跳的时间间隔,默认时间单位为秒s。
deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
udpport 694:设置广播通信使用的端口,694为默认使用的端口号。
ucast eth1 172.16.254.28:设置对方机器心跳检测的网卡和IP。
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。

*这里注意一点 一般启动时会报错因为 ping和ucast这些配置都需要插件支持 需要将lib64下面的插件软连接到lib目录 才不会抛出异常

# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/  
# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/  

(4)主节点的配置文件拷贝到从节点

#cd /usr/local/heartbeat/etc/ha.d
#scp ha.cf authkeys resource.d haresources [email protected]:/usr/local/heartbeat/etc/ha.d

(5)从节点修改 ha.cf ,只改心跳IP

# vim /usr/local/heartbeat/etc/ha.d/ha.cf

6.编辑nginx脚本(这一步很必要!!)

#vi /etc/init.d/nginx
脚本内容
#!/bin/sh
# chkconfig: 2345 80 90  
# description: Start and Stop nginx


#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin


DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME


set -e
[ -x "$DAEMON" ] || exit 0


do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}


do_stop() {
kill -INT `cat $PIDFILE` || echo -n "nginx not running"
}


do_reload() {
kill -HUP `cat $PIDFILE` || echo -n "nginx can't reload"
}


case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac


exit 0

注册系统服务:

chkconfig --add nginx

设置权限:

chmod a+wrx /etc/init.d/nginx

启动服务

service nginx start

7.启动heartbeat服务,先master后slave

# service heartbeat start
# service heartbeat status

出现下面的图才成功

没有出现这个
查看启动heartbeat的日志,看具体有什么错误

#more /var/log/ha-log

8.测试
访问VIP,192.168.192.211
看能不能访问到nginx
关闭主服务的heartbeat,看不能访问到从服务器的

你可能感兴趣的:(linux)