找回密码
 注册
查看: 1370|回复: 0

openstack-虚机-keepalived-vip-配置及问题处理

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-12-7 15:38:32 | 显示全部楼层 |阅读模式
多台虚机需要使用组成高可用模式,需要在openstack里配置一个虚ip对外提供服务。由于keepalived使用的是VRRP协议,所以还需要在配置高可用的虚机安全组放开VRRP协议的规则
2 j* i" g1 S7 f) T# k: ?环境
2 ?, i. ^) q7 F3 {) L4 t主节点: 192.168.0.186
: Z& d* p/ h4 p$ ~1 V' J' }" E备节点:192.168.0.187
2 C7 c  ]4 l* l( N5 n' b8 |) s6 \VIP: 192.168.0.230
6 B8 d0 R; r, Q" L创建虚IP9 ~7 g; y4 d# x& \
直接在控制台导航:管理员-系统-网络,点击虚机所在的网络名称,进入详情页面,然后点击创建端口按钮,在弹出的窗口,填入名称(eg: my_vip)。在该详情页可以看到该端口对应的固定ip,后面会用到该IP
5 l2 X5 o! \2 ^1 }/ f虚拟机启用VIP
3 _+ {. G+ \% d4 v' y: Y在控制节点执行:
% }4 b' F) d: M- W9 n8 h4 u# i4 c% x$ i, S4 K5 H
neutron port-list|grep -e 192.168.0.186 -e  192.168.0.187 # 根据虚拟机IP获取port_id3 N# h4 o& |0 F' d  T" t

% o) {* n  [, o& z$ |; K' L7 f" qneutron port-update PORT_ID --allowed_address_pairs list=true type=dict ip_address=VIP       # PORT_ID为上一步获取到的port_id,VIP为前面创建的虚ip
( P# E! L  S" s) d! X/ Z) H& e/ V
2 d, A  O6 S. U- ^/ l+ e! Q4 ]% x& P1 I  {2 Z
有几台虚机,就重复几次执行 1、2 步骤1 M; W) ]( K3 A$ a4 g( e) U. N
安全组允许VRRP协议( m! o2 D1 B4 v# G% Z6 c
直接在控制台导航:项目-访问&安全,搜索虚机所在的安全组, 然后点击后面的管理规则按钮进入规则列表;点击添加规则按钮,弹出框里,在规则的下拉选里选择 其他协议, 然后再 端口 文本框输入 112, 最后点击添加按钮即可 # VRRP协议的端口号是112+ x* Y: \- I* \) S  W6 ?. q  Y
配置keepalived
6 m, |* Q/ [- L) P3 d. X5 k7 d) Q安装
3 y" Y, a1 C5 eyum install keepalived nginx  # 我们通过nginx服务来验证虚机服务的切换: Y8 ?) ^0 V+ Z  i- j  ^( k/ j
配置+ r* t/ D. U$ r
主节点:( j6 w2 o3 P3 u6 z
cat /etc/keepalived/keepalived.conf
, L7 M# G+ z, ]2 G) i5 Q! Configuration File for keepalived
. V; x9 g2 G# m) N$ gglobal_defs {6 s2 B, p8 L; s& Q
   router_id LVS_DEVEL
. E* b; I; B' W: k. d; V/ x3 _9 v}4 W  g$ M% S# i% Q+ _( J# o  Z
vrrp_script check_nginx_alive {3 f0 ?/ ?1 v. t- a$ c
        script "/etc/nginx/check_nginx_alive.sh"   ## 检测 nginx 状态的脚本路径. \! {# J& Q; z/ ~, S8 ]# n
        interval 3 ## 检测时间间隔. j* T) ^1 N0 t: y) X( }4 W4 `" l$ S
        weight -10 ## 如果条件成立,权重-10# a# s6 `+ e  a% N  D
}
: _  ~& l4 }+ \2 Ivrrp_instance VI_1 {
% c1 m. w5 \- Q% \    state MASTER    # 主节点,备节点为BACKUP
7 L0 l2 v, j0 t" H  q( ^    interface eth0  # 绑定的网口1 e) Z+ I+ ?$ j# A
    virtual_router_id 51 # 准备节点一致& \1 Q5 j0 a% i$ S
    priority 100  # 权重,备节点要比主节点低
  n) n# r% z! }2 ?: w    advert_int 1
& A* n! Z1 h9 a+ q" a4 C    authentication { # 认证信息,准备需要一致1 i. E  j* s- N' _% c0 h- x
        auth_type PASS7 v: @: M$ h* O. s
        auth_pass 1111  Z6 U% l! d/ j/ m7 v( B" j
    }
1 e3 d& L2 [, s8 ]! ~% V    virtual_ipaddress {' }( L' S2 u& K) S! B3 _8 T$ x
        192.168.0.230  # vip,可以多个,每行一个4 |) f8 c* Q& m8 A/ M1 ^; w: _( ]
    }3 x! x& l+ M3 ]% h" h
    track_script {3 Q' P) I( B8 Q6 E# E
        check_nginx_alive # 服务检测脚本5 f, d& ], I9 E0 K$ W
    }4 R& c1 _) T3 ?: a' F+ J3 p0 y
}/ r7 O/ q' z2 C0 H
virtual_server 192.168.0.186 80 { # 配置虚ip以及访问的端口( ^& h0 j# Z) m+ _8 u
    delay_loop 6) P6 c8 H6 c' P% r
    lb_algo rr
