原文地址,转载请注明出处:http://blog.csdn.net/qq_34021712/article/details/73441168 ©王赛超
高可用分为以下两种方式:
1、Nginx+keepalived 主从配置
服务器名称 | 版本 | 安装的服务 | ip/vip |
Nginx主服务器 | CentOS 7 | nginx+keepalived | 192.168.1.115/192.168.1.155 |
Nginx从服务器 | CentOS 7 | nginx+keepalived | 192.168.1.120/192.168.1.156 |
yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel net-snmp-devel -y
第二步:编译安装keepalived
-
将keepalived的安装包 上传到/usr/local/software 目录下
-
cd /usr/local/software
-
tar -zxvf keepalived
-1.3
.5.tar.gz
-
cd keepalived
-1.3
.5
-
./configure --prefix=/usr/local/keepalived
-
make && make install
第三步:将 keepalived 安装成 Linux 系统服务
-
安装完成之后, 需要做一些工作复制默认配置文件到 默认路径
-
mkdir /etc/keepalived
-
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
-
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
-
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
-
cd /usr/local/software/keepalived
-1.3
.5
-
cp ./keepalived/etc/init.d/keepalived /etc/init.d/
-
chmod
755 /etc/init.d/keepalived
第四步:编写nginx检测脚本
-
vi /etc/keepalived/nginx_check.sh
-
内容如下:
-
#!/bin/bash
-
A=`ps -C nginx –no-header |wc -l`
-
if [ $A -eq
0 ];then
-
/usr/local/nginx/sbin/nginx
-
sleep
2
-
if [ `ps -C nginx --no-header |wc -l` -eq
0 ];then
-
killall keepalived
-
fi
-
fi
-
赋予执行权限
-
chmod +x /etc/keepalived/nginx_check.sh
第五步:修改keepalived的Master配置文件(192.168.1.115)
-
vi /etc/keepalived/keepalived.conf
-
内容如下:
-
! Configuration File
for keepalived
-
# 全局配置,配置收件人
-
global_defs {
-
notification_email {
##通知机制,收件人
-
820518302@qq.com
-
}
-
notification_email_from [email protected]
####发件人
-
smtp_server
192.168
.1
.115
##发件服务器
-
smtp_connect_timeout
30
##服务器连接超时时间
-
router_id LVS_DEVEL
##路由器标志
-
}
-
# 集群资源监控,组合track_script进行
-
vrrp_script check_haproxy {
-
script
"/etc/keepalived/nginx_check.sh"
#检测 nginx 状态的脚本路径
-
interval
2
#检测时间间隔
-
weight
-20
#条件成立 权重减20
-
}
-
vrrp_instance HAPROXY_HA {
-
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
-
state MASTER
-
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
-
interface eno16777736
-
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
-
virtual_router_id
80
-
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
-
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
-
# 主节点时,内容为:
-
#unicast_src_ip 192.168.1.115
-
# unicast_peer {
-
# 192.168.1.120
-
#}
-
# 设置优先级,确保主节点的优先级高过备用节点
-
priority
100
-
# 用于设定主备节点间同步检查时间间隔
-
advert_int
2
-
# 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
-
#nopreempt
-
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
-
authentication {
-
auth_type PASS
-
auth_pass
1234
-
}
-
# 集群资源监控,组合vrrp_script进行
-
track_script {
-
check_haproxy
-
}
-
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
-
# 当状态切换到BACKUP时,此IP会自动从系统中删除
-
# 可以通过命令ip add查看切换后的状态
-
virtual_ipaddress {
-
192.168
.1
.155
#虚拟ip配置完之后就用它访问
-
}
-
}
-
vrrp_instance HAPROXY_HA2 {
-
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
-
state BACKUP
-
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
-
interface eno16777736
-
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
-
virtual_router_id
81
-
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
-
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
-
# 主节点时,内容为:
-
#unicast_src_ip 192.168.1.115
-
# unicast_peer {
-
# 192.168.1.120
-
#}
-
# 设置优先级,确保主节点的优先级高过备用节点
-
priority
90
-
# 用于设定主备节点间同步检查时间间隔
-
advert_int
2
-
# 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
-
#nopreempt
-
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
-
authentication {
-
auth_type PASS
-
auth_pass
1234
-
}
-
# 集群资源监控,组合vrrp_script进行
-
track_script {
-
check_haproxy
-
}
-
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
-
# 当状态切换到BACKUP时,此IP会自动从系统中删除
-
# 可以通过命令ip add查看切换后的状态
-
virtual_ipaddress {
-
192.168
.1
.156
#虚拟ip配置完之后就用它访问
-
}
-
}
注意:
如果配置双主模式,一定要将nopreempt这个属性注释掉,搭建主备的时候需要他,搭建双主模式的时候,如果开启它,会将两个虚拟ip绑定到同一个服务器上。
第六步:修改keepalived的BACKUP配置文件(192.168.1.120)
-
! Configuration File
for keepalived
-
# 全局配置,配置收件人
-
global_defs {
-
notification_email {
##通知机制,收件人
-
820518302@qq.com
-
}
-
notification_email_from [email protected]
####发件人
-
smtp_server
192.168
.1
.120
##发件服务器
-
smtp_connect_timeout
30
##服务器连接超时时间
-
router_id LVS_DEVEL
##路由器标志
-
}
-
# 集群资源监控,组合track_script进行
-
vrrp_script check_haproxy {
-
script
"/etc/keepalived/nginx_check.sh"
#检测 nginx 状态的脚本路径
-
interval
2
#检测时间间隔
-
weight
-20
#条件成立 权重减20
-
}
-
vrrp_instance HAPROXY_HA {
-
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
-
state BACKUP
-
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
-
interface eno16777736
-
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
-
virtual_router_id
80
-
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
-
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
-
# 主节点时,内容为:
-
#unicast_src_ip 192.168.1.120
-
# unicast_peer {
-
# 192.168.1.115
-
#}
-
# 设置优先级,确保主节点的优先级高过备用节点
-
priority
90
-
# 用于设定主备节点间同步检查时间间隔
-
advert_int
2
-
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
-
authentication {
-
auth_type PASS
-
auth_pass
1234
-
}
-
# 集群资源监控,组合vrrp_script进行
-
track_script {
-
check_haproxy
-
}
-
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
-
# 当状态切换到BACKUP时,此IP会自动从系统中删除
-
# 可以通过命令ip add查看切换后的状态
-
virtual_ipaddress {
-
192.168
.1
.155
#虚拟ip配置完之后就用它访问
-
}
-
}
-
vrrp_instance HAPROXY_HA2 {
-
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
-
state MASTER
-
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
-
interface eno16777736
-
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
-
virtual_router_id
81
-
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
-
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
-
# 主节点时,内容为:
-
#unicast_src_ip 192.168.1.115
-
# unicast_peer {
-
# 192.168.1.120
-
#}
-
# 设置优先级,确保主节点的优先级高过备用节点
-
priority
100
-
# 用于设定主备节点间同步检查时间间隔
-
advert_int
2
-
# 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
-
#nopreempt
-
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
-
authentication {
-
auth_type PASS
-
auth_pass
1234
-
}
-
# 集群资源监控,组合vrrp_script进行
-
track_script {
-
check_haproxy
-
}
-
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
-
# 当状态切换到BACKUP时,此IP会自动从系统中删除
-
# 可以通过命令ip add查看切换后的状态
-
virtual_ipaddress {
-
192.168
.1
.156
#虚拟ip配置完之后就用它访问
-
}
-
}
启动之后,使用ip addr(centos6之前版本使用 ifconfig) 两台服务器分别绑定不同的虚拟ip到网卡
启动nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 启动keepalived:keepalived
第五步:重启120上的keepalived,再次访问服务,发现又从115切换回120