1. 部署拓扑
2. Nginx部署及配置
(1) Nginx部署
安装可以参考之前的文章:超实用!利用Nginx实现文件下载,效率翻倍
(2)添加测试的HTML页面
这里是从零开始部署,为了方便查看添加测试的html页面,已部署过nginx的可忽略,先查看一下/路径的地址,然后在对应的路径下添加index.html
vi /opt/nginx/conf/nginx.conf
主节点192.168.60.2的HTML页面
备节点192.168.60.19的HTML页面
(3)启动nginx服务实例及访问
3. Keepalived部署及配置
(1) 安装keepalived依赖及实例
yum -y install libnl libnl-devel
wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz
tar -xf keepalived-2.2.8.tar.gz
cd keepalived-2.2.8
./configure --prefix=/opt/keepalived
make && make install
(2)添加Keepalived的配置
主节点的配置
cat keepalived/etc/keepalived/keepalived.conf
global_defs {
notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
acassen@firewall.loc # 收件人邮箱1
failover@firewall.loc # 收件人邮箱2
sysadmin@firewall.loc # 收件人邮箱3
}
notification_email_from Alexandre.Cassen@firewall.loc #邮件发件人
smtp_ server 192.168.60.2 #主服务器的ip地址。邮件服务器地址
smtp_connect_timeout 30 # 超时时间
router_id LVS_DEVEL # 机器标识 局域网内唯一即可。 LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script chk_http_port {
script "/opt/keepalived/scripts/nginx_check.sh" #检测脚本存放的路径
interval 2 # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次
weight 2 #权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
interface ens192 # 通信端口 通过ip addr可以看到,根据自己的机器配置
virtual_router_id 51 # vrrp实例id keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同
priority 100 #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;
authentication { # 服务器之间通信密码
auth type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth pass 1111
}
virtual_ipaddress { # 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。比如真实ip是192.168.91.138,那么虚拟ip可以设置为192.168.91.139~255,前面三个数得一致
192.168.60.66 # 定义虚拟ip(VIP),可多设,每行一个
}
track_script {
chk_http_port
}
}
备节点192.168.60.19的keepalived的配置
cat keepalived/etc/keepalived/keepalived.conf
global_defs {
notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
acassen@firewall.loc # 收件人邮箱1
failover@firewall.loc # 收件人邮箱2
sysadmin@firewall.loc # 收件人邮箱3
}
notification_email_from Alexandre.Cassen@firewall.loc #邮件发件人
smtp_ server 192.168.60.19#主服务器的ip地址。邮件服务器地址
smtp_connect_timeout 30 # 超时时间
router_id LVS_DEVEL # 机器标识 局域网内唯一即可。 LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script chk_http_port {
script "/opt/keepalived/scripts/nginx_check.sh" #检测脚本存放的路径
interval 2 # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次
weight 2 #权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
interface ens192 # 通信端口 通过ip addr可以看到,根据自己的机器配置
virtual_router_id 51 # vrrp实例id keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同
priority 90 #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;
authentication { # 服务器之间通信密码
auth type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth pass 1111
}
virtual_ipaddress { # 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。比如真实ip是192.168.91.138,那么虚拟ip可以设置为192.168.91.139~255,前面三个数得一致
192.168.60.66 # 定义虚拟ip(VIP),可多设,每行一个
}
track_script {
chk_http_port
}
}
(3)添加监测nginx服务的脚本
判断nginx实例的端口是否存活,不存活先手动启动,启动失败则关闭keepalived,迁移vip到备服务。
cat keepalived/scripts/nginx_check.sh
#!/bin/bash
NginxPort=8084
NginxStateNum=`netstat -tunlp |grep $NginxPort|wc -l`
if [ $NginxStateNum -eq 0 ];then
sh /opt/nginx/nginx.sh start
sleep 2
NginxStateNum=`netstat -tunlp |grep $NginxPort|wc -l`
if [ $NginxStateNum -eq 0 ];then
systemctl stop keepalived
fi
fi
(4)启动Keepalived服务并设置开启自启
systemctl start keepalived
systemctl enable keepalived
4. 功能验证
通过vip地址访问Nginx实例,然后把master节点的nginx实例停止,确保master节点的nginx实例启动不起来或者手动把keepalived停止。查看是否VIP地址是否切换到backup节点。
(1)用VIP地址访问nginx实例
(2)停止主节点的keepalived服务,访问vip地址
systemctl stop keepalived
可以看到现在vip地址已经迁移到备节点上,可以查看备节点的keepalived日志,角色状态也由BACKUP转为MASTER。
(3)手动启动主节点的keepalived,查看vip地址是否切换回来。
systemctl start keepalived
5. 知识拓扑
Q: 如何确保当主节点宕机,主服务迁移至备节点,在主节点服务拉启之后VIP地址不自动切换到主节点,保留在备节点上。
A: 把两个节点的keepalived角色都设置为BACKUP,并且把优先级高的节点添加nopreempt,参数确保节点异常恢复后,不会自动抢占VIP的问题。配置如下:
global_defs {
notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
acassen@firewall.loc # 收件人邮箱1
failover@firewall.loc # 收件人邮箱2
}
notification_email_from Alexandre.Cassen@firewall.loc #邮件发件人
smtp_ server 192.168.60.2 #主服务器的ip地址。邮件服务器地址
smtp_connect_timeout 30 # 超时时间
router_id LVS_DEVEL # 机器标识 局域网内唯一即可。 LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script chk_http_port {
script "/opt/keepalived/scripts/nginx_check.sh" #检测脚本存放的路径
interval 2 # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次
weight 2 #权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
nopreempt #有优先级高的添加此配置,确保异常恢复后不会自动抢占VIP
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
interface ens192 # 通信端口 通过ip addr可以看到,根据自己的机器配置
virtual_router_id 51 # vrrp实例id keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同
priority 100 #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;
authentication { # 服务器之间通信密码
auth type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth pass 1111
}
virtual_ipaddress { # 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。比如真实ip是192.168.91.138,那么虚拟ip可以设置为192.168.91.139~255,前面三个数得一致
192.168.60.66 # 定义虚拟ip(VIP),可多设,每行一个
}
track_script {
chk_http_port
}
}