构建keepalive+nginx集群
1、软件安装
1.1、准备两台机器
A机器:192.168.232.132
B机器:192.168.232.131
A级器作为master,B机器作为backup
1.2、两台机器都安装keepalived
A机器
[root@aaa-01 ~]# yum install -y keepalived
B机器
[root@bbb-01 ~]# yum install -y keepalived
1.3、两台机器上都安装nginx
若是A、B机器没有装nginx服务,可以直接yum安装,安装完之后启动nginx
[root@aaa-01 ~]# yum install -y nginx
[root@aaa-01 ~]# service nginx start
Redirecting to /bin/systemctl start nginx.service
[root@aaa-01 ~]# ps aux|grep nginx
root 16687 0.0 0.0 46364 964 ? Ss 11:51 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 16688 0.0 0.1 46764 1924 ? S 11:51 0:00 nginx: worker process
root 16690 0.0 0.0 112676 980 pts/0 R+ 11:51 0:00 grep --color=auto nginx
注意:有时直接yum安装不了,需要安装yum扩展源:yum install -y epel-release
2、配置A机器
2.1、更改keepalived配置文件
默认的配置文件路径在/etc/keepalived/keepalived.conf
清空文件内容
> /etc/keepalived/keepalived.conf
编辑配置文件
vim /etc/keepalived/keepalived.conf
添加加以下内容:
global_defs {
notification_email {
aming@aminglinux.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 MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.232.100
}
track_script {
chk_nginx
}
}
注意:"virtual_ipaddress"也就是所谓的vip我们设置为192.168.232.100
2.2、定义监控脚本
脚本路径在keepalived配置文件中有定义,路径为/usr/local/sbin/check_ng.sh
编辑配置文件:
vim /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
2.3、改变脚本的权限
脚本创建完之后,还需要改变脚本的权限(不更改权限,就无法自动加载脚本,那就无法启动keepalived服务)
[root@aaa-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh
2.4、启动keepalived服务,并查看是否启动成功
[root@aaa-01 ~]# systemctl start keepalived
[root@aaa-01 ~]# ps aux |grep keepalived
root 34653 0.0 0.1 118652 1400 ? Ss 12:16 0:00 /usr/sbin/keepalived -D
root 34654 0.0 0.2 122852 2392 ? S 12:16 0:00 /usr/sbin/keepalived -D
root 34655 0.0 0.2 122852 2448 ? S 12:16 0:00 /usr/sbin/keepalived -D
root 34661 0.0 0.0 112720 988 pts/1 S+ 12:16 0:00 grep --color=auto keepalived
启动不成功,有可能是防火墙未关闭或者规则限制导致的
systemctl stop firewalld 关闭firewalld
iptables -nvL查看防火墙
setenforce 0 临时关闭selinux
getenforce命令查看是否为Permissiv
再来启动keepalived,就会看到keepalived进程服务了
2.5、停止nginx服务
/etc/init.d/nginx stop
查看nginx服务进程
[root@aaa-01 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl): [ 确定 ]
[root@aaa-01 ~]# ps aux |grep nginx
root 34813 0.0 0.0 20548 628 ? Ss 12:17 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 34817 0.0 0.3 22992 3216 ? S 12:17 0:00 nginx: worker process
nobody 34818 0.0 0.3 22992 3216 ? S 12:17 0:00 nginx: worker process
root 34832 0.0 0.0 112720 984 pts/1 R+ 12:17 0:00 grep --color=auto nginx
2.6、查看ip地址
使用 ip add 命令,可以查看到vip192.168.232.100
[root@aaa-01 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c2:05:5a brd ff:ff:ff:ff:ff:ff
inet 192.168.232.132/24 brd 192.168.232.255 scope global dynamic ens33
valid_lft 1559sec preferred_lft 1559sec
inet 192.168.232.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec2:55a/64 scope link
valid_lft forever preferred_lft forever
3、B机器配置
3.1、修改keepalived配置文件
配置文件路径:/etc/keepalived/keepalived.conf
清空:> /etc/keepalived/keepalived.conf
编辑配置文件:
[root@bbb-01 ~]# vim /etc/keepalived/keepalived.conf
增加以下内容:
global_defs {
notification_email {
aming@aminglinux.com
}
notification_email_from root@aminglinux.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 //这里 和master不一样的名字
interface eno16777736 //网卡和当前机器一致,否则无法启动keepalived服务
virtual_router_id 51 //和主机器 保持一致
priority 90 //权重,要比主机器小的数值
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.74.100 //这里更改为192.168.232.100
}
track_script {
chk_nginx
}
}
3.2、定义监控脚本
[root@bbb-01 ~]# vim /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
3.3、改动脚本的权限
设置为755权限
[root@bbb-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh
3.4、启动keepalived服务
[root@bbb-01 ~]# systemctl start keepalived
[root@bbb-01 ~]# ps aux |grep keep
root 19134 0.0 0.1 118608 1384 ? Ss 12:33 0:00 /usr/sbin/keepalived -D
root 19135 0.0 0.2 122804 2384 ? S 12:33 0:00 /usr/sbin/keepalived -D
root 19136 0.0 0.2 122804 2424 ? S 12:33 0:00 /usr/sbin/keepalived -D
root 19143 0.0 0.0 112676 984 pts/0 R+ 12:33 0:00 grep --color=auto keep
4、区分主和从的nginx
4.1、A机器
4.1.1、查看虚拟主机内容
[root@aaa-01]# cat /usr/local/nginx/conf/vhost/aaa.com.conf
server
{
listen 80 default_server;
server_name aaa.com;
index index.html index.htm index.php;
root /data/wwwroot/default;
}
4.1.2、索引页
[root@aaa-01~]# cat /data/wwwroot/default/index.html
This is the default sete.
[root@aaa-01~]# vim /data/wwwroot/default/index.html #增加内容
master This is the default sete.
4.1.3、用网页查看
http://192.168.232.132 This is the default sete.
4.2、B机器
4.2.1、索引页
默认的索引页在 /usr/share/nginx/html/index.html
[root@bbb-01 ~]# vim /usr/share/nginx/html/index.html #增加内容
backup backup.
4.2.2、用网页查看
http://192.168.232.131
backup backup.
4.3、用虚拟IP在网页测试
http://192.168.232.100
This is the default sete.
5、模拟线上生产环境
模拟主机宕机环境,可直接关闭keepalive服务,
5.1、关闭A机器keepalive并查看
[root@aaa-01 ~]# systemctl start keepalived
[root@aaa-01 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c2:05:5a brd ff:ff:ff:ff:ff:ff
inet 192.168.232.132/24 brd 192.168.232.255 scope global dynamic ens33
valid_lft 1532sec preferred_lft 1532sec
inet6 fe80::20c:29ff:fec2:55a/64 scope link
valid_lft forever preferred_lft forever
5.2、查看B机器
[root@bbb-01 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:fb:fc:6f brd ff:ff:ff:ff:ff:ff
inet 192.168.232.131/24 brd 192.168.232.255 scope global dynamic ens33
valid_lft 1179sec preferred_lft 1179sec
inet 192.168.232.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fefb:fc6f/64 scope link
valid_lft forever preferred_lft forever
3、浏览器访问vip,看到已经变成B机器
http://192.168.232.100
backup backup.nginx keepalived不起作用
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:Process 执行结果获取
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
















