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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-12-7 15:38:32 | 显示全部楼层 |阅读模式
多台虚机需要使用组成高可用模式,需要在openstack里配置一个虚ip对外提供服务。由于keepalived使用的是VRRP协议,所以还需要在配置高可用的虚机安全组放开VRRP协议的规则
: ]: Q! g" D$ v* }2 P3 {" _环境
! C& ]& S# W. D9 \  ^% w$ i# f7 S6 r主节点: 192.168.0.186+ p% w' S6 b! x% o  x& @+ P$ \* [
备节点:192.168.0.187
  E8 n: s7 g. Y# C# v: \/ JVIP: 192.168.0.2305 I1 S# B5 }7 d7 |1 R: U) s- M
创建虚IP; i& n. ~. X) N
直接在控制台导航:管理员-系统-网络,点击虚机所在的网络名称,进入详情页面,然后点击创建端口按钮,在弹出的窗口,填入名称(eg: my_vip)。在该详情页可以看到该端口对应的固定ip,后面会用到该IP
# M, ^4 r  z0 f4 K) s8 Y( B  G0 @虚拟机启用VIP* d. g' R- x( r5 `7 S
在控制节点执行:% ^' n7 o* p9 x) {* ~
& v) h) @8 {' z9 Z6 J- y, K
neutron port-list|grep -e 192.168.0.186 -e  192.168.0.187 # 根据虚拟机IP获取port_id
/ S8 u. H/ F# [1 h; E7 c. Q' S2 y3 m( P% H4 L
neutron port-update PORT_ID --allowed_address_pairs list=true type=dict ip_address=VIP       # PORT_ID为上一步获取到的port_id,VIP为前面创建的虚ip# \5 x" j9 b2 [6 H& e" |3 D
3 O5 z( _/ I6 P, k) q+ `- T
( f- n+ M9 d9 _3 r
有几台虚机,就重复几次执行 1、2 步骤$ a; o' b* A; V
安全组允许VRRP协议9 }) z4 H  ~2 D) n
直接在控制台导航:项目-访问&安全,搜索虚机所在的安全组, 然后点击后面的管理规则按钮进入规则列表;点击添加规则按钮,弹出框里,在规则的下拉选里选择 其他协议, 然后再 端口 文本框输入 112, 最后点击添加按钮即可 # VRRP协议的端口号是112
; }$ {7 y- V+ C3 i配置keepalived
0 f) n3 ]' N9 |5 B安装% \6 q0 S0 }5 E
yum install keepalived nginx  # 我们通过nginx服务来验证虚机服务的切换  {  G2 A8 `5 H$ M/ C5 o
配置' y$ o4 `& R& d! W
主节点:0 _  b" W; `+ }4 x. Y
cat /etc/keepalived/keepalived.conf  Q4 l! F. i0 o) f5 X# c
! Configuration File for keepalived
7 X/ }. l. W4 X6 i8 Z5 j& Mglobal_defs {
" e7 U; B$ E" {7 x$ I  \   router_id LVS_DEVEL7 j1 [" M9 {4 C% V4 j# n
}$ g$ ^# y$ b+ H  m4 N1 _
vrrp_script check_nginx_alive {- E8 U: b/ B* @1 f
        script "/etc/nginx/check_nginx_alive.sh"   ## 检测 nginx 状态的脚本路径
: o( W9 Q9 _0 v: q% O        interval 3 ## 检测时间间隔+ m1 j* J( p# s% U6 t1 O5 N
        weight -10 ## 如果条件成立,权重-10
9 L, l  Q/ O1 {' d% m7 O}
5 R% V* a/ p  @" {- P, u- yvrrp_instance VI_1 {2 ^$ O# h5 g; U) a; f! \4 Z
    state MASTER    # 主节点,备节点为BACKUP
; V9 L' A( K; p# _/ x* S( h3 Y    interface eth0  # 绑定的网口
$ _: Y7 ?% N! @5 J; ~    virtual_router_id 51 # 准备节点一致
& ]2 n) H  L9 D- [: s    priority 100  # 权重,备节点要比主节点低' t5 a9 O9 q. D5 {
    advert_int 1
9 l; p6 \7 l$ i9 ]& C    authentication { # 认证信息,准备需要一致/ T6 i. v6 A2 F3 G2 {7 c/ T
        auth_type PASS$ A6 E6 ~& L5 P9 @6 i1 ?
        auth_pass 1111; J. ~% N# K9 ?% ~3 ]4 E1 S
    }
4 a9 q. l- r% y8 z1 [1 g8 A    virtual_ipaddress {
9 U2 L* `; p  T' S        192.168.0.230  # vip,可以多个,每行一个4 s2 z1 H9 C5 T: @- N8 i# }" g7 p( W0 {
    }
- o" g, w% ^# K- I' D    track_script {
* c( ^: j% c! ?$ ~' }" u8 P/ S        check_nginx_alive # 服务检测脚本
5 E$ f, R) Y8 h1 M    }' W) j. x9 T/ L) Z. y0 m
}! _7 b8 {2 L( d
virtual_server 192.168.0.186 80 { # 配置虚ip以及访问的端口( I+ c( y% J1 y& p' n/ c1 N% @
    delay_loop 6. K" P* {1 Q1 j0 x
    lb_algo rr( B( \" b6 p9 m0 q" V
    lb_kind NAT
) |& m( _3 e( n3 x3 u. @    persistence_timeout 50, J; b' T$ z- k, V  \9 N
    protocol TCP
4 L' R7 A( g& o. q4 h    real_server 192.168.0.187 80 { # 虚机真实ip及访问的端口$ v6 f$ q0 u, d" J: _$ ~4 P" h. L
        weight 1
5 S( P2 E' Z/ j4 [. T) n# h        TCP_CHECK {
- `0 o+ a  C  }+ g            connect_timeout 35 {" e" d& g7 O, i" N% i
            nb_get_retry 3
- d1 l9 X% n/ I- l+ x$ E* q            delay_before_retry 3
8 o+ j6 G- _# u, ~7 Q9 n$ r            connect_port 80
0 Y7 c- [$ O2 ~/ R3 O        }7 U' u0 q! h8 J0 w: P2 f9 K
    }/ y% c" D0 q3 B4 t! m
}  g' f  L; P. b7 \, R
echo -e " 192.168.0.186 nginx-master" > /usr/share/nginx/html/index.html( j% s. o  w* g, a# d. y
备节点
9 Q4 j. h: O5 O9 [% \* y: Q! Configuration File for keepalived
( ?3 g/ A7 I' I5 T/ |4 Xglobal_defs {# z! m* T, Q4 [% R+ g7 J
   router_id LVS_DEVEL, A) A& c4 l5 h6 S0 E, _7 m% ?  o
}
$ w/ G  T0 y+ z2 v1 M" C( f1 N8 c4 \vrrp_script check_nginx_alive {
+ t+ f+ l1 G6 X7 H7 p+ x        script "/etc/nginx/check_nginx_alive.sh" ## 检测 nginx 状态的脚本路径
9 N7 V# N9 G1 a9 I$ v9 j5 `        interval 3 ## 检测时间间隔
4 d- m! u& Y4 E: P. {4 ^        weight -10 ## 如果条件成立,权重-10
' s- S8 |, W8 s* Y7 E* s& W, _}
4 k/ O( U! h; s0 i% K% Yvrrp_instance VI_1 {& j9 I$ o; Y/ k& l+ a  V' _
    state BACKUP
; }) J  K& d& ]: {( W. v4 X; o    interface eth0# N# r! O0 s: a! j! O/ \% l
    virtual_router_id 51
, M$ }& `- C# O1 z    priority 98- Y, G1 s/ t8 C
    advert_int 1
; A: F6 B8 |+ q$ K    authentication {
, F9 O% ]9 R  t! y        auth_type PASS' }$ p0 u. @3 X. ~; R
        auth_pass vip_test
: d1 P, [+ [3 p* J3 {    }' W2 f9 T, W5 A* h' R
    virtual_ipaddress {$ K: \3 x% ?! F' Z
        192.168.0.230
  c( Y: h2 u3 I1 X, Z& ^    }
# P8 X8 p. `  E; A" C/ @1 e" L    track_script {
' }' V; B' M( y0 [        check_nginx_alive! Y0 E* h4 m% d8 l3 J( {, M
    }
1 C/ H8 V! a) @}  s. [! [! r4 l2 H
virtual_server 192.168.0.186 80 {; d4 c  U, W4 K
    delay_loop 6
6 w, |# w; u( g& T7 @    lb_algo rr
! r6 X4 m) \6 ^' ~+ J+ Z) x: i    lb_kind NAT
8 m# \0 p4 X0 d* H    persistence_timeout 507 {. m0 W3 r! V# U5 \( g% |
    protocol TCP7 e) x; a# u  L: ~
    real_server 192.168.0.187 80 {
% y% ^$ }- \% p+ R; K8 i  v2 o        weight 1
! Q) A8 B! W$ w        TCP_CHECK {7 n! m' n" P5 M, |# L1 B- m
            connect_timeout 3
- z  T# Y% Z: W# l  M            nb_get_retry 3- t5 v" M5 c8 z2 m: A* ~
            delay_before_retry 3% B% n9 m: b3 j7 h& i" e
            connect_port 800 \6 j; n5 X+ U, O6 K
        }
/ _5 r" {5 P# V* x1 }5 g    }
0 R! V: y& h% |+ z}) B: ^5 V* i+ X/ j
echo -e "192.168.0.187 nginx-backup" > /usr/share/nginx/html/index.html3 `5 d, S* d9 h! m/ A( S
主备节点添加服务检测脚本4 A7 j& f! T" K
cat /etc/nginx/check_nginx_alive.sh# ]3 y: K  V# ?9 H( _1 h( ?
#!/bin/bash3 w; E1 e- S( @+ Y. q* F7 ]
A=`ps -C nginx --no-header |wc -l`& ~/ d; N& D" `$ N2 O8 f! F. F! l
if [ $A -eq 0 ]
- N, t9 ?0 W1 m* _then echo 'nginx server is died'
& n7 u2 x2 l/ e    systemctl stop keepalived; b$ S5 r5 c; ~0 q
fi
7 s; x3 H5 _# U" A, pchmod +x /etc/nginx/check_nginx_alive.sh
/ K% E- i% Q& e$ V主备节点启动服务
, F) d* I* N. \' t+ r) Ssystemctl start nginx
5 v  r2 P% h1 dsystemctl start keepalived0 [- D, z1 u& B! d+ \5 C5 G
我们通过浏览器访问:192.168.0.230,显示的是:192.168.0.186 nginx-master, 主节点
# s" t# b. M9 d把主节点的keepalived服务关闭:systemctl stop keepalived, 浏览器再访问192.168.0.230,显示的是:192.168.0.187 nginx-backup,切换到备节点
7 K% @& b" b1 x4 q8 ?再把主节点的keepalived服务启动:systemctl start keepalived,浏览器再次访问:192.168.0.230,显示的是: 192.168.0.186 nginx-master,已经切回到主节点
/ R7 d- K0 j6 _  d" B9 E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:04 , Processed in 0.023365 second(s), 24 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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