一、项目实施规划
1、需求分析,写项目规划书(项目经理、技术总监cto)
2、画架构图,将架构分解成各种模块(架构师)
3、各模块实施和测试(运维工程师)
4、自动化部署及运维(ansible/saltstack)
二、网站业务
博客/wordpress http://www.wordpress.org PHP
知乎/wecenter http://www.discuz.net PHP
博客/jpress http://www.wordpress.org JAVA/Tomcat
三、群集服务器数量、作用
服务器名 数量 作用
负载均衡 2 负载均衡,调度客户请求,高可用:nginx、keepalive
web 2 处理客户请求,提供静态网页,备份数据到指定备份服务器:nginx、php、tomcat、rsync
共享存储 1 存储多媒体数据,图片、音频、视频:nfs、sersync
数据库 1 处理web数据的存储和访问:mysql、redis(缓存或共享会话)
备份服务器 1 提供内网全服务器的备份服务,异地灾备:rsync
管理服务器 1 管理内部所有服务器,批量分发软件,自动化运维,yum仓库,跳板机jumpserver: ansible、jumpserver、ssh
监控服务器 1 监控内部服务器系统和服务状态:zabbix
日志服务器 1 收集分析内部服务器日志:ELK、EFK
四、群集服务搭建流程及规划
管理服务器:
1、跳板机jumpserver 172.16.1.1/24 jump01
2、ntp时间服务器 172.16.1.1/24 jump01
3、ansible/saltstack 172.16.1.1/24 jump01
前端服务器:
4、nginx代理缓存(keepalive) 172.16.1.11/24 nginx01
5、nginx代理缓存(keepalive) 172.16.1.12/24 nginx02
6、nginx网站(php) 172.16.1.21/24 web01
7、nginx网站(php) 172.16.1.22/24 web02
后端服务器:
8、mysql数据库(主从、MHA) 172.16.1.101/24 mysql01
9、redis共享缓存 172.16.1.111/24 redis01
10、rsync备份 172.16.1.121/24 backup01
11、nfs共享存储(sersync) 172.16.1.131/24 nfs01
运维服务器:
12、zabbix监控 172.16.1.201/24 zabbix01
13、ELK、EFK日志 172.16.1.211/24 elk01
五、群集架构流程图
参考第一章网站架构图
六、项目实施规范
1、所有的服务必须开机自启动
2、所有的服务器必须做必要的Linux系统基本优化(防火墙、selinux)
3、软件、脚本的存放目录要规范:
软件目录:/server/soft
脚本目录:/server/scripts
站点目录:/www/code/{zh,blog}
备份目录:/backup
存储目录:/nfs/data
4、主机名规范,参考第四步
5、ip地址规范,参考第四步
七、项目流程表述
1、讲用户访问网站流程,涉及tcp三次握手,dns解析,http请求原理
2、讲四层和七层代理
3、nginx web server收到请求后,静态内容如何处理,动态内容如何处理
4、nginx 与 fastcgi 如何进行交互,如何将请求转交给php
5、备份服务器怎么进行全网备份,异地灾备是什么,两点三中心是什么
6、管理服务器怎么管理内部所有服务器
7、监控服务器如何监控全网服务器,实现思路和方法
8、日志服务器怎么收集日志,过滤,展示
9、自动化部署流程和方案
10、在群集部署过程中,遇到的问题和困难,及其解决方案
————————————————实操——————————————————
环境:
管理服务器:
1、跳板机jumpserver 192.168.1.128/24 jump01
2、ntp时间服务器 192.168.1.128/24 jump01
3、ansible/saltstack 192.168.1.128/24 jump01
前段服务器:
4、nginx代理缓存(keepalive) 192.168.1.129/24 nginx01
5、nginx代理缓存(keepalive) 192.168.1.130/24 nginx02
6、nginx网站(php) 192.168.1.131/24 web01
7、nginx网站(php) 192.168.1.132/24 web02
后端服务器:
8、mysql数据库(主从、MHA) 192.168.1.133/24 mysql01
9、redis共享缓存 192.168.1.135/24 redis01
10、rsync备份 192.168.1.136/24 backup01
11、nfs共享存储(sersync) 192.168.1.134/24 nfs01
运维服务器:
12、zabbix监控 172.16.1.201/24 zabbix01
13、ELK、EFK日志 172.16.1.211/24 elk01
修改主机名:
hostnamectl set-hostname jump01
bash
hostnamectl set-hostname nginx01
bash
hostnamectl set-hostname nginx02
bash
hostnamectl set-hostname web01
bash
hostnamectl set-hostname web02
bash
hostnamectl set-hostname mysql01
bash
hostnamectl set-hostname nfs01
bash
hostnamectl set-hostname redis01
bash
hostnamectl set-hostname backup01
bash
hostnamectl set-hostname zabbix01
bash
hostnamectl set-hostname elk01
bash
一、192.168.1.128(jumpserver、Ansible、ntp):
Ansible:
安装ansible
1)先配epel源:
[root@jump01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #epel源(扩展包)
[root@jump01 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #linux镜像源(组包)
2)安装ansible
[root@jump01 ~]# yum -y install ansible
[root@jump01 ~]# ansible --version #查看版本
Ansible的配置:
1)配置清单
[root@jump01 ~]# vim /etc/ansible/hosts
[nginx01]
192.168.1.129
[nginx02]
192.168.1.130
[web01]
192.168.1.131
[web02]
192.168.1.132
[mysql01]
192.168.1.133
[nfs01]
192.168.1.134
[redis01]
192.168.1.135
[backup01]
192.168.1.136
[zabbix01]
192.168.1.137
[elk01]
192.168.1.138
[hao:children]
nginx01
nginx02
web01
web02
mysql01
nfs01
redis01
backup01
zabbix01
elk01
2)在ansible上配置ssh秘钥对访问
[root@jump01 ~]# ssh-keygen -t rsa #全部回车
[root@jump01 ~]# ssh-copy-id root@192.168.1.129
[root@jump01 ~]# ssh-copy-id root@192.168.1.130
[root@jump01 ~]# ssh-copy-id root@192.168.1.131
[root@jump01 ~]# ssh-copy-id root@192.168.1.132
[root@jump01 ~]# ssh-copy-id root@192.168.1.133
[root@jump01 ~]# ssh-copy-id root@192.168.1.134
[root@jump01 ~]# ssh-copy-id root@192.168.1.135
[root@jump01 ~]# ssh-copy-id root@192.168.1.136
[root@jump01 ~]# ssh-copy-id root@192.168.1.137
[root@jump01 ~]# ssh-copy-id root@192.168.1.138
[root@jump01 ~]# vim /etc/hosts
192.168.1.129 nginx01
192.168.1.130 nginx02
192.168.1.131 web01
192.168.1.132 web02
192.168.1.133 mysql01
192.168.1.134 nfs01
192.168.1.135 redis01
192.168.1.136 backup01
192.168.1.137 zabbix01
192.168.1.138 elk01
ntp:
利用Ansible统一同步阿里云时间:
[root@jump01 ~]# ansible hao -m shell -a "yum -y install ntpdate"
[root@jump01 ~]# ansible hao -m shell -a "ntpdate -u time.pool.aliyun.com"
[root@jump01 ~]# ansible hao -m shell -a "date" #验证一下
192.168.1.131 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:31 CST
192.168.1.130 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:31 CST
192.168.1.133 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:31 CST
192.168.1.132 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:31 CST
192.168.1.129 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:31 CST
192.168.1.134 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:32 CST
192.168.1.137 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:32 CST
192.168.1.135 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:32 CST
192.168.1.136 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:32 CST
192.168.1.138 | CHANGED | rc=0 >>
2020年 08月 10日 星期一 10:16:32 CST
全配置阿里yum源
[root@jump01 ansible]# ansible hao -m shell -a "wget http://mirrors.aliyun.com/repo/Centos-7.repo"
[root@jump01 ansible]# ansible hao -m shell -a "mv Centos-7.repo /etc/yum.repos.d/"
lnmp
搭建lnmp
1、安装Nginx:
使用Nginx官方提供的rpm包
[root@jump01 ~]# mkdir /ansible
[root@jump01 ~]# vim /ansible/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@jump01 ~]# ansible nginx01,nginx02,web01,web02 -m copy -a "src=/ansible/nginx.repo dest=/etc/yum.repos.d/ backup=yes"
[root@jump01 ansible]# ansible nginx01,nginx02,web01,web02 -m yum -a "name=nginx state=installed"
[root@jump01 ansible]# ansible nginx01,nginx02,web01,web02 -m service -a "name=nginx state=started enabled=yes"
安装mysql(mariadb):
[root@mysql ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/mysql-community-release-el7-5.noarch.rpm
[root@mysql ~]# yum install mysql-community-server -y
#本地安装可切换到对应文件夹使用命令:yum -y localinstall *
[root@mysql ~]# systemctl start mysqld
[root@mysql ~]# systemctl enable mysqld
[root@mysql ~]# mysql_secure_installation #修改mysql密码
使用第三方扩展epel源安装PHP7.2:
[root@php ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@php ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#可以使用这条命令替代上边的两条“yum -y install epel-release”
安装 php72 版本
[root@php ~]# yum -y install php72w php72w-cli php72w-common php72w-devel \
php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm \
php72w-mysqlnd php72w-opcache
#本地安装可切换到对应文件夹使用命令:yum -y localinstall *
[root@php ~]# systemctl start php-fpm
[root@php ~]# systemctl enable php-fpm
5、web1安装wordpress
1)下载wordpress源码包 4.9.8
https://www.lanzous.com/i1kfs6f
2)复制wordpress安装包,到虚拟机/,解压并赋权
[root@web01 /]# yum -y install unzip
[root@nginx-web1 /]# unzip wordpress-4.9.4-zh_CN.zip
[root@nginx-web1 /]# chmod -R 777 /wordpress
3)创建虚拟主机配置文件
[root@nginx-web1 ~]# vim /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.benet.com;
root /wordpress;
index index.php index.html;
location ~ \.php$ {
root /wordpress;
fastcgi_pass 192.168.1.133:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@nginx-web1 ~]# systemctl reload nginx
4)mysql创建blog数据库和管理用户
[root@mysql ~]# mysql -uroot -p123.com #登录数据库
mysql > create database blog; #创建数据库
mysql > grant all on blog.* to lisi@'192.168.1.%' identified by 'pwd123'; #设置管理用户及密码
6、web1安装zh
1)下载wecenter源码包 3.3.4
2)复制WeCenter安装包,到虚拟机/zh目录下,赋权
[root@nginx-web1 ~]# mkdir /zh
[root@nginx-web1 ~]# cd /zh
//复制WeCenter安装包,到虚拟机/zh目录下
[root@nginx-web1 zh]# unzip WeCenter_3-3-4.zip
[root@nginx-web1 ~]# chmod -R 777 /zh
3)创建虚拟主机配置文件
[root@nginx-web1 ~]# vim /etc/nginx/conf.d/zh.conf
server {
listen 80;
server_name zh.benet.com;
root /zh;
index index.php index.html;
location ~ \.php$ {
root /zh;
fastcgi_pass 192.168.1.133:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@nginx-web1 ~]# systemctl reload nginx
4)mysql创建zh数据库和管理用户
[root@mysql /]# mysql -uroot -p123.com #登录数据库
mysql > create database zh; #创建数据库
mysql > grant all on zh.* to wangwu@'192.168.1.%' identified by 'pwd123'; #设置管理用户及密码
7、在web1复制wordpress、zh目录到php的根目录
1)从web1服务器复制wordpress和zh的安装目录到php服务器
[root@nginx-web1 ~]# scp -rp /wordpress root@192.168.1.133:/
[root@nginx-web1 ~]# scp -rp /zh root@192.168.1.133:/
2)修改php服务器的配置文件
[root@php ~]# vim /etc/php-fpm.d/www.conf
listen = 192.168.1.133:9000
listen.allowed_clients = 192.168.1.131,192.168.1.132
[root@php ~]# systemctl restart php-fpm #重启php
8、客户端通过域名访问blog、zh,安装并配置
vim /etc/hosts
192.168.1.131 blog.benet.com
192.168.1.131 zh.benet.com
blog域名登录:
http://blog.benet.com
blog登录后台:
http://blog.benet.com/wp-admin
zh域名访问:
http://zh.benet.com
zh登录后台:
http://zh.benet.com/?/admin
效果图如下所示:
3、搭建nfs共享服务器,把网站静态元素通过挂载方式放在nfs上
1)开启一台centos7,安装nfs-utils、rpcbind:
[root@nfs ~]# yum -y install nfs-utils rpcbind
2)创建挂载点
[root@nfs ~]# mkdir -p /nfs/{blog,zh}
3)发布共享目录
[root@nfs ~]# vim /etc/exports
/nfs/blog 192.168.1.0/24(rw,sync,no_root_squash)
/nfs/zh 192.168.1.0/24(rw,sync,no_root_squash)
4)重启nfs服务
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# systemctl restart nfs
5)在nginx服务器上查看nfs共享目录
yum -y install showmount
[root@lnmp ~]# showmount -e 192.168.1.134
6)把wordpress的内容目录挂载到nfs
[root@lnmp ~]# cd /wordpress
[root@lnmp wordpress]# cp -rp wp-content/ wp-contentbak
[root@lnmp wordpress]# mount -t nfs 192.168.1.134:/nfs/blog wp-content
[root@lnmp wordpress]# cp -rp wp-contentbak/* wp-content/
7)设置永久挂载
[root@lnmp ~]# vim /etc/fstab
192.168.1.134:/nfs/log /wordpress/wp-content nfs defaults 0 0
8)验证nfs
[root@nfs ~]# cd /nfs/blog/
[root@nfs blog]# ls
index.php languages plugins themes
4、搭建第二台web服务器
1)安装nginx
[root@nginx-2 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@nginx-2 ~]# yum -y install nginx
2)把web1(192.168.1.128)上的nginx的配置复制到web2(192.168.1.133)
[root@lnmp ~]# scp -rp /etc/nginx/* root@192.168.1.132:/etc/nginx
3)把web1上网页源码复制到web2
[root@lnmp ~]# scp -rp /wordpress root@192.168.1.132:/
[root@lnmp ~]# scp -rp /zh root@192.168.1.132:/
4)重启服务
[root@nginx-2 ~]# systemctl restart nginx
5、搭建nginx负载均衡
1)安装nginx
[root@nginx-lb ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@nginx-lb ~]# yum -y install nginx
2)配置负载均衡
[root@nginx-lb ~]# vim /etc/nginx/conf.d/lb.conf
upstream webcluster {
server 192.168.1.128:80;
server 192.168.1.133:80;
}
server {
listen 80;
server_name blog.benet.com;
location / {
proxy_pass http://webcluster;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name zh.benet.com;
location / {
proxy_pass http://webcluster;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
[root@nginx-lb ~]# systemctl restart nginx
验证1-5:
[root@client ~]# vim /etc/hosts
192.168.1.134 blog.benet.com
192.168.1.134 zh.benet.com
2)扩展:创建优化项文件,网站配置文件直接调用(推荐)
[root@nginx-lb1 ~]# vim /etc/nginx/nginx_params
proxy_set_header Host $http_host; #转发请求时,包含头部“HOST”信息
proxy_set_header X-Real-IP $remote_addr; #和下行一起,共同实现追踪客户端原ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30; #代理和后端服务器连接超时时间
proxy_send_timeout 60; #后端服务器传回代理的超时时间
proxy_read_timeout 60; #代理等待后端服务器的响应时间
proxy_buffering on; #启用缓存,后端返回内容先缓存,再给客户端,收到多少转多少
proxy_buffer_size 32k; #代理缓存用户头信息的缓存区大小
proxy_buffers 4 128k; #缓存区的设置
网站配置调用
[root@nginx-lb1 ~]# vim /etc/nginx/conf.d/lb.conf
upstream webcluster {
server 192.168.1.131:80;
server 192.168.1.132:80;
}
server {
listen 80;
server_name blog.benet.com;
location / {
proxy_pass http://webcluster;
include nginx_params;
}
}
server {
listen 80;
server_name zh.benet.com;
location / {
proxy_pass http://webcluster;
include nginx_params;
}
}
[root@nginx-lb1 ~]# systemctl restart nginx
9、实现两台负载均衡器的高可用
环境:两台负载均衡器
lb1:192.168.1.134
lb2:192.168.1.136 (新增)
1)安装keepalived (两台都装)
[root@nginx-lb1 ~]# yum -y install keepalived
[root@nginx-lb2 ~]# yum -y install keepalived
2)配置keepalived
主服务器:lb1:
[root@nginx-lb1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.254/24
}
}
systemctl restart keepalived
备服务器lb2:
[root@nginx-lb2 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb2 #路由id号,和主服务器必须不同
}
vrrp_instance VI_1 {
state BACKUP #状态:BACKUP备 MASTER主
interface ens33
virtual_router_id 51
priority 99 #优先级:备比主要小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.254/24 #虚拟路由ip,公共ip
}
}
[root@nginx-lb2 ~]# systemctl restart keepalived
3)查看虚拟ip(漂移ip地址)
[root@nginx-lb1 ~]# ip a show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d9:ee:19 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.134/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.1.254/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::c907:ba03:890b:6420/64 scope link
valid_lft forever preferred_lft forever
4)复制lb1(192.168.1.134)关于nginx的配置到lb2(192.168.1.136)
lb2安装nginx:
[root@nginx-lb1 ~]# scp /etc/yum.repos.d/nginx.repo root@192.168.1.136:/etc/yum.repos.d/
[root@nginx-lb2 ~]# yum -y install nginx
在lb1上scp复制nginx的所有配置:
[root@nginx-lb1 ~]# scp -rp /etc/nginx/* root@192.168.1.136:/etc/nginx
在lb2上启动nginx服务:
[root@nginx-lb2 ~]# systemctl restart nginx
5)客户端修改hosts文件,访问验证(访问成功,关闭主服务器,再访问)
[root@client ~]# vim /etc/hosts
192.168.1.254 blog.benet.com zh.benet.com
关闭nginx-lb1的keepalived
[root@nginx-lb1 ~]# systemctl stop keepalived
漂移地址转移到了nginx-lb2上
[root@nginx-lb2 ~]# ip a show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:6d:fb:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.136/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.1.254/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::1cf:a19:c82c:7eb2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
不影响客户端继续访问:
10、高可用裂脑
高可用节点之间互相失去联系,自认为自己是主服务器,就会出现多主现象,即裂脑现象
裂脑出现的原因:
1. 心跳线松动或网卡故障
2. 服务器硬件故障,崩溃
3. 节点服务器开启防火墙,却没有做vrrp例外
nginx服务死掉,不会出现裂脑现象,但整个集群都无法正常运作
检测裂脑脚本(在备用服务器:192.168.1.136运行)
[root@nginx-lb2 /]# vim split_brain.sh
#!/bin/sh
while true
do
ping -c 2 -W 3 192.168.1.134 &> /dev/null
if [ $? -eq 0 -a `ip add | grep 192.168.1.254 | wc -l` -eq 1 ]
then
echo "split brain....."
else
echo "HA is ok"
fi
sleep 5
done
[root@nginx-lb2 /]# chmod +x split_brain.sh
[root@nginx-lb2 /]# source split_brain.sh
开启防火墙验证:
[root@nginx-lb1 ~]# systemctl start firewalld
[root@nginx-lb2 ~]# systemctl start firewalld
[root@nginx-lb2 /]# source split_brain.sh
HA is ok
HA is ok
split brain.....
split brain.....
解决因为防火墙出现的裂脑现象:
[root@nginx-lb1 ~]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
success
[root@nginx-lb1 ~]# firewall-cmd --reload
success
[root@nginx-lb2 ~]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
success
[root@nginx-lb2 ~]# firewall-cmd --reload
success
[root@nginx-lb2 /]# source split_brain.sh
split brain.....
split brain.....
HA is ok
HA is ok
11、解决nginx故障造成群集无法工作
nginx服务死掉,不会出现裂脑现象,但整个集群都无法正常运作
编辑nginx监控脚本
[root@nginx-lb1 ~]# mkdir /sh
[root@nginx-lb1 ~]# vim /sh/check_nginx_proxy.sh
#! /bin/bash
killall -0 nginx
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
[root@nginx-lb1 ~]# chmod -R +x /sh/
添加脚本追踪模块到keepalived配置文件
[root@nginx-lb1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb1
}
vrrp_script check_nginx_proxy {
script "/sh/check_nginx_proxy.sh"
interval 2
weight 5
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.254
}
track_script {
check_nginx_proxy
}
}
[root@nginx-lb1 ~]# systemctl restart keepalived
手动关闭nginx,触发脚本关闭keepalived
[root@nginx-lb1 ~]# systemctl stop nginx
[root@nginx-lb1 ~]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: inactive (dead)
6月 27 11:08:21 nginx-lb1 Keepalived_vrrp[49260]: Opening file '/etc/keepalived/keepalived.conf'.
6月 27 11:08:21 nginx-lb1 Keepalived_vrrp[49260]: WARNING - default user 'keepalived_script' for script execution...ate.
6月 27 11:08:21 nginx-lb1 Keepalived_vrrp[49260]: Unsafe permissions found for script '/sh/check_nginx_proxy.sh'.
6月 27 11:08:21 nginx-lb1 Keepalived_vrrp[49260]: SECURITY VIOLATION - scripts are being executed but script_secu...pts.
6月 27 11:08:21 nginx-lb1 Keepalived_vrrp[49260]: VRRP_Instance(VI_1) removing protocol VIPs.
6月 27 11:08:21 nginx-lb1 Keepalived_vrrp[49260]: Using LinkWatch kernel netlink reflector...
6月 27 11:08:21 nginx-lb1 Keepalived_vrrp[49260]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
6月 27 11:08:21 nginx-lb1 Keepalived[49258]: Stopping
6月 27 11:08:21 nginx-lb1 systemd[1]: Stopping LVS and VRRP High Availability Monitor...
6月 27 11:08:22 nginx-lb1 systemd[1]: Stopped LVS and VRRP High Availability Monitor.
Hint: Some lines were ellipsized, use -l to show in full.
漂移地址转移到nginx-lb2
[root@nginx-lb2 ~]# ip a show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:6d:fb:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.136/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.1.254/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::1cf:a19:c82c:7eb2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@nginx-lb2 ~]# firewall-cmd --add-port=80/tcp --permanent #开启了防火墙就允许80端口通过
success
[root@nginx-lb2 ~]# firewall-cmd --reload #重载firewalld配置
success
客户端不影响访问: