nginx+keepalived(双主)

一、环境

1
2
3
4
5
6
7
nginx1   192.168.40.211 
 
nginx2   192.168.40.132
 
vip1     192.168.40.223  主为keep1,从为keep2
 
vip2     192.168.40.222  主为keep2,从为keep1

二、keepalived配置文件

nginx1节点

cat  /etc/keepalived/keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
global_defs {
 
    notification_email {
 
        root@localhost
 
    }
 
    notification_email_from keepalived@localhost
 
    smtp_server 127.0.0.1
 
    smtp_connect_timeout 30
 
    route_id LVS_DEVEL
 
}
 
vrrp_script_chk_nginx {
 
    script "/etc/keepalived/ck_ng.sh"
 
    interval 2
 
    weight 2
 
}
 
#VIP1
 
vrrp_instance VI_1 {
 
    state MASTER
 
    interface ens33
 
    lvs_sync_daemon_interface ens33
 
    virtual_router_id 151
 
    priority 100
 
    advert_int 5
 
    nopreempt
 
    authentication {
 
        auth_type PASS
 
        auth_pass 1111
 
    }
 
    virtual_ipaddress {
 
        192.168.40.223
 
    }
 
    track_script {
 
        chk_nginx
 
    }
 
}
 
#VIP2
 
vrrp_instance VI_2 {
 
    state BACKUP
 
    interface ens33
 
    lvs_sync_daemon_interface ens33
 
    virtual_router_id 152
 
    priority 90
 
    advert_int 5
 
    nopreempt
 
    authentication {
 
        auth_type PASS
 
        auth_pass 2222
 
    }
 
    virtual_ipaddress {
 
        192.168.40.222
 
    }
 
    track_script {
 
        chk_nginx
 
    }
 
}

nginx2 节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#vi /etc/keepalived/keepalived.conf
 
global_defs {
 
    notification_email {
 
        root@192.168.40.132
 
    }
 
    notification_email_from keepalived@192.168.40.132
 
    smtp_server 127.0.0.1
 
    smtp_connect_timeout 30
 
    route_id LVS_DEVEL
 
}
 
vrrp_script_chk_nginx {
 
    script "/etc/keepalived/ck_ng.sh"
 
    interval 2
 
    weight 2
 
}
 
#VIP1
 
vrrp_instance VI_1 {
 
    state BACKUP
 
    interface ens33
 
    lvs_sync_daemon_interface ens33
 
    virtual_router_id 151
 
    priority 90
 
    advert_int 5
 
    nopreempt
 
    authentication {
 
        auth_type PASS
 
        auth_pass 1111
 
    }
 
    virtual_ipaddress {
 
        192.168.40.223
 
    }
 
    track_script {
 
        chk_nginx
 
    }
 
}
 
#VIP2
 
vrrp_instance VI_2 {
 
    state MASTER
 
    interface ens33
 
    lvs_sync_daemon_interface ens33
 
    virtual_router_id 152
 
    priority 100
 
    advert_int 5
 
    nopreempt
 
    authentication {
 
        auth_type PASS
 
        auth_pass 2222
 
    }
 
    virtual_ipaddress {
 
        192.168.40.222
 
    }
 
    track_script {
 
        chk_nginx
 
    }
 
}

三、nginx检测脚本(两台机子一样)

cat  /etc/keepalived/ck_ng.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
 
#检查nginx进程是否存在
 
counter=$(ps -C nginx --no-heading|wc -l)
 
if [ "${counter}" = "0" ]; then
 
#尝试启动一次nginx,停止5秒后再次检测
 
    service nginx start
 
    sleep 5
 
    counter=$(ps -C nginx --no-heading|wc -l)
 
    if [ "${counter}" = "0" ]; then
 
#如果启动没成功,就杀掉keepalive触发主备切换
 
        service keepalived stop
 
    fi
 
fi

chmod +x /etc/keepalived/ck_ng.sh

四、测试

 ip a (nginx1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 
    link/ether 00:0c:29:17:c0:db brd ff:ff:ff:ff:ff:ff
 
    inet 192.168.40.211/24 brd 192.168.40.255 scope global ens33
 
       valid_lft forever preferred_lft forever
 
    inet 192.168.40.223/32 scope global ens33
 
       valid_lft forever preferred_lft forever
 
    inet6 fe80::20c:29ff:fe17:c0db/64 scope link
 
       valid_lft forever preferred_lft forever

 ip a  (nginx2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:5e:ba:a3 brd ff:ff:ff:ff:ff:ff
 
    inet 192.168.40.132/24 brd 192.168.40.255 scope global ens33
 
       valid_lft forever preferred_lft forever
 
    inet 192.168.40.222/32 scope global ens33
 
       valid_lft forever preferred_lft forever
 
    inet6 fe80::20c:29ff:fe5e:baa3/64 scope link
 
       valid_lft forever preferred_lft forever

停掉nginx1的keepalived,此时nginx1的vip转移到nginx2,如下

 ip a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 
    link/ether 00:0c:29:5e:ba:a3 brd ff:ff:ff:ff:ff:ff
 
    inet 192.168.40.132/24 brd 192.168.40.255 scope global ens33
 
       valid_lft forever preferred_lft forever
 
    inet 192.168.40.222/32 scope global ens33
 
       valid_lft forever preferred_lft forever
 
    inet 192.168.40.223/32 scope global ens33
 
       valid_lft forever preferred_lft forever
 
    inet6 fe80::20c:29ff:fe5e:baa3/64 scope link
 
       valid_lft forever preferred_lft forever

两个虚拟IP跑到一台机子上,实验成功

posted @   凡人半睁眼  阅读(222)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示