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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-12-7 15:38:32 | 显示全部楼层 |阅读模式
多台虚机需要使用组成高可用模式,需要在openstack里配置一个虚ip对外提供服务。由于keepalived使用的是VRRP协议,所以还需要在配置高可用的虚机安全组放开VRRP协议的规则" L: ^* ], u+ f# J' ]/ y/ k
环境$ A8 V! U) ?3 e9 `
主节点: 192.168.0.1869 m8 e' j* P& [* y
备节点:192.168.0.187' e! p/ ]' d+ D: f% }
VIP: 192.168.0.230
2 u' {4 c; g$ j* ^4 x& h) b* F创建虚IP
# s( r' @# o, I% W' h直接在控制台导航:管理员-系统-网络,点击虚机所在的网络名称,进入详情页面,然后点击创建端口按钮,在弹出的窗口,填入名称(eg: my_vip)。在该详情页可以看到该端口对应的固定ip,后面会用到该IP
! f& z0 |: _0 f, o) i; m5 P虚拟机启用VIP
0 G7 K% x! U* u1 O% c' e4 A( ?+ ^在控制节点执行:5 c" c" p9 N6 g: w+ _2 p1 @

) s+ [% R2 x- Q, h1 I7 ^neutron port-list|grep -e 192.168.0.186 -e  192.168.0.187 # 根据虚拟机IP获取port_id" s9 k# a/ g0 K* m; S: @% Q* W

  G% e  y' M  S: h! l3 M9 ]/ ^neutron port-update PORT_ID --allowed_address_pairs list=true type=dict ip_address=VIP       # PORT_ID为上一步获取到的port_id,VIP为前面创建的虚ip: b9 ~" o: n: `4 B% M
