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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-12-7 15:38:32 | 显示全部楼层 |阅读模式
多台虚机需要使用组成高可用模式,需要在openstack里配置一个虚ip对外提供服务。由于keepalived使用的是VRRP协议,所以还需要在配置高可用的虚机安全组放开VRRP协议的规则
3 ~; p5 F- E7 d* J  `环境- y, D2 O( \/ A% X
主节点: 192.168.0.186$ K$ R. x: f  t& a6 n: e% N
备节点:192.168.0.187
# c- Y1 w; t' ~) |9 V3 p8 mVIP: 192.168.0.230
8 o/ R; X! k+ w' z: r# B0 q创建虚IP4 w; z- Z1 ]7 L% T
直接在控制台导航:管理员-系统-网络,点击虚机所在的网络名称,进入详情页面,然后点击创建端口按钮,在弹出的窗口,填入名称(eg: my_vip)。在该详情页可以看到该端口对应的固定ip,后面会用到该IP4 [9 ]6 ^3 s) L
虚拟机启用VIP% B5 W; g5 l7 _; q' h
在控制节点执行:2 g. R4 S8 w2 y9 o. k0 r
$ n" g& u- T# ]8 s# F
neutron port-list|grep -e 192.168.0.186 -e  192.168.0.187 # 根据虚拟机IP获取port_id+ e& L3 d+ E2 ?$ A4 ~
0 `# R, I2 W. ?4 {3 t9 S8 d
neutron port-update PORT_ID --allowed_address_pairs list=true type=dict ip_address=VIP       # PORT_ID为上一步获取到的port_id,VIP为前面创建的虚ip
' E: V; }3 \6 [  z) B! y, s4 Y
, T0 h$ s- N6 I! ^, p
, b* C) o0 D9 @. x6 h3 `5 m有几台虚机,就重复几次执行 1、2 步骤$ g4 F5 L* i8 ^) B( ]% B9 w* Y0 W' R
安全组允许VRRP协议
' s: V# v3 ~, [; R, P/ \直接在控制台导航:项目-访问&安全,搜索虚机所在的安全组, 然后点击后面的管理规则按钮进入规则列表;点击添加规则按钮,弹出框里,在规则的下拉选里选择 其他协议, 然后再 端口 文本框输入 112, 最后点击添加按钮即可 # VRRP协议的端口号是112" G5 B3 R2 |" G5 p  y# |
配置keepalived4 q- S2 `# `7 g( K
安装% x/ u2 s! y7 h
yum install keepalived nginx  # 我们通过nginx服务来验证虚机服务的切换1 _, k+ i+ _8 Z' r3 r
配置
& ?7 f% O- e7 f' ]5 ]& E主节点:
! z1 O  c+ J- R0 T# x" ?  ocat /etc/keepalived/keepalived.conf
2 G) v& s: P' B( B3 ]% y! Configuration File for keepalived9 f% K) X- q# ~+ x) k
global_defs {, q9 _& m7 U. D( R2 C2 s" H# P
   router_id LVS_DEVEL2 T9 z* l1 G$ V: G0 k* [0 @% K
}4 f) M" Q6 N0 E1 {. ]" P5 o+ _
vrrp_script check_nginx_alive {, H: r8 V" [- S# e( e2 L
        script "/etc/nginx/check_nginx_alive.sh"   ## 检测 nginx 状态的脚本路径. D. J+ l/ J3 J, G
        interval 3 ## 检测时间间隔
$ S4 g2 e9 s- l7 S. M2 W8 k        weight -10 ## 如果条件成立,权重-102 h5 ?3 a/ W9 p, h3 U8 y
}
& Y+ r8 y% l5 `7 R+ W) t+ Evrrp_instance VI_1 {0 ^$ P. V" ^# E3 @6 s' C- T4 R, I
    state MASTER    # 主节点,备节点为BACKUP
# q1 {4 t( U2 @7 J+ K    interface eth0  # 绑定的网口
9 }1 i$ O6 ^* C; A1 H3 R    virtual_router_id 51 # 准备节点一致) Q3 E9 e( j0 S+ ^* |! ]
    priority 100  # 权重,备节点要比主节点低( R- H3 y1 \$ y
    advert_int 13 ~2 }  X2 n4 l( N$ p/ ?' m. [- X
    authentication { # 认证信息,准备需要一致
3 ]: p9 m. N) x" k2 C        auth_type PASS+ e3 t$ F* \, N& o8 {6 Y
        auth_pass 1111
& e; `. X7 Z5 d: I0 Q: K    }
5 W, R7 N! z# }# x    virtual_ipaddress {
8 }9 y1 ]7 q) J: O+ t        192.168.0.230  # vip,可以多个,每行一个
1 c1 V% E6 S7 n! {5 h6 H    }6 |' f8 y" R3 F, a! J& s
    track_script {
3 G/ ?! |0 a* _5 w9 W        check_nginx_alive # 服务检测脚本1 n2 _5 Q" r. |: V
    }' p2 \; G+ }* t: c! y# E7 j
}
7 n2 r, Z8 `% `/ V# Cvirtual_server 192.168.0.186 80 { # 配置虚ip以及访问的端口
& W/ I6 u% s. N  B7 j% r    delay_loop 6
5 b6 h5 q3 d1 @    lb_algo rr
( Y8 C; f" G3 r; K. q( w    lb_kind NAT
, D  P" ?% _4 ^& R3 |    persistence_timeout 504 [1 y9 e# S  P+ Z& w2 X1 }5 i% f
    protocol TCP
' \& o% I4 Q  m: M% R+ g0 t3 ~    real_server 192.168.0.187 80 { # 虚机真实ip及访问的端口
" u6 V" h0 \1 c8 a! w' z0 Y. G- @        weight 1
% \+ J. G+ P$ p        TCP_CHECK {
. N( z; x  H- O* o* ]            connect_timeout 3$ n" K1 }3 y- @) u$ q
            nb_get_retry 34 r* p) m4 C. t3 b) f' s# }+ ]
            delay_before_retry 3! }* U  m, @8 y
            connect_port 80
