架构综合(本文档未整理;勿看)

一、项目实施规划
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

https://www.mycodes.net/down9/job.php?job=down_encode&fid=50&id=5549&rid=5579&i_id=3410&mid=106&field=softurl&ti=2

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

客户端不影响访问:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值