介绍:搭建一个高可用的web集群项目,能承受高并发的请求,任何一台服务器的退服不影响整个集群的运作,并且能对各个服务器的状态进行监控
运用技术:
、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用户的权力最大,擒贼先擒王。
3.通过ansible的playbook文件对另外两台load balancer机器部署配置nginx、keepalived
具体实现:
(1):用ansible-playbook配置安装nginx、keepalived的playbook脚本
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版本
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 # 设置开机启动
zabbix_get 是server端获取client端的数据的工具
-s 192.168.37.144 指定客户端的ip地址
-p 10050 zabbix-agentd程序默认开放的端口
-k "system.cpu.load[all,avg1]" 指定获取的值==》key==》系统里的cpu的平均负载值
9.配置zabbix前端,配置监控项