coldsmog运维笔记
Linux 中间件部署
升级MySQL至最新版本
Zabbix与Zabbix-agent2部署
Galera-Cluster-MySQL 部署
JDK8 部署
FastDFS 部署
MySQL 主从备搭建
RabbitMQ 部署
Redis 部署
Nginx 部署
Gitlab + Jenkins + Sonarqube 部署
Docker 部署
keepalive的安装
Gitlab-ce 部署
Graalvm 部署
Nacos 部署
Kafka 部署
PostgreSQL 部署
MongoDB 部署
Fizz网关搭建
Vue项目部署(Nginx)
CentOS 运维笔记
centos 添加自定义服务
Linux 系统挂载
MySQL命令行
故障排查
Docker 运维笔记
keepalived 配置笔记
win 编辑EFI
本文档使用 MrDoc 发布
-
+
首页
keepalived 配置笔记
## keepalived+nginx,实现nginx高可用 1. VIP不需要在服务器网络配置文件中配置。一般为未使用的IP充当虚拟IP 2. nginx主不可用时,需要kill掉nginx主的keepalived服务,这样才可以实现VIP切换,因为主的keepalived优先级高。 3. 故障切换即keepalived主备切换 触发notify_maste(节点变成主节点)指定的脚本 4. keepalived自带的邮件通知基于sendmail 不推荐使用 5. 配置文件 [/etc/keepalived/keepalived.conf](https://github.com/acassen/keepalived/blob/master/keepalived/etc/keepalived/keepalived.conf.in) ## 全局配置 ``` # 全局def配置块 global_defs { # 将接收通知邮件的电子邮件帐户 notification_email { coldsmog@foxmai.com email } # sendmail 发送者 notification_email_from coldsmog.work@foxmai.com # smtp 用于发送邮件通知的服务器地址 smtp_server host # 指定SMTP处理超时 smtp_connect_timeout 30 # 指定LVS主管的姓名 一般为本机的hostname lvs_id string } ``` ## 虚拟服务器配置 ``` # 虚拟服务器定义块 virtual_server (@IP PORT)|(fwmark num) { # 以秒为单位指定两次检查之间的间隔 delay_loop 6 # 选择特定的调度程序(rr|wrr|lc|wlc|sh|dh|lblc) lb_algo rr # 选择特定的转发方式(NAT|DR|TUN) lb_kind NAT # 如果您不将LVS与Linux内核2.2系列一起使用,则“ nat_mask”关键字已过时。该标志使您能够定义反向NAT粒度。 (nat_mask @IP) # 指定持久连接的超时值 persistence_timeout 50 # 为持久连接指定粒度掩码 persistence_granularity @IP # 指定用于HTTP | SSL_GET的HTTP虚拟主机 virtualhost string # 指定协议种类(TCP|UDP) protocol TCP # 如果所有真实服务器都已关闭,则将服务器添加到池中 sorry_server @IP PORT # 指定一个真实的服务器成员 real_server 192.168.201.100 443 { # 权重 weight 1 # 使用TCP连接检查实际服务器的可用性 TCP_CHECK { connect_port num connect_timeout num } } real_server 192.168.200.1 1358 { weight 1 # 使用用户定义的脚本检查实际服务器的可用性 MISC_CHECK { # 不需要携带参数 misc_path /path_to_script/script.sh # 对于需要自变量的脚本,路径和参数必须用双引号(“)引起来 (or misc_path “ /path_to_script/script.sh <arg_list>”) } } real_server 192.168.200.2 1358 { weight 1 # 使用(HTTP_GET|SSL_GET)请求检查实际服务器的可用性 HTTP_GET { # 可以添加多个URL块 url { path /testurl/test.jsp digest 640205b7b0fc66c1ea91c463fac6334d } url { path /testurl2/test.jsp digest 640205b7b0fc66c1ea91c463fac6334d } connect_timeout 3 retry 3 delay_before_retry 3 } } } ``` ## VRRP实例配置 ``` # 标识VRRP同步实例组 vrrp_sync_group string { group { string string } # 过渡到主状态、备份状态、故障状态执行的脚本 需要携带参数则“/path_to_script/script_backup.sh <arg_list>” notify_master /etc/keepalived/send_mail.sh notify_backup /etc/keepalived/send_mail.sh notify_fault /etc/keepalived/send_mail.sh } # VRRP实例定义块 vrrp_instance VI_1 { # 声明节点实例状态 (MASTER|BACKUP) state MASTER # 指定要在其上运行实例的网络接口 一般为eth0 interface eth0 # 本机IP地址 mcast_src_ip @IP # 指定要在其上运行lvs_sync_daemon的网络接口 lvs_sync_daemon_interface eth0 # 指定实例所属的VRRP路由器ID, 相同的VRID为一个组,他将决定多播的MAC地址,一般为VIP(xx.xx.xx.73)最后一段 virtual_router_id 73 # 在VRRP路由器中指定实例优先级 priority 100 # 组播信息发送间隔,两个节点设置必须一样,默认1s advert_int 1 # 激活SMTP通知以进行主状态转换 smtp_alert # authentication { # 指定要使用的身份验证类型(PASS|AH) auth_type PASS # 指定要使用的密码字符串 同组节点必须一致 auth_pass string } # VRRP VIP定义块 注意VIP必须是没有使用过的IP virtual_ipaddress { # 限制为20个IP地址 172.16.xx.73 } virtual_ipaddress_excluded { # 排查IP地址 @IP @IP } # 过渡到主状态、备份状态、故障状态执行的脚本 需要携带参数则“/path_to_script/script_backup.sh <arg_list>” notify_master /etc/keepalived/send_mail.sh notify_backup /etc/keepalived/send_mail.sh notify_fault /etc/keepalived/send_mail.sh } ``` ## Nginx 检查脚本 如果nginx停止运行,尝试启动,如果无法启动则杀死本机的keepalived进程,keepalied将虚拟ip绑定到BACKUP机器上 ```vi /etc/keepalived/nginx_check.sh``` ```bash #!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi ``` ## 来个示例 ``` ! Configuration File for keepalived global_defs { router_id esignweb-prod1 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" ## 检测nginx状态的脚本路径 interval 2 ## 检测时间间隔 weight -20 ## 如果条件成立,权重-20 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 80 mcast_src_ip 172.16.18.73 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1234 } ## 将track_script块加入instance 配置块 track_script { chk_nginx ## 执行Nginx监控的服务 } ## 虚拟IP池, 两个节点设置必须一样 virtual_ipaddress { 172.16.18.80 } } ``` > 参考 https://github.com/acassen/keepalived > 参考 https://www.cnblogs.com/John-2011/p/7838794.html > 参考 http://my.oschina.net/hncscwc/blog/158746
寒烟濡雨
2021年9月1日 14:15
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码