8 u0 F$ x) h: f* a/ H        }
0 `# l& I+ H- A* D+ T, s    }1 {& {( Y4 Z* I4 |
}
" A+ V9 p+ V5 D) Pecho -e " 192.168.0.186 nginx-master" > /usr/share/nginx/html/index.html
- K5 u1 a. t6 z  v( x备节点/ f0 K) m, s% M# f: A) t& `
! Configuration File for keepalived, w' }0 r6 {% a' F% a5 L
global_defs {
* c% r( Z) X) F+ s1 g5 u; S   router_id LVS_DEVEL4 Z; A8 {- a+ j2 i( R2 r/ Q& ~
}4 H  _) A! J1 @4 p- ]
vrrp_script check_nginx_alive {6 m, K0 L4 G# |/ D4 s6 i
        script "/etc/nginx/check_nginx_alive.sh" ## 检测 nginx 状态的脚本路径
1 q0 ~+ L- [- N3 \2 Y8 I( ~- \        interval 3 ## 检测时间间隔
' J3 p: h  @  j0 C. ?# y) N" r: {        weight -10 ## 如果条件成立,权重-10
. `, G- S  H' s) P4 @8 Q5 \/ w}
0 X+ e5 q  A9 qvrrp_instance VI_1 {( w! J& }- B6 `' l; R1 c  y0 t0 e
    state BACKUP9 M5 F! _( I4 }4 F% ]. H
    interface eth07 t5 G3 E3 `$ O' m& u' L) Z
    virtual_router_id 51
# W* \3 }) }  P7 r! L    priority 98( |; n- H0 X/ D1 a( r4 c
    advert_int 1: T; _1 K! q. m
    authentication {  ]* O; t: l6 T4 d$ |% h3 b/ ^$ r( [
        auth_type PASS
; B/ J- m: l2 r1 R3 e, m. k        auth_pass vip_test
! X# J9 [1 D& j# Y  K8 c    }
) m& x# {( m% i* a    virtual_ipaddress {. k  H( @8 U/ _) o3 E) {' O
        192.168.0.2302 e5 r' Q  M' M# {
    }% Z* ?5 U8 ]' m% \
    track_script {  {3 h* o( v. J# K3 ]6 y! Y
        check_nginx_alive
' k4 t  a) n' x" {    }
& a- q* w6 K- F1 M0 f% h+ l$ O}
" W) U( D" X! z1 ~& ?+ d' i3 ivirtual_server 192.168.0.186 80 {
+ |( p1 F3 P8 P6 L6 b( h    delay_loop 6
0 X+ G+ n/ T: s* |3 j! _6 w    lb_algo rr
; E) Y& U" [" Q/ z$ w1 i    lb_kind NAT
6 R, a6 M4 Q/ W, A9 p: W    persistence_timeout 502 _' H$ c& u4 M& T3 K
    protocol TCP
+ D8 P) n2 c# q% ?; i3 K* `* J2 @' J    real_server 192.168.0.187 80 {
: e, y0 m! G2 _/ ~0 N8 p        weight 1
" a; b8 i  B: n7 [3 V9 b# F3 H        TCP_CHECK {$ q" e( F! c0 N8 k
            connect_timeout 3
# q/ s0 s: Q4 ?9 e            nb_get_retry 3
: H# O& Z' r. A            delay_before_retry 3
; i, q5 v) i# c. E            connect_port 80
. x$ \. C% _% `4 F0 w' H& D, J        }7 |* D- Z  Q2 k4 T6 x
    }
' k# N2 I. [1 S}
0 _  i4 |% U7 `echo -e "192.168.0.187 nginx-backup" > /usr/share/nginx/html/index.html
$ p/ B. f$ S( a; F+ f' f. l( u  G8 O, l主备节点添加服务检测脚本1 o7 @6 M  {# |3 k( j: z4 W
cat /etc/nginx/check_nginx_alive.sh
0 c& Z7 V  ~9 j& u0 j#!/bin/bash
5 ]+ \' N; Q' G' g. z) JA=`ps -C nginx --no-header |wc -l`
* J, h! Y/ H  y$ p: ~1 Lif [ $A -eq 0 ]3 s' U& s( g. X( P4 @$ _- C, M
then echo 'nginx server is died'
2 G7 t) y$ e% v  r( p1 t; E1 r    systemctl stop keepalived4 F6 H- ?% h" L( o: m+ t5 @1 b
fi
/ t% _3 u0 X! x, C5 v3 A3 S, schmod +x /etc/nginx/check_nginx_alive.sh
2 l8 T/ _1 ~" d8 X2 W- y  T主备节点启动服务
9 W+ a- H* N" j! Q% c6 nsystemctl start nginx
6 V; l. E9 z; N5 o% msystemctl start keepalived
2 e9 B+ f( O8 H  T# N我们通过浏览器访问:192.168.0.230,显示的是:192.168.0.186 nginx-master, 主节点
! |0 L+ n+ j- D, i7 T4 x# o把主节点的keepalived服务关闭:systemctl stop keepalived, 浏览器再访问192.168.0.230,显示的是:192.168.0.187 nginx-backup,切换到备节点# ~. Q4 W3 B4 g' r
再把主节点的keepalived服务启动:systemctl start keepalived,浏览器再次访问:192.168.0.230,显示的是: 192.168.0.186 nginx-master,已经切回到主节点
9 G4 J4 Y/ t/ j  N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:02 , Processed in 0.015961 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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