9 w2 M( J7 X$ y0 n$ P$ `
$ Q2 t' J( t8 F; _5 ]
有几台虚机,就重复几次执行 1、2 步骤& }; W+ P2 c! q: O
安全组允许VRRP协议
0 q# q/ U8 F  S& v7 `( G& P直接在控制台导航:项目-访问&安全,搜索虚机所在的安全组, 然后点击后面的管理规则按钮进入规则列表;点击添加规则按钮,弹出框里,在规则的下拉选里选择 其他协议, 然后再 端口 文本框输入 112, 最后点击添加按钮即可 # VRRP协议的端口号是1128 [+ I7 F8 K, t8 W0 n
配置keepalived, u8 N, s  f: \: K6 k
安装4 z6 D6 J% c: r3 T, ^7 v0 j( E$ s
yum install keepalived nginx  # 我们通过nginx服务来验证虚机服务的切换# ?2 F( P' P: _3 H4 d
配置" a1 |" F6 ~2 H0 y1 h' \) S
主节点:
/ f4 I% M0 k6 wcat /etc/keepalived/keepalived.conf
* k; h! G3 t9 e  P8 y2 R! Configuration File for keepalived" i/ h" I: R) p& h$ r6 u
global_defs {
5 S3 I. V1 A* c- ^8 t: S   router_id LVS_DEVEL
# h& p8 M1 ?% m5 L# c5 l}# k( E) l% F" ^" e* M" `. G
vrrp_script check_nginx_alive {
+ g# L% Y1 @3 x% X) \7 s+ w! S        script "/etc/nginx/check_nginx_alive.sh"   ## 检测 nginx 状态的脚本路径" b$ m# u) q$ W
        interval 3 ## 检测时间间隔
  P% r. L/ p! R- a6 T( }$ S4 ?        weight -10 ## 如果条件成立,权重-10
$ x+ P" T, e& y/ A: }: D}
1 R* `5 H2 c' ^: F9 ~4 m+ {! Qvrrp_instance VI_1 {
: y/ l4 f  Z! o; [; `2 n! X! y    state MASTER    # 主节点,备节点为BACKUP2 f: h! x% u  I: N, a
    interface eth0  # 绑定的网口5 b- x3 T- R4 l% {, M1 ~1 t# j2 g
    virtual_router_id 51 # 准备节点一致
3 _! Y3 j, h; `6 I& O( o$ |    priority 100  # 权重,备节点要比主节点低
! T, {6 H8 A8 W7 _4 f4 i    advert_int 1
' T4 g- i4 `6 p% [    authentication { # 认证信息,准备需要一致
, o. F% h! k2 c. `1 `0 _2 S        auth_type PASS
  C8 W# o# j. C" a        auth_pass 1111' S% ~6 b+ q' F5 Q( Q6 N
    }+ d( E( s2 v/ C" D
    virtual_ipaddress {
3 p# N1 G, p- H) j8 N9 E# r        192.168.0.230  # vip,可以多个,每行一个
* `) H; N4 e' y8 _8 m( g6 z7 J0 n    }
9 B: D( x& t# q! `6 f    track_script {6 O7 c" S+ J" b5 K  d0 C
        check_nginx_alive # 服务检测脚本
5 ]9 v9 H7 D: u    }
% [5 I8 C; ^' y! O4 i" ^( M6 g}
- y: A8 x9 d  i  A; ]' L% p* E" Kvirtual_server 192.168.0.186 80 { # 配置虚ip以及访问的端口
3 `; g4 _+ t8 c* M; x: k    delay_loop 6
6 ]! J3 @1 o$ ~8 n8 T    lb_algo rr
8 _+ A, O; G' a% _9 b, N    lb_kind NAT; o# `0 p! U$ p4 w0 _, y. C, {
    persistence_timeout 50$ U" i8 T+ n6 T' v& @
    protocol TCP
) p  y0 E8 ]2 q    real_server 192.168.0.187 80 { # 虚机真实ip及访问的端口
0 R' o( \! Z! F" c! ~        weight 1- b. I# S( R' ~& O9 |2 g
        TCP_CHECK {
3 K3 [, A1 x# V& |            connect_timeout 3
9 w9 l' |+ O# |3 ]/ h1 {; m            nb_get_retry 3# V- i0 U+ U/ h# ?
            delay_before_retry 3, N. f9 w9 M* h8 H/ Q; E
            connect_port 80# h  j8 ~7 w; w/ ~3 O1 e  O
        }
( c, ~0 u& B+ Y5 S0 w    }
1 T+ Z+ P- r6 X2 @3 D; h3 @" s}$ s6 i4 Q2 X4 N$ k' ^) ^
echo -e " 192.168.0.186 nginx-master" > /usr/share/nginx/html/index.html
: O, f* h$ u6 J* `3 }$ k# V备节点
0 f* ~6 n, p% _# ^0 s: T' l: Y1 A! Configuration File for keepalived
" F3 E! W. {$ A/ l- b( Rglobal_defs {# j! n5 _! P% Z' L9 l! r' k
   router_id LVS_DEVEL- B( o; f7 C, `4 p# h: K; b
}
% X% \6 b6 W: |vrrp_script check_nginx_alive {; }( G0 c6 V" D) c+ ]5 ]% f
        script "/etc/nginx/check_nginx_alive.sh" ## 检测 nginx 状态的脚本路径( K- y* U% {7 H" ^1 r
        interval 3 ## 检测时间间隔
: S1 j, x4 d+ f9 j/ P' r; f5 `2 l        weight -10 ## 如果条件成立,权重-10
: _9 ^3 D- X" h4 Q4 x% h}
( Z, t+ y  b; l) z9 Q9 rvrrp_instance VI_1 {7 m! n# g. H3 l* T# E
    state BACKUP" \: ?: `# D+ L/ c# R/ }3 G" r
    interface eth0) }& w% Z5 D5 T9 N
    virtual_router_id 51' n$ l% O& a3 S2 ]
    priority 98
% z7 y' l( m% ?5 ^) |1 O    advert_int 1
; x: j6 \4 b# o7 S" w/ }* ^7 E    authentication {& m3 h9 t5 A: W& t8 n
        auth_type PASS" Z" M1 ?9 K  U, S
        auth_pass vip_test
. T9 }# Y' @! I# ]- S    }0 Z) Z1 ~5 x/ g4 w7 q8 P: L7 i
    virtual_ipaddress {
3 y& z( F5 p& P' Y2 c        192.168.0.230
% Q; a/ v8 I# n; y, ]" |3 f    }) S4 m' g& Q' S
    track_script {; r8 g& B$ ~" d
        check_nginx_alive( ?& P  N( ?% W* z- n  x
    }
8 G* d4 Z4 w8 L}( k! h3 n) e* w
virtual_server 192.168.0.186 80 {
, Q$ ]6 r7 Z: x7 z$ L    delay_loop 6
" M9 K: v$ W# ?+ L* [    lb_algo rr- W* ?, |) a7 Q( ~
    lb_kind NAT
9 F- r& a2 e  M3 J% e; \* [    persistence_timeout 50
' U, E/ c3 t7 Z5 O- H( i    protocol TCP
2 P# d! r. @. a3 ?3 [& ^4 g    real_server 192.168.0.187 80 {6 c0 b% o- x- O6 d$ X, M
        weight 15 a) \4 ?' e' o$ [1 V: S
        TCP_CHECK {
( u+ y$ I8 T8 m3 B! ^            connect_timeout 3
2 {2 g1 Y8 f" m            nb_get_retry 3" z0 Z9 R9 G( W8 e$ j1 C
            delay_before_retry 3
$ k. }; I6 R/ W8 a' B8 k; t4 v            connect_port 806 M0 c) t! \. c6 q* [
        }1 p# P  z  a- u* d. X" n  _5 e2 Z
    }
% K5 V: L' m5 [+ c5 y}0 O8 i+ C7 l1 q/ M& ~# u# h
echo -e "192.168.0.187 nginx-backup" > /usr/share/nginx/html/index.html
; x, T+ P2 K' h3 }6 E. b主备节点添加服务检测脚本' {& \3 T$ w1 [% f
cat /etc/nginx/check_nginx_alive.sh
8 M# g7 S) v: p! S#!/bin/bash
0 O0 {- E4 k, |4 sA=`ps -C nginx --no-header |wc -l`: Z3 u* l" G8 u9 H
if [ $A -eq 0 ]# w1 v9 h! ^5 r2 J) O
then echo 'nginx server is died'' h: U! z" B; S, _( L# y6 i
    systemctl stop keepalived
. m% \7 W9 ]  a0 V" Ufi; K5 ^5 R0 V. l( P& h. f
chmod +x /etc/nginx/check_nginx_alive.sh
) I' ~  R$ m7 [主备节点启动服务, q4 i. ~  |5 z( W! b1 Y) n
systemctl start nginx
6 I, x1 z) B! P* r+ F* q, R9 |+ Q: csystemctl start keepalived5 n' C/ Q; P, {7 _( ~
我们通过浏览器访问:192.168.0.230,显示的是:192.168.0.186 nginx-master, 主节点0 F( i8 Z- u6 s
把主节点的keepalived服务关闭:systemctl stop keepalived, 浏览器再访问192.168.0.230,显示的是:192.168.0.187 nginx-backup,切换到备节点4 R+ p- n+ R, B/ M9 G5 B9 u
再把主节点的keepalived服务启动:systemctl start keepalived,浏览器再次访问:192.168.0.230,显示的是: 192.168.0.186 nginx-master,已经切回到主节点
- O) a  `( Q9 t$ W9 e
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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