Web集群服务器搭建
一、需求分析
整体需求
搭建一个高可用的网站服务器集群,能承受高并发请求,能抵御一般的网络攻击,任何一台服务器的退服不影响整个集群的运作,并且能对各服务器的运行情况作出实时监控。
详细需求
Web主服务器:CentOS1 Nginx+Keepalived NFS server (Eth0: 192.168.48.139, Eth1: 10.0.0.1)
Web备用服务器:CentOS4 Nginx+Keepalived (Eth0: 192.168.48.140, Eth1: 10.0.0.4)
后台主服务器:CentOS2 Apache+Mysql Django (Eth1: 10.0.0.2)
后台备用服务器:CentOS3 Apache+Mysql Django (Eth1: 10.0.0.3)
监控服务器:CentOS5 Nagios+Saltstack master (Eth0: 192.168.48.160, Eth1: 10.0.0.5)
虚拟IP:192.168.48.138
二、详细功能描述
前端服务器
采用Nginx实现反向代理和负载均衡,用Keepalived实现HA,此部分由centos1和centos4实现,centos1作为主服务器,centos4作为热备服务器,Nginx会根据不同的请求IP机会均等地把请求发送到后端两台服务器,并且以ip hash的方式保持各个IP的会话。
后端服务器
构建在centos2与centos3上,采用apache作为web发布软件,mysql作为数据库,测试网页用Django来实现,两台服务器的数据库能够自动同步。
热备服务器
作为热备服务器,centos4在centos1没有故障时并没有业务流量,处于相对空闲的状态,因此在centos4上配置nfs使它成为文件共享服务器,网站文件放在这台服务器上。
监控服务器
运行nagios监控各服务器状态,出现告警时通过告警通知管理员,另外centos5还作为saltstack的服务器,其他主机的软件安装、文件传输、命令运行等操作均通过saltstack批量实现。
三、总体部署描述
操作系统版本
所有服务器均安装CentOS 64位版本,采用cobbler实现批量自动安装。
软件版本
所有软件均安装稳定版本,CentOS自带软件也要进行升级,低版本可能会影响Django的运行。
四、详细部署描述
Nginx设置
Nginx的主要作用是反向代理,作为用户和服务器之间的缓存,并以负载均衡的方式把请求发送到后端两台服务器,建议采用编译安装的方式安装Nginx,为使入侵者难以查出Nginx的版本号,编译前修改安装文件nginx.h,相关字段修改如下:
#define NGINX_VERSION "1.0" #define NGINX_VER "webserver" NGINX_VERSION
Nginx配置文件如下:
user www www; worker_processes 2; events { worker_connections 12800; use epoll; } http { include mime.types; #协助部分浏览器(如firefox)识别网页文件的类型 default_type application/octet-stream; limit_conn_zone $binary_remote_addr zone=addr:10m; sendfile on;#指定nginx是否调用sendfile函数来输出文件,能提高性能。 tcp_nopush on; tcp_nodelay on; keepalive_timeout 20; #客户端连接保持活动的超时时间 send_timeout 20; #指定响应客户端的超时时间 client_body_buffer_size 1k; #指定客户端请求主体缓冲区大小 client_header_buffer_size 1k; #指定来自客户端请求头的header buffer大小 large_client_header_buffers 2 1k; #客户端请求中较大的消息头指定的缓存最大数量和大小 server_tokens off; #禁止在错误页面上显示nginx版本号 client_body_timeout 20; #设置客户端请求主体读取超时时间 client_header_timeout 20; #设置客户端请求头读取超时时间 gzip on; upstream WebServers{ #指定负载均衡服务器 ip_hash; #以ip_hash的方式保持会话 server 10.0.0.3; #没有设定权重,因此两台后端服务器将机会均等地接受请求 server 10.0.0.2; } server { listen 80; server_name localhost; location / { proxy_pass http://WebServers; limit_conn addr 100; #指定每个ip最多只允许建立100个连接 limit_rate 500k; #每个ip最大带宽是500k proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
设置完毕后,把nginx设置为开机启动:
echo “/usr/local/nginx/sbin/nginx” >>/etc/rc.local
Keepalived设置
Keepalived的作用是在两台服务器(centos1、centos4)之间,以VRRP协议实现HA,通过虚拟出一个Virtual IP(本例子中是192.168.48.138)来对外发布业务,两台服务器中的任一台退服后,keepalived会自动把业务转到另一台上,在这里centos1是主服务器,centos4是备用服务器,平时的数据流量只会通过centos1,只有centos1退服了,数据流量才会割接到centos4上。
centos1上的keepalived配置:
! Configuration File for keepalived global_defs { notification_email { test@test.com #指定告警邮箱,当发现对端服务器退服时发邮件警报 } notification_email_from Alexandre.Casse smtp_server smtp.test.com smtp_connect_timeout 30 router_id centos1 } vrrp_script chk_apache { script "killall -0 httpd" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass your_password } virtual_ipaddress { 192.168.48.138 } track_script { chk_apache } }
centos4上的keepalived配置:
! Configuration File for keepalived global_defs { notification_email { test@test.com #指定告警邮箱,当发现对端服务器退服时发邮件警报 } notification_email_from Alexandre.Casse smtp_server smtp.test.com smtp_connect_timeout 30 router_id centos4 } vrrp_script chk_apache { script "killall -0 httpd" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass your_password } virtual_ipaddress { 192.168.48.138 } track_script { chk_apache } }
NFS服务设置
为了确保网站文件在所有服务器上保持一致,需要配置NFS服务,在centos4上安装并配置NFS服务:
yum install nfs-utils -y
编辑/etc/exports
文件:
/var/www/html 192.168.48.0/24(rw,sync,no_subtree_check)
启动NFS服务:
systemctl start nfs-server systemctl enable nfs-server
在其他服务器上挂载NFS共享目录:
mount -t nfs 192.168.48.140:/var/www/html /var/www/html
Mysql数据库设置
为了保证两台后台服务器的数据库同步,需要在centos2和centos3上配置Mysql复制,首先在主服务器(centos2)上创建复制用户:
CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
然后在从服务器(centos3)上配置Mysql复制:
change master to master_host='10.0.0.2',master_user='replica',master_password='password',master_log_file='mysql-bin.000001'; start slave;
监控服务器设置
监控服务器centos5上安装Nagios和Saltstack,首先安装Nagios:
yum install nagios -y
然后安装Saltstack:
yum install salt-master -y
配置Nagios以监控各服务器状态,并在Saltstack中编写批处理脚本以实现软件安装、文件传输等功能,创建一个批量安装nginx的脚本:
install_nginx: pkg.installed: name: nginx
应用该脚本:
salt '*' state.apply install_nginx
五、FAQs相关问题及解答
Q1:如何确保Nginx的高可用性?如果主服务器宕机,备用服务器如何接管?
A1:通过Keepalived实现Nginx的高可用性,Keepalived会在主服务器(centos1)宕机时,自动将虚拟IP(192.168.48.138)切换到备用服务器(centos4),从而保证服务的连续性,Keepalived使用VRRP协议监控主服务器的健康状态,一旦检测到主服务器不可达,立即进行故障转移,还可以通过配置多个Keepalived实例和VIP地址来进一步提高冗余度,可以在不同网段或数据中心配置多个Keepalived实例,以确保跨区域的高可用性,定期检查和更新Keepalived配置文件也是必要的,以确保其正常运行。
Q2:如何应对NFS单点故障问题?是否有其他的文件共享方案?
A2:为了应对NFS单点故障问题,可以采取以下措施:配置多个NFS服务器,形成集群,以提高服务的可靠性,使用分布式文件系统如GlusterFS或Ceph,这些系统不仅提供高可用性,还具备自动故障转移和数据冗余功能,定期备份NFS数据也是必要的,以防止数据丢失,可以通过监控工具实时监控NFS服务的状态,及时发现并解决问题,对于关键应用,建议结合多种文件共享方案,以确保数据的一致性和安全性,可以使用DRBD(Distributed Replicated Block Device)技术来同步多份数据副本,从而提高数据的可用性和容错性。
Q3:如何优化MySQL数据库的读写性能?有哪些具体的措施?
A3:优化MySQL数据库的读写性能可以从以下几个方面入手:调整MySQL的配置参数,如innodb_buffer_pool_size、query_cache_size等,以提高内存利用率和应用性能,优化数据库架构设计,合理规划表结构、索引和分区策略,减少查询复杂度和磁盘I/O开销,第三,实施数据库复制和分片技术,将读写操作分散到不同的节点上执行,减轻单个数据库的压力,第四,定期进行数据库维护操作,如OPTIMIZE TABLE、ANALYZE TABLE等,以保持数据库的最佳状态,第五,使用缓存机制存储频繁访问的数据,减少对数据库的直接访问次数,第六,监控数据库的性能指标,及时发现并解决潜在的性能瓶颈,可以使用Percona Toolkit提供的pt-query-digest工具来分析慢查询日志并找出需要优化的SQL语句,通过综合运用这些措施,可以显著提升MySQL数据库的读写性能和稳定性。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1269234.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复