( l+ D" q) V0 V& l% e    lb_kind NAT. U* @2 j( y4 a; `5 ?4 e; }
    persistence_timeout 50
0 n+ t; y% U7 r$ q% T: ~3 H    protocol TCP
* `2 G: g6 ?, M) b) ^! F3 H    real_server 192.168.0.187 80 { # 虚机真实ip及访问的端口
8 S2 [5 F0 p) W        weight 1
2 s; m$ D9 H9 E2 y        TCP_CHECK {* T, }9 o1 L9 e* ~/ S4 r7 R
            connect_timeout 3
9 h. ?0 _" M, R            nb_get_retry 3
' ]4 H9 P3 g3 F9 b            delay_before_retry 3$ ~2 C6 F8 I0 [1 g
            connect_port 809 m! I! I7 I* r6 L7 q/ Z& g, E3 W
        }. n1 |( M0 h2 S1 e4 y9 r" ~; a
    }
8 q4 A. F, `* A- H( O}) F6 b! _" b2 C5 m1 W' l% `! t
echo -e " 192.168.0.186 nginx-master" > /usr/share/nginx/html/index.html: }' C3 y# H3 b; k5 B; j
备节点5 W& D) d" A% }- ?0 M/ }! w+ m) s7 _" E
! Configuration File for keepalived
" M; e' L5 P/ ^* Yglobal_defs {
& Q8 o$ Z8 S! ~   router_id LVS_DEVEL
1 n1 J) h4 V' N- q. q9 V}# D' B" w! y! q7 B0 l( P
vrrp_script check_nginx_alive {
6 r. Y: t  |/ z1 d) \        script "/etc/nginx/check_nginx_alive.sh" ## 检测 nginx 状态的脚本路径
* p/ E. C/ `- w$ m3 N( i4 X/ |        interval 3 ## 检测时间间隔
7 @& Y; `. P# f0 y( v% B        weight -10 ## 如果条件成立,权重-102 }- W4 t+ F- h* R* ]
}# O: ^: T! v4 K/ v$ f) W2 d
vrrp_instance VI_1 {( c! j& ~# D5 J' z1 {+ b
    state BACKUP
" M& L/ Z" h2 K4 I, Z  H  e# I" ?    interface eth0
9 {  j: m1 @, \; R+ ~' K' \    virtual_router_id 51& D" ~( S  g/ e! H; ?6 W( `1 n
    priority 98
2 T1 F- ~" g$ k, q0 [    advert_int 13 U. r4 a& M/ R0 E
    authentication {
& D: f% _5 R3 _$ S/ M# |        auth_type PASS
2 m/ @/ n& A! T        auth_pass vip_test
# Y+ g' j% Z! ~% W$ h4 a    }2 ?+ z& D8 s5 I7 p/ O3 q
    virtual_ipaddress {: _$ `$ z! Z# A) W
        192.168.0.230
# Z2 l$ u& n2 e4 d: _8 d    }
1 W+ |6 m; Z- A/ `    track_script {
8 [' J. K! j) I6 m        check_nginx_alive
& o3 D- B% n# ?7 _' }+ a( Y0 N    }) K# [0 q- |* p; C7 U
}8 Q2 l9 z1 o1 [$ T* S
virtual_server 192.168.0.186 80 {
# _4 {9 v5 Q: h; e9 K    delay_loop 6) s: J) V2 ^! g9 Y- J$ f0 B
    lb_algo rr% c6 p+ |% E+ n& u( @9 A/ w
    lb_kind NAT
! S) i- w! o  \4 X; a# k! }6 s    persistence_timeout 507 I7 ^2 i. g1 R( ~9 ~
    protocol TCP
9 I" @, x% d. {& B    real_server 192.168.0.187 80 {& h7 k4 [/ p' X6 ^* |) p
        weight 1
6 W6 a0 y# V7 _9 o2 t, S        TCP_CHECK {& m2 s% _) ?: ~( j
            connect_timeout 3# g+ \) Q+ g6 Z7 a& V3 O& t! i
            nb_get_retry 36 m+ n/ N# i; E3 U. n
            delay_before_retry 3
8 I' J. V4 T- G: L4 y5 Z2 G            connect_port 80
) Q6 k7 M* `. N8 i        }
4 u1 y& d0 ?( `3 B2 V% @    }" U- M: s+ N/ k
}; o( f1 l$ D2 `* F; I( {
echo -e "192.168.0.187 nginx-backup" > /usr/share/nginx/html/index.html1 }8 @6 A( _: p9 @6 S7 J
主备节点添加服务检测脚本) {, b* a" ~: @7 z1 L4 e
cat /etc/nginx/check_nginx_alive.sh. V) J3 X% \- h
#!/bin/bash
% b* z! A# X( x. X8 {5 rA=`ps -C nginx --no-header |wc -l`- `4 V2 r; D- s9 K! M: z# e
if [ $A -eq 0 ]. o# i. R3 x4 m% t" D
then echo 'nginx server is died'
6 a4 E- y( i1 o7 J/ ^, V    systemctl stop keepalived
/ `5 t9 w" Z" t+ X7 o" J- Nfi
( t+ b5 p+ B" @7 q; q- a0 u( vchmod +x /etc/nginx/check_nginx_alive.sh
7 \" f- w0 `6 |主备节点启动服务' o0 E: N. W+ C9 T! A5 {
systemctl start nginx
7 D8 F% c3 |. b3 s7 ?systemctl start keepalived- M% x. f6 G- C1 }* U6 a
我们通过浏览器访问:192.168.0.230,显示的是:192.168.0.186 nginx-master, 主节点
7 f9 o3 V6 Z+ |3 s把主节点的keepalived服务关闭:systemctl stop keepalived, 浏览器再访问192.168.0.230,显示的是:192.168.0.187 nginx-backup,切换到备节点9 q: j6 w2 o/ y* ?' G
再把主节点的keepalived服务启动:systemctl start keepalived,浏览器再次访问:192.168.0.230,显示的是: 192.168.0.186 nginx-master,已经切回到主节点$ T7 k* q. q$ l% v' s/ |' v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 05:31 , Processed in 0.014807 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表