博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
keepalived配置高可用集群
阅读量:6081 次
发布时间:2019-06-20

本文共 5054 字,大约阅读时间需要 16 分钟。

准备工作

1、设备分配

192.168.137.100    master    

192.168.137.150    backup    

192.168.137.254    vip    

2、两台设备均安装keepalived

1
yum 
install 
-y keepalived

3、两台设备均安装nginx

1
yum 
install 
-y nginx

主设备配置

1、编辑keepalived配置文件

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
[root@juispan ~]
# > /etc/keepalived/keepalived.conf
[root@juispan ~]
# vi /etc/keepalived/keepalived.conf
global_defs {
   
notification_email {          
##出现问题后接收提示的邮箱
     
test
@
test
.com
   
}
   
notification_email_from root@test2.com  
##发件人
   
smtp_server 127.0.0.1                   
##邮件服务器
   
smtp_connect_timeout 30                 
##延时
   
router_id LVS_DEVEL
}
vrrp_script chk_nginx {                    
##检查服务状态
    
script 
"/usr/local/sbin/check_ng.sh"
    
interval 3
}
vrrp_instance VI_1 {                       
##定义master相关配置
    
state MASTER                           
##设定角色
    
interface ens33                        
##指定发送vrrp包的网卡
    
virtual_router_id 51                   
##定义VRRP RID,要和从设备一致
    
priority 100                           
##优先级,越大越优
    
advert_int 1
    
authentication {
        
auth_type PASS                     
##定义认证类型
        
auth_pass 123456                   
##认证口令
    
}
    
virtual_ipaddress {                    
##VIP
        
192.168.137.254
    
}
    
track_script {                         
        
chk_nginx                          
##加载定义的chk_nginx脚本
    
}
}

2、编辑监控脚本

如果进程里面没发现nginx那就代表着服务宕机了,然后脚本自动的再次启动nginx服务。 如果服务还是不可以启动,就把启动报错日志输入到指定的位置,然后为防止“脑裂”就把keepalived也关闭。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@juispan ~]
# vi /usr/local/sbin/check_ng.sh
#!/bin/bash
#时间变量,用于记录日志
d=`
date 
--
date 
today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`
ps 
-C nginx --no-heading|
wc 
-l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if 
[ $n -
eq 
"0" 
]; 
then
        
/etc/init
.d
/nginx 
start
        
n2=`
ps 
-C nginx --no-heading|
wc 
-l`
        
if 
[ $n2 -
eq 
"0"  
]; 
then
                
echo 
"$d nginx down,keepalived will stop" 
>> 
/var/log/check_ng
.log
                
systemctl stop keepalived
        
fi
fi
[root@juispan ~]
# chmod 755 /usr/local/sbin/check_ng.sh

3、启动服务

1
2
3
4
5
6
[root@juispan ~]
# systemctl start  keepalived 
[root@juispan ~]
# ps aux | grep keep
root      2416  0.0  0.1 111708  1316 ?        Ss   19:29   0:00 
/usr/sbin/keepalived 
-D
root      2417  0.0  0.2 111708  2560 ?        S    19:29   0:00 
/usr/sbin/keepalived 
-D
root      2418  0.0  0.1 111708  1616 ?        S    19:29   0:00 
/usr/sbin/keepalived 
-D
root      2479  0.0  0.0 112664   976 pts
/0    
S+   19:29   0:00 
grep 
--color=auto keep

4、清空策略并验证

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@juispan ~]
# systemctl stop firewalld
[root@juispan ~]
# systemctl disable firewalld
Removed 
symlink 
/etc/systemd/system/basic
.target.wants
/firewalld
.service.
Removed 
symlink 
/etc/systemd/system/dbus-org
.fedoraproject.FirewallD1.service.
[root@juispan ~]
# setenforce 0
[root@juispan ~]
# less /var/log/messages       ##查看日志
[root@juispan ~]
# ip addr
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    
link
/ether 
00:0c:29:0c:4d:a8 brd ff:ff:ff:ff:ff:ff
    
inet 192.168.137.100
/24 
brd 192.168.137.255 scope global ens33
       
valid_lft forever preferred_lft forever
    
inet 192.168.137.254
/32 
scope global ens33     
##已加载VIP
       
valid_lft forever preferred_lft forever

从设备配置

1、关闭防火墙

1
2
3
4
5
[root@localhost ~]
# systemctl stop firewalld
[root@localhost ~]
# systemctl disable firewalld
Removed 
symlink 
/etc/systemd/system/dbus-org
.fedoraproject.FirewallD1.service.
Removed 
symlink 
/etc/systemd/system/basic
.target.wants
/firewalld
.service.
[root@localhost ~]
# setenforce 0

2、配置keepalived文件

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
[root@localhost ~]
# > /etc/keepalived/keepalived.conf
[root@localhost ~]
# vi /etc/keepalived/keepalived.conf
global_defs {
   
notification_email {
     
test
@
test
.com
   
}
   
notification_email_from root@
test
.com
   
smtp_server 127.0.0.1
   
smtp_connect_timeout 30
   
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    
script 
"/usr/local/sbin/check_ng.sh"
    
interval 3
}
vrrp_instance VI_1 {
    
state BACKUP
    
interface ens33
    
virtual_router_id 51
    
priority 90
    
advert_int 1
    
authentication {
        
auth_type PASS
        
auth_pass 123456
    
}
    
virtual_ipaddress {
        
192.168.137.254
    
}
    
track_script {
        
chk_nginx
    
}
}

3、编写启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]
# vi /usr/local/sbin/check_ng.sh
#时间变量,用于记录日志
d=`
date 
--
date 
today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`
ps 
-C nginx --no-heading|
wc 
-l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if 
[ $n -
eq 
"0" 
]; 
then
        
systemctl start nginx
        
n2=`
ps 
-C nginx --no-heading|
wc 
-l`
        
if 
[ $n2 -
eq 
"0"  
]; 
then
                
echo 
"$d nginx down,keepalived will stop" 
>> 
/var/log/check_ng
.log
                
systemctl stop keepalived
        
fi
fi
[root@localhost ~]
# chmod 755 /usr/local/sbin/check_ng.sh

4、启动服务

1
2
3
4
5
6
[root@localhost ~]
# systemctl start keepalived
[root@localhost ~]
# ps aux | grep keepalived
root      3266  0.0  0.1 111708  1308 ?        Ss   21:30   0:00 
/usr/sbin/keepalived 
-D
root      3267  0.0  0.2 111708  2548 ?        S    21:30   0:00 
/usr/sbin/keepalived 
-D
root      3268  0.1  0.1 111708  1620 ?        S    21:30   0:00 
/usr/sbin/keepalived 
-D
root      3321  0.0  0.0 112664   976 pts
/1    
S+   21:30   0:00 
grep 
--color=auto keepalived

测试高可用

1、编辑nginx主页

1
[root@juispan ~]
# echo "this is master" > /usr/share/nginx/html/index.html
1
[root@localhost ~]
# echo "this is backup" > /usr/share/nginx/html/index.html

2、客户端测试

3、主设备模拟宕机,关闭keepalived服务

除了配置nginx的高可用,也可以配置其他服务的高可用,比如mysql的高可用,但前提是一定要保证双方的数据是一致的。如果主mysql宕机,从mysql的数据一定会和主设备不一致。

本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1964009,如需转载请自行联系原作者

你可能感兴趣的文章
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>
鼠标增强软件StrokeIt使用方法
查看>>
本地连接linux虚拟机的方法
查看>>