|NO.Z.00013|——————————|^^ 构建 ^^|——|HAC构建.V4|——|5台server|
一、Heartbeat+Nginx

### --- Heartbeat+Nginx
~~~ Heartbeat是Linux-HA工程的一个组件,
~~~ 自1999年开始到现在,发布了众多版本,
~~~ 是目前开源Linux-HA项目最成功的一个例子,在行业内得到了广泛的应用。
### --- heartbeat:在HA项目中是实现高可用的,
~~~ 在行业内很多应用都在采用heartBeat来构建高可用项目,
~~~ 主要有V2/V3两个版本,这里采用V3版本构建
~~~ heartbeat是采用一组脚本的方式去去检测和切换的;
~~~ 所以它的原理不像Keepalived负载采用的是VRRP,而在这里以实际构建为主
~~~ 10.10.10.11/10.10.10.12:两台nginx服务器去检测以及心跳切换
~~~ 10.10.10.100:对于10.10.10.240来说10.10.10.100就是它要访问的外网服务器,
~~~ 10.10.10.100:又会在10.10.10.11和10.10.10.12之间检测切换,切换的方式就是采用脚本的方式进行检测切换
~~~ 10.10.10.240:用户客户端。
~~~ 两台nginx检测主机存活并自动切换,不会造成公司网站的瘫痪。
~~~ 可以应用在中小型的门户网站之中,访问量特别小,又不用过多的集群化,
~~~ 减少不必要的麻烦,我们可以采用两台nginx去做高可用切换。
~~~ 在生产环境中,应该再加一个共享存储,它俩的页面保持一致。
~~~ 在负载均衡集群中,生产环境中是必须的。
二、Heartbeat+Nginx实验构建:10.10.10.11环境配置
### --- 10.10.10.11环境配置
### --- 安装nginx;将nnginx-1.2.6.tar.gz安装包导入服务器中
[root@server11 ~]# tar -zxvf nginx-1.2.6.tar.gz
~~~ 安装依赖环境//因为我们不需要构建https的协议,所以不需要安装openxcel这个工具包
[root@server11 ~]# yum install -y pcre pcre-devel zlib zlib-devel
[root@server11 ~]# cd nginx-1.2.6
~~~ 创建用户
[root@server11 nginx-1.2.6]# useradd -s /bin/nologin -M nginx // 设置它的启动权限为/bin/nologin不允许远程用户登录 -M:不创建家目录 nginx:用户名
~~~ 生成Makefile
[root@server11 nginx-1.2.6]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@server11 nginx-1.2.6]# make && make install
### --- 修改主页文件
[root@server11 nginx-1.2.6]# cd /usr/local/nginx/html/
[root@server11 html]# rm -rf *
[root@server11 html]# vim index.html
aaaaaaaaaaaaaaaaaaaaaa
### --- 启用nginx服务
### --- 通过IE去访问http://10.10.10.11/主机地址正常
[root@server11 html]# /usr/local/nginx/sbin/nginx
三、Heartbeat+Nginx实验构建:10.10.10.12环境配置
### --- Heartbeat+Nginx实验构建:10.10.10.12环境配置
### --- 安装nginx;将nnginx-1.2.6.tar.gz安装包导入服务器中
[root@server12 ~]# tar -zxvf nginx-1.2.6.tar.gz
~~~ 安装依赖环境//因为我们不需要构建https的协议,所以不需要安装openxcel这个工具包
[root@server12 ~]# yum install -y pcre pcre-devel zlib zlib-devel
[root@server12 ~]# cd nginx-1.2.6
~~~ 创建用户
[root@server12 nginx-1.2.6]# useradd -s /bin/nologin -M nginx // 设置它的启动权限为/bin/nologin不允许远程用户登录 -M:不创建家目录 nginx:用户名
~~~ 生成Makefile
[root@server12 nginx-1.2.6]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@server12 nginx-1.2.6]# make && make install
### --- 修改主页文件
[root@server12 nginx-1.2.6]# cd /usr/local/nginx/html/
[root@server12 html]# rm -rf *
[root@server12 html]# vim index.html
bbbbbbbbbbbbbbbbbbbbbb
### --- 启用nginx服务
### --- 通过IE去访问http://10.10.10.12/主机地址正常
[root@server12 html]# /usr/local/nginx/sbin/nginx
四、Heartbeat+Nginx实验构建:10.10.10.11构建heartbeat
### --- Heartbeat+Nginx实验构建:10.10.10.11构建heartbeat
### --- heartbeat默认yum源时没有的,需要第三方的epel源进行安装
### --- 此环境已有下载包,无需使用epel源
### --- 将heartbeat.tar.gz软件包上传到服务器
[root@server11 ~]# tar -zxvf heartbeat.tar.gz
[root@server11 ~]# cd heartbeat
### --- 安装heartbeat
[root@server11 heartbeat]# yum install -y *
### --- 配置时间同步服务器
[root@server11 ~]# yum install -y ntp
[root@server11 ~]# vim /etc/ntp.conf
restrict 10.10.10.0 mask 255.255.255.0 nomodify notrap // 写入当前的网段地址
#server 0.centos.pool.ntp.org iburst // 注释默认官方的
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
[root@server11 ~]# service ntpd start
Starting ntpd: [ OK ]
[root@server11 ~]# chkconfig ntpd on
### --- 配置主机名解析
[root@server11 ~]# hostname www.centos1.com
[root@server11 ~]# hostname
www.centos1.com
[root@server11 ~]# vim /etc/sysconfig/network // 修改配置文件,重启后生效
NETWORKING=yes
HOSTNAME=www.centos1.com
### --- 构建DNS,修改配置文件生效
[root@server11 ~]# vim /etc/hosts
10.10.10.11 www.centos1.com
10.10.10.12 www.centos2.com
### --- 拷贝出heartBear的配置文件
### --- ha.cf:注配置文件 authkeys:认证文件 haresources:源文件 /etc/ha.d/:heartbeat的默认存放路径
[root@server11 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server11 heartbeat-3.0.4]# cp -a ha.cf authkeys haresources /etc/ha.d/
~~~ 修改配置文件
[root@server11 heartbeat-3.0.4]# cd /etc/ha.d/
[root@server11 ha.d]# dd if=/dev/random bs=512 count=1 | openssl md5 // 生成随机的md5值;比人为写入的更不容易找到规律
(stdin)= 080370eb3fb6e668ad9034cd56e8ca77
[root@server11 ha.d]# vim authkeys
auth 3 // 第三个md5认证方式
1 crc
2 sha1 HI!
3 md5 080370eb3fb6e668ad9034cd56e8ca77 // 写入刚才生成的md5值
[root@server11 ha.d]# chmod 600 authkeys // authkeys的权限必须是600,若不是600它会认为是不安全,不会让你启动
[root@server11 ha.d]# vim ha.cf
bcast eth0 # Linux // 打开网卡心跳检测,单块网卡linux系统怎么配置
#bcast eth1 eth2 # Linux // 打开网卡心跳检测,多块网卡linux系统怎么配置
#bcast le0 # Solaris // 打开网卡心跳检测,单块网卡Solaris系统怎么配置
#bcast le1 le2 # Solaris // 打开网卡心跳检测,多块网卡Solaris系统怎么配置
# node nodename ... -- must match uname -n
node www.centos1.com
node www.centos2.com
### --- 打开haresources的源配置文件
[root@server11 ~]# ls /etc/ha.d/resource.d/ // 官方写好的脚本文件地址
apache db2 Filesystem ICP IPaddr IPsrcaddr LinuxSCSI MailTo portblock SendArp WAS Xinetd
AudibleAlarm Delay hto-mapfuncs ids IPaddr2 IPv6addr LVM OCF Raid1 ServeRAID WinPopup
[root@server11 ha.d]# vim haresources // 脚本的主要目的是切换IP地址,在最后一行写入如下内容
www.centos1.com IPaddr::10.10.10.100/24/eth0:0 // 等同于:ifconfig eth0:0 10.10.10.100 netmask 255.255.255.0
五、Heartbeat+Nginx实验构建:10.10.10.12客户端配置
### --- Heartbeat+Nginx实验构建:10.10.10.12客户端配置
### --- 将heartbeat.tar.gz软件包上传到服务器
[root@server12 ~]# tar -zxvf heartbeat.tar.gz
[root@server12 ~]# cd heartbeat
### --- 安装heartbeat
[root@server12 heartbeat]# yum install -y *
### --- 配置时间同步
[root@server12 ~]# yum install -y ntpdate
[root@server12 ~]# ntpdate -u 10.10.10.11 // 同步时间
21 Jan 07:24:10 ntpdate[4443]: adjust time server 10.10.10.11 offset 0.441872 sec
### --- 配置主机名解析
[root@server12 ~]# hostname www.centos2.com
[root@server12 ~]# hostname
www.centos2.com
[root@server12 ~]# vim /etc/sysconfig/network / /修改配置文件,重启后生效
NETWORKING=yes
HOSTNAME=www.centos2.com
### --- 构建DNS,修改配置文件生效
[root@server12 ~]# vim /etc/hosts
10.10.10.11 www.centos1.com
10.10.10.12 www.centos2.com
### --- 修改配置文件
~~~ 在HA-server1下通过scp命令推送配置文件至HA-server2主机中。
[root@server11 ha.d]# scp ha.cf authkeys haresources root@10.10.10.12:/etc/ha.d/
六、Heartbeat+Nginx实验构建:10.10.10.11 10.10.10.12主机下启动服务
### --- Heartbeat+Nginx实验构建:10.10.10.11 10.10.10.12主机下启动服务
### --- 启动两台主机的heartbeat服务
[root@server11 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
[root@server12 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
### --- 查看心跳IP地址生成;两个节点中有且只有一个节点会存活ifcfg-eth0:0 ;若出现两个,说明服务不正常。
### --- 在本地cmd下ping 10.10.10.100;
[root@server11 ~]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:FA:34:71
inet addr:10.10.10.100 Bcast:10.10.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
七、通过IE验证:http://10.10.10.100/

1、切换验证:断掉HA-server1:10.10.10.11的网络连接
### --- 切换过程中会有网络终端过程
C:\Users\Administrator>ping 10.10.10.100 -t
~~~ 来自 10.10.10.100 的回复: 字节=32 时间<1ms TTL=64
~~~ 请求超时。
~~~ 请求超时。
~~~ 来自 10.10.10.100 的回复: 字节=32 时间<1ms TTL=64
2、刷新IE浏览器验证:http://10.10.10.100/ :说明切换成功。配置生效。

3、断网恢复,重新验证
### --- 重新为HA-server1连网重新并重启动heartbeat服务
[root@server11 ~]# /etc/init.d/heartbeat restart
4、服务又回到主节点上
~~~ 原理上考虑的话:Keepalived的ARRP技术更成熟一些。
~~~ VRRP有一个资源控制器的功能,会对应的调整资源服务的状态监控,以及对应的启用。
~~~ 在这里V3版本已经被剥离出去了;若是出现网掉线,
~~~ 服务器宕机,服务出现问题,都是可以进行服务的切换

八、通过服务pkill nignx 停止服务验证
~~~ 若是pkill nginx,发现服务并不会自动切换;网页访问不了。
~~~ 说明heartbeat检测的是服务的网络通讯的类,而不是服务的是否存活。
~~~ LVS是内核检测,内核若是宕了的情况是切换不了的。
~~~ 此处是nginx,nginx宕机和内核是无关的。因为它是在用户空间通信。
~~~ 我们可以通过脚本实现检测服务存活状态
### --- 通过服务pkill nignx 停止服务验证
[root@server11 ~]# mkdir /usr/local/script
[root@server11 ~]# mv 80.sh /usr/local/script/
[root@server11 ~]# vim /usr/local/script/80.sh
#!/bin/bash
PWD=/usr/local/script // 脚本地址
URL="http://10.10.10.11/index.html"
HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"` // 监控网站的返回码,
if [ $HTTP_CODE != 200 ] // 200表示正常
then
service heartbeat stop // 若不是200的情况下,就把heartbeat给
fi
[root@server11 ~]# pkill nginx
[root@server11 ~]# bash /usr/local/script/80.sh // 它会直接把heartbeat关闭,服务切换到从节点上
Stopping High-Availability services: Done.
### --- 通过IE访问:http://10.10.10.100/是如下状态
~~~ 这个时间切换是非常快的。和我们随机宕网,宕机时间延迟不同。
~~~ 说明主节点主动关闭的情况下会告诉从节点说明:
~~~ 主节点要退出了,从节点接管,所以时间差是非常小的。
bbbbbbbbbbbbbbbbbbbbbb
九、配置nginx服务80服务是否正常,若是不正常会把heartbeat服务关闭(上述5.2的解决方案)
### --- 配置nginx服务80服务是否正常,若是不正常会把heartbeat服务关闭(上述5.2的解决方案)
[root@server11 ~]# /usr/local/nginx/sbin/nginx
[root@server11 ~]# chmod a+x /usr/local/script/80.sh
[root@server11 ~]# crontab -e
*/1 * * * * bash /usr/local/script/80.sh // 把脚本启动放在循环里,每个一分钟检查
[root@server11 ~]# service crond restart // 重启定时计划任务
[root@server11 ~]# chkconfig crond on
[root@server11 ~]# /etc/init.d/heartbeat start // 开启heartbeat服务
Starting High-Availability services: INFO: Resource is stopped
Done.
### --- 通过IE访问:http://10.10.10.100/
aaaaaaaaaaaaaaaaaaaaaa / /又恢复到主节点上
### --- 验证:非正常状态,HA-server1下的nginx服务停止
[root@server11 ~]# pkill nginx // pkill杀死nginx服务
### --- 1分钟之后发现切换到HA-server2主机的nginx服务上 // 或者执行如下操作
[root@server11 ~]# bash /usr/local/script/80.sh
### --- 通过IE浏览器访问地址,发现切换到HA-server2从节点上了。
~~~ 说明:配置以上策略:不管是主机网络,主机,应用服务宕掉,都不会影响到业务的终端,会自动切换到从节点上。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv001-lbchac
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通