高可用web集群的搭建与监控

摘要:
配置文件forkeepalvedglobal_defs{notification_email{acassen@firewall.locfailover @ firewall.locsysadmin@firewall.loc } notification_email_fromAlexandre.Cassen@firewall.locsmtp_server192.168.200.1smtp_connect_timeout30router_idLVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval0vrrp_gna_interval0}vrrp_ instanceVI_1{stateMASTER#将角色设置为MASTERinterfaceens33#侦听接口ens33virtual_router_id51#分配给它的虚拟路由组编号为51priority150#优先级为150,优先级越高,它越有可能被称为MASTERadvert_int1authentication{#同一组之间的lb如何通信?这里使用密码身份验证。密码必须一致才能通信auth_typePASSauth_pass123123}virtual_Ipaddress{192.168.37.175#VIP配置,外部客户端访问的IP地址,MASTER在哪里,它会去哪里,通常称为漂移。

介绍:搭建一个高可用的web集群项目,能承受高并发的请求,任何一台服务器的退服不影响整个集群的运作,并且能对各个服务器的状态进行监控

运用技术:

  CentOS Linux release 8.0.1905 (Core)、nginx/1.17.9、ansible/2.9.9、nfs-utils/1:2.3.3-26、zabbix/4.4.6、keepalived/1.3.5-16

 

部署:

  1.准备了7台centos8的虚拟机,两台作为web server、两台作为load balancer、一台提供数据一致性的nfs server、监控zabbix server、自动部署ansible  server

  2.首先需要用一台ansible server 对其它6台server做好单向非对称加密密钥对信

  例:

    在ansible机器上执行两部命令:

  1.ssh-keygen 生成公私密钥对

  2.ssh-copy-id root@192.168.37.165,将公钥放在192.168.37.165的root用户家目录下,因为root用户的权力最大,擒贼先擒王。

高可用web集群的搭建与监控第1张

  3.通过ansible的playbook文件对另外两台load balancer机器部署配置nginx、keepalived

  具体实现:

    (1):用ansible-playbook配置安装nginx、keepalived的playbook脚本

     高可用web集群的搭建与监控第2张

nginx的shell脚本:

mkdir -p /nginx

cd /nginx

#download nginx
curl -O http://nginx.org/download/nginx-1.17.9.tar.gz

#解压
tar xf nginx-1.17.9.tar.gz

#进入解压目录
cd nginx-1.17.9

#解决依赖关系
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make

#配置
./configure --prefix=/usr/local/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --with-stream

#编译和安装
make -j 2 ; make install

#开机启动
echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

#修改PATH变量
echo "PATH=/usr/local/nginx/sbin:$PATH" >>/etc/profile
PATH=/usr/local/nginx/sbin:$PATH
#启动

nginx

keepalived配置文件:

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state MASTER   # 将角色设定成MASTER
interface ens33   #  监听的接口是ens33
virtual_router_id 51  # 分配到的虚拟路由组编号为51
priority 150    # 优先级为150,越高越有可能称为MASTER
advert_int 1
authentication {  # 同一个组之间的lb是如何通信的,这里使用的是密码认证,密码必须一致才能通信
auth_type PASS
auth_pass 123123
}
virtual_ipaddress {
192.168.37.175  #VIP的配置,外部客户端访问的ip地址,MASTER在哪,它就去哪,俗称漂移。
}

注意事项:

1.lb之间要确保网络互通,selinux策略是关闭的,以防止产生脑裂现象

2.优先级一定要有差距,确保所有的lb server 都在一个组,以免产生脑裂现象

4.配置两台nginx web服务器与nfs服务器

具体实现:

1.在ansible机器上

ansible  web  -m  script -a "/root/one_key_install_nginx.sh"

2.配置nfs服务器

(1)准备:

1台Linux服务器
硬件:1核心 2G
2块磁盘: 系统盘:1块磁盘安装系统 20G,数据盘:1块专门用来存放数据 100G
系统: centos 8.0.1905

 (2)磁盘分区格式化:

分区:fdisk /dev/sdc

格式化:mkfs.xfs  /dev/sdc1

创建挂载点 mkdir   /web

mount /dev/sdc1    /web

设置开机自动挂载:

 vim   /etc/fstab

/dev/sdc1  /web   xfs  defaults  0 0  

(3)下载相关软件

 yum install nfs-utils -y

service  nfs-server  start

systemctl  enable nfs-server

vim  /etc/exports  #  /etc/exports是nfs默认的配置文件

/web 192.168.37.164(rw,all_squash,sync)  # rw:可读写  # sync(同步): 数据同步写入到内存和硬盘
/web 192.168.37.165(rw,all_squash,sync)  # all_squash: 不管客户端使用nfs的用户是谁,都会压制成nobody用户

mount 192.168.37.172:/web   /usr/local/nginx/html/  # 在web服务器上实现挂载

如果报错,怎么办?

1.yum install -y  nfs-utils

2.关闭防火墙

umount /usr/local/nginx/html/

如何解决客户机上开机自动挂载nfs服务器上共享的目录?

将命令写入/etc/rc.local里面

在/web目录中创建一个index.html文件,输入一些内容,到此就解决了数据一致性的问题

5.最后一步实现zabbix监控


1. 在监控端下载好zabbix-server服务

使用阿里巴巴镜像源:https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel

curl -O https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm

rpm -ivh zabbix-release-4.4-1.el8.noarch.rpm

2. 这里选用的是zabbix的4.4.6-1,el8版本

高可用web集群的搭建与监控第3张

3. 安装zabbix,yum localinstall zabbix-* -y

4. 在监控端安装好数据库,这里使用的是官方的mariadb数据库

yum install -y mariadb  mariadb-server 

启动服务并检测是否启动成功

关闭selinux和防火墙

5.登录mariadb,并创建一个zabbix用户,创建一个zabbix库,并将zabbix的数据导入zabbix库

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;

grant all on  zabbix.*  to  'zabbix'@'%'  identified by  'Zabbix123#';

--------------------

cd /usr/share/doc/zabbix-server-mysql

解压    gunzip create.sql.gz

将数据导入zabbix库

mysql -uzabbix  -p'Zabbix123#' zabbix<create.sql

6. 为zabbix-server配置数据库

cd /etc/zabbix/

vim zabbix-server.conf

修改四行

DBHost=localhost

DBName=zabbix

DBUser=zabbix

DBPassword=Zabbix123#

7.配置zabbix的php前端

cd /etc/php-fpm.d/

vim zabbix.conf

修改时区,以免安装zabbix的php前端时报错

php_value[date.timezone] = Asia/Shanghai

设置开机启动

systemctl enable zabbix-server zabbix-agent httpd php-fpm

启动配套服务

systemctl restart zabbix-server zabbix-agent httpd php-fpm

8. 在客户机上安装zabbix-agent

[root@localhost ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm

[root@localhost ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/8/x86_64/zabbix-agent-4.4.6-1.el8.x86_64.rpm

service zabbix-agent start  # 启动服务

修改客户端上的配置文件,里面的server配置项为zabbix服务器的ip地址,允许服务器过来采集数据

cd /etc/zabbix/zabbix_agentd.conf

修改配置文件中的两个地方

一个是Server,默认服务器地址是127.0.0.1,改成server端的ip地址

一个是Serveractive,也要改

service zabbix-agent restart  #重启刷新服务

systemctl enable zabbix-agent  # 设置开机启动

高可用web集群的搭建与监控第4张

 zabbix_get  是server端获取client端的数据的工具

-s 192.168.37.144  指定客户端的ip地址

-p 10050  zabbix-agentd程序默认开放的端口

-k "system.cpu.load[all,avg1]"  指定获取的值==》key==》系统里的cpu的平均负载值

9.配置zabbix前端,配置监控项

高可用web集群的搭建与监控第5张

免责声明:文章转载自《高可用web集群的搭建与监控》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信公众号教程(6)公众平台开发模式介绍需求分析-如何进行软件需求分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

苹果cms测试

配置好权限,搞了半天,一直以为是容器镜像的问题 sudo chgrp -hR www-data maccms10 启动容器 docker run --rm -d --network=isolated_network --name maccms -p 7777:80 -v ~/projects/php/maccms10:/app -v ~/dev/docke...

zookeeper部署kafka集群

1.准备工作: iptables -F #关闭防火墙 systemctl stop firewalld.service #关闭防火墙 准备三台虚拟机并放入/etc/hosts下 192.168.100.242 testceph 192.168.100.244 redis1 192.168.100.245 redis2 将testceph的/etc/hos...

设计生成自动化流水线

现在已经有很多成熟的生成流水线了,如Azure DevOps,直接在界面中配置好即可,相当便捷,生成流水线的工作方式、工作过程也可以简单了解,我在空闲时间搭建了一个简单生成流水线旨在巩固个人对生成流水线的理解。 一、生成流水线设计图 平时,在腾讯云、阿里云搞活动时薅了点羊毛,搞了几天便宜的服务器,不能让这些服务器闲置了,也借此来试试搭建一条流水线,目的是...

Ansible入门系列--playbook

一、playbook基础 1、playbook是由一个或多个"play"组成的列表 2、play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的角色。Task实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作 3、Playbook采...

Win10+Nginx+H5

1.首先下载Nginx   进入window的cmd窗口,输入如下图所示的命令,进入到nginx目录(D:/nginx-1.8.1),使用“start nginx.exe ”进行nginx的安装,如下图所示:    安装成功后,在“任务管理器”中会看到“nginx.exe”进程,如下图所示:    在浏览器地址栏输入:127.0.0.1,会看到如下图...

HTTP方式播放FLV/mp4 :nginx+Yamdi/MP4BOX

【导语】chrome浏览器确实很强,直接支持MP4拖动播放,对于其他播放器,可以使用以下方法来支持拖动播放。拖动的关键在于生成关键帧等元数据信息,便于服务器和播放器支持拖动。 另外,nginx web服务器体验起来,也是很有前途的一个web服务器,值得研究。 flv 视频可以采用两种方式发布: 一、普通的 HTTP 下载方式 二、基于 Flash Medi...