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
win 安装 openclaw
本站点使用 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
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码