设为首页 收藏本站
查看: 1162|回复: 0

[经验分享] heartbeat实现nginx热备

[复制链接]

尚未签到

发表于 2015-11-21 09:22:23 | 显示全部楼层 |阅读模式
  heartbeat实现热备原理:
  与keepalived运用vrrp协议不同,heartbeat利用串口和ip实现心跳监控,节点会检查配置文件中的网络联通性,如果网络不通,则主节点的ipfail会执行切换,关闭主节点上的
  nginx并释放虚拟ip;此时备用节点将接管虚拟ip,并将此节点上的nginx启动,这样就实现了nginx的热备。
  


  虚拟ip:192.168.3.233
  主节点:
  hostname usvr-124
  eth0:192.168.3.124
  eth0:0:192.168.8.124  用于监测心跳
  /etc/hosts
  192.1683.126  usvr-126
  备用节点:
  hostname usvr-126


  eth0:192.168.3.126
  eth0:0:192.168.8.126 用于监测心跳
  /etc/hosts
  192.1683.124  usvr-124
  


  注:1.需要在两台机器上各自添加对方的host。
   2.主备节点需要时间同步。
  


  1.heartbeat安装:
  wget http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-8.noarch.rpm


  rpm -ivh epel-release-6-8.noarch.rpm
  yum -y install heartbeat*
  安装完成后会在/etc/ha.d建立相关目录
  [iyunv@usvr-124 ha.d]# rpm -q heartbeat -d

/usr/share/doc/heartbeat-3.0.4/AUTHORS

/usr/share/doc/heartbeat-3.0.4/COPYING

/usr/share/doc/heartbeat-3.0.4/COPYING.LGPL

/usr/share/doc/heartbeat-3.0.4/ChangeLog

/usr/share/doc/heartbeat-3.0.4/README

/usr/share/doc/heartbeat-3.0.4/apphbd.cf

/usr/share/doc/heartbeat-3.0.4/authkeys

/usr/share/doc/heartbeat-3.0.4/ha.cf

/usr/share/doc/heartbeat-3.0.4/haresources


/usr/share/man/man1/cl_status.1.gz

/usr/share/man/man1/hb_addnode.1.gz

/usr/share/man/man1/hb_delnode.1.gz

/usr/share/man/man1/hb_standby.1.gz

/usr/share/man/man1/hb_takeover.1.gz

/usr/share/man/man5/authkeys.5.gz

/usr/share/man/man5/ha.cf.5.gz

/usr/share/man/man8/apphbd.8.gz

/usr/share/man/man8/heartbeat.8.gz


  将相关配置文件copy到/etc/ha.d中即可
  2.heartbeat配置
  主节点配置:
  (1)主配置文件(ha.cf)
  #debugfile /var/log/ha-debug

logfile /var/log/ha-log    #指名heartbeat的日志存放位置。

#crm yes      #是否开启Cluster Resource Manager(集群资源管理)功能。

#bcast eth1    #指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。

keepalive 2    #指定心跳间隔时间为2秒(即每两秒钟在eth1上发送一次广播)。

deadtime 30 #指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。

warntime 10 #指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。

initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。

udpport 694    #设置广播通信使用的端口,694为默认使用的端口号。

#baud 19200    #设置串行通信的波特率。

#serial /dev/ttyS0   #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。

ucast eth0 192.168.8.126 #采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址。

#mcast eth0 225.0.0.1 694 1 0 #采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。

auto_failback on #用来定义当主节点恢复后,是否将服务自动切回,heartbeat的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。

#stonith baytech /etc/ha.d/conf/stonith.baytech   # stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。

#watchdog /dev/watchdog #该选项是可选配置,是通过Heartbeat来监控系统的运行状态。使用该特性,需要在内核中载入"softdog"内核模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入"insmod softdog"加载该模块。然后输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc |grep watchdog"(应为130)。最后,生成设备文件:"mknod /dev/watchdog
c 10 130" 。即可使用此功能。

node    usvr-124    #主节点主机名,可以通过命令“uanme –n”查看。

node    usvr-126   #备用节点主机名。

ping 192.168.3.1 #选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。

respawn hacluster /usr/lib64/heartbeat/ipfail #该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是ipfail,此进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动ipfail进程的身份。
  (2)资源文件(haresource)
  Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:

node-name network  <resource-group>

node-name表示主节点的主机名,必须和ha.cf文件中指定的节点名一致,network用于设定集群的IP地址、子网掩码、网络设备标识等,需要注意的是,这里指定的IP地址就是集群对外服务的IP地址,resource-group用来指定需要heartbeat托管的服务,也就是这些服务可以由heartbeat来启动和关闭,如果要托管这些服务,必须将服务写成可以通过start/stop来启动和关闭的脚步,然后放到/etc/init.d/或者/etc/ha.d/resource.d/目录下,heartbeat会根据脚本的名称自动去/etc/init.d或者/etc/ha.d/resource.d/目录下找到相应脚步进行启动或关闭操作。

下面对配置方法进行具体说明:

usvr-124 IPaddr::192.168.3.233/24/eth0 nginx

其中,usvr-124是HA集群的主节点,IPaddr为heartbeat自带的一个执行脚步,heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 192.168.3.233/24 start的操作,也就是虚拟出一个子网掩码为255.255.255.0,IP为192.168.3.233的地址,此IP为heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口为eth0,接着启动nginx服务。

注意:1.主节点和备份节点中资源文件haresources要完全一样。
       2.resource-group中还可以指定其他资源,如httpd等,但是后面跟的服务器需要有start/stop启动和关闭并放在/etc/init.d/或者/etc/ha.d/resource.d/下。
  (3)认证文件(authkeys)
  auth 3

#1 crc

#2 sha1 HI!

3 md5 Hello!


  保证此文件权限为600
  chmod 600 authkeys
  (4)放置nginx启动脚本
  

#! /bin/bash
# Description: Startup script for webserver on CentOS. cp it in /etc/init.d and
# chkconfig --add nginx && chkconfig nginx on
# then you can use server command control nginx
#
# chkconfig: 2345 08 99
# description: Starts, stops nginx
set -e
PATH=$PATH:/usr/local/nginx1.6/
DESC=&quot;nginx daemon&quot;
NAME=nginx
DAEMON=/usr/local/nginx1.6/$NAME
CONFIGFILE=/usr/local/nginx1.6/nginx.conf
PIDFILE=/var/run/nginx.pid
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
d_start() {
$DAEMON -c $CONFIGFILE || echo -n &quot; already running&quot;
}
d_stop() {
kill -QUIT `cat $PIDFILE` || echo -n &quot; not running&quot;
}
d_reload() {
kill -HUP `cat $PIDFILE` || echo -n &quot; can't reload&quot;
}
case &quot;$1&quot; in
start)
echo -n &quot;Starting $DESC: $NAME&quot;
d_start
echo &quot;.&quot;
;;
stop)
echo -n &quot;Stopping $DESC: $NAME&quot;
d_stop
echo &quot;.&quot;
;;
reload)
echo -n &quot;Reloading $DESC configuration...&quot;
d_reload
echo &quot;reloaded.&quot;
;;
restart)
echo -n &quot;Restarting $DESC: $NAME&quot;
d_stop
sleep 1
d_start
echo &quot;.&quot;
;;
*)
echo &quot;Usage: $SCRIPTNAME {start|stop|restart|force-reload}&quot; >&2
exit 3
;;
esac
exit 0
  
  



根据实际情况修改下安装目录等  备用节点配置
  将主节点的ha.cf  haresources authkeys 复制到备用节点上
  修改ha.cf中
  ucast eth0 192.168.8.124 #采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址。


  3.测试
  (1)启动主备节点上的heartbeat
  service heartbeat start
  (2)输入命令ip a查看主节点上虚拟ip192.168.3.233是否启动
  [iyunv@usvr-124 ha.d]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 mq state UP qlen 1000

    link/ether 00:50:56:89:a2:16 brd ff:ff:ff:ff:ff:ff

    inet 192.168.3.124/24 brd 192.168.3.255 scope global eth0

    inet 192.168.8.124/24 brd 192.168.8.255 scope global eth0:0

    inet 192.168.3.233/24 brd 192.168.3.255 scope global secondary eth0

    inet6 fe80::250:56ff:fe89:a216/64 scope link

       valid_lft forever preferred_lft forever
  此时主节点上的nginx也正常启动,但是备用节点上nginx没有启动
  在192.168.216上查看:
  curl http://192.168.3.233/1.html


  输出:hello,192.168.3.124


  (3)将主节点的heartbeat停掉,我们在备用节点上ip a查看
  [iyunv@usvr-126 ha.d]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 mq state UP qlen 1000

    link/ether 00:50:56:89:91:a0 brd ff:ff:ff:ff:ff:ff

    inet 192.168.3.126/24 brd 192.168.3.255 scope global eth0

    inet 192.168.8.126/24 brd 192.168.8.255 scope global eth0:0

    inet 192.168.3.233/24 brd 192.168.3.255 scope global secondary eth0

    inet6 fe80::250:56ff:fe89:91a0/64 scope link


  此时备用节点上的nginx启动,但是主节点上的nginx已经由heartbeat将nginx停掉
  
  在192.168.216上查看:
  curl http://192.168.3.233/1.html


  输出:hello,192.168.3.126
  


  ok,至此heartbeat实现nginx热备,就让我们应用起来吧

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141716-1-1.html 上篇帖子: 用hb_gui 配置heartbeat 下篇帖子: rk3288 LED上添加heartbeat功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表