分享我做的nginx+keepalived做的主主架构(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:
现在负载均衡层的 nginx+keepalived双主、web层的nginx+php、数据库层的drbd+heartbeat+mysql都安装完成。
注意:由于我的测试环境机器每台只有 1个网卡,所以drbd的心跳我才用再一个网卡上,在真实生产环境下,心跳一定要单独一个网卡一个网络。
对于 web服务器之间的数据同步问题,我有了2个解决方法:
1、 unison同步
2、使用 nfs
最后我考虑使用 nfs来解决同步问题。因为如果使用nfs的话,可以通过heartbeat来虚拟出一个ip(如10.1.88.198),同时要启动锁机制,因为同时有两个 web节点要使用同一份数据,所以需要有总裁,这个尤其是在NFS给mysql用的时候是必须要用的,对于论坛或网站,要看情况,如果存在对同一文件同时修改的时候必须要启动NFS锁机制,如果没有这种情况,那么建议不要启动,启动了会降低NFS的性能:
四、安装 nfs

服务器端与客户端都需要安装:

nfs-utils:NFS主程序
portmap:RPC主程序


 
 
  1. yum -y install portmap nfs-utils

配置


 
 
  1. vi /etc/exports
  2. /data/webnfs 10.1.88.0/24(rw,sync,anonuid=501,anongid=501)
其中 /data/webnfs是web挂载的目录,实现web间数据同步,,anonuid=501,anongid=501代表客户端在进行修改的时候,都以服务端的用户id501与组id501来进行操作,也就是说,如果在服务端www的用户与组id都为501,那种客户端在挂载时,进行添加、修改等操作时候,修改的用户与组均为服务器端的www。
启动 nfs

 
 
  1. service portmap start
  2. service nfs start

注意:必须先启动portmap,因为portmap是一直在服务器里启动的,而nfs需要heartbeat来管理


 
 
  1. chkconfig --level 345nfs off
  2. chkconfig --level 345 portmap on

根据我朋友公司的实际情况,我决定启动nfs锁,虽然nfs性能降低,但能保证数据的完整性


 
 
  1. /sbin/rpc.lockd
  2. echo "/sbin/rpc.lockd" /etc/rc.local
由于需要 heartbeat来管理nfs的启动与关闭,所以需要编写nfs启动脚本与挂载脚本
nfs启动脚本

 
 
  1. #!/bin/bash
  2. NFS="/etc/rc.d/init.d/nfs"
  3. NFSPID="/sbin/pidof nfsd`"
  4. case $1 in
  5. start)
  6. $NFS start;
  7. ;;
  8. stop)
  9. $NFS stop;
  10. if [ "$NFSPID" != " " ];then
  11. for NFSPID in $NFSPID
  12. do
  13. /bin/kill -9 $NFSPID;
  14. done
  15. fi
  16. ;;
  17. *)
  18. echo "Usage:`basename $0` {start|stop }"
  19. ;;
  20. esac
更改权限
 

 
 
  1. chmod 755 nfs
nfs挂载脚本

 
 
  1. #!/bin/bash
  2. /bin/mount -t nfs -o nosuid,noexec,nodev,rw,nouser,noauto,bg,hard,nointr,rsize=32k,wsize=32k,tcp 10.1.88.198:/data/nfs /data/www
其中 10.1.88.198是heartbeat为web里挂载虚拟的ip,而/data/nfs是服务端里为客户端挂载准备的目录,/data/www是客户端将服务端挂载到本地的目录

 
 
  1. chmod 755 mountnfs.sh
  2. echo "/data/shell/mountnfs.sh" /etc/rc.local
由于要 heartbeat虚拟出web里做共享的vip,所以drbd与heartbeat都需要添加新内容:
test6里

 
 
  1. [root@test6/]# cat /etc/ nfs.res
  2. #
  3. # please have a a look at the example configuration file in
  4. # /usr/share/doc/drbd83/drbd.conf
  5. #
  6. #
  7. # please have a a look at the example configuration file in
  8. # /usr/share/doc/drbd83/drbd.conf
  9. global {
  10. # minor-count 64;
  11. # dialog-refresh 5; # 5 seconds
  12. # disable-ip-verification;
  13. usage-count no;
  14. }
  15. common {
  16. syncer { rate 100M; }
  17. }
  18. resource nfs {
  19. protocol C;
  20. handlers {
  21. pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
  22. pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
  23. local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
  24. fence-peer "/usr/lib64/heartbeat/drbd-peer-outdater -t 5";
  25. pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' denglei@ctfo.com";
  26. split-brain "/usr/lib/drbd/notify-split-brain.sh denglei@ctfo.com";
  27. out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh denglei@ctfo.com";
  28. }
  29. net {
  30. # timeout 60;
  31. # connect-int 10;
  32. # ping-int 10;
  33. # max-buffers 2048;
  34. # max-epoch-size 2048;
  35. cram-hmac-alg "sha1";
  36. shared-secret "MySQL-HA";
  37. }
  38. disk {
  39. on-io-error detach;
  40. fencing resource-only;
  41. }
  42. startup {
  43. wfc-timeout 120;
  44. degr-wfc-timeout 120;
  45. }
  46. on test6 {
  47. device /dev/drbd2;
  48. disk /dev/sda8;
  49. address 10.1.88.175:7788;
  50. meta-disk internal;
  51. }
  52. on test7 {
  53. device /dev/drbd2;
  54. disk /dev/sda8;
  55. address 10.1.88.179:7788;
  56. meta-disk internal;
  57. }
其中 /dev/drbd2是块设备文件,/dev/sda8s 复制nfs的分区
把这个文件复制到 test7里
剩下的操作与之前讲的操作一样,就不浪费时间了
修改 heartbeat资源

 
 
  1. [root@test6 ~]# grep -v "^#" /etc/ha.d/haresources
  2. test6 IPaddr::10.1.88.199/24/eth0:1 mysqld_umount mysqld
  3. test6 IPaddr::10.1.88.198/24/eth0:1 drbddisk::nfs Filesystem::/dev/drbd2::/data/drbd/nfs::ext3 nfs
其中drbddisk:: www是资源组的名字
IPaddr::10.1.88.198/24/eth0:用IPaddr脚本配置浮动nfs的VIP
Filesystem::/dev/drbd2::/data/drbd/nfs::ext3 nfs:用Filesystem脚本实现磁盘挂载和卸载

 
 
  1. cp nfs /etc/ha.d/resource.d/
  2. chmod 755 /etc/ha.d/resource.d/nfs
现在整个架构都解释完成,相信大家都有个疑问,为什么我在弄web间使用nfs进行数据同步的操作不是在刚开始安装drbd里进行,我的解释是:web间同步的方法很多,rsync、unison或者rsync+inotify等等都可以,只是看你的实际需要来选择,把nfs放到最后是为了让大家看清楚之前drbd的操作,因为drbd这一块操作很难,不易学习,而且web之间数据同步的方法也不一定是nfs,其他的方法也不是不行,所以我把nfs同步放到了最后。
如果大家有什么疑问,可以在下面留言,我会努力的帮助大家解决;我写博客的目的就是为了分享我的成功、经验,与大家一起交流、学习,请大家不吝赐教!
为了让大家能够更清楚的明白我设计的架构,我特意买了6个vps来制作这个架构,下面是架构在vps里的图:
 

 

 

下图是各个服务在vps里的地址

 

由于vps是256m内存,所以drbd+heartbeat安装不成功,而且负载均衡层的keepalived也不成功,但由于负载均衡层每台服务器都有双ip,所以我通过每台服务器的第二个ip左右负载均衡双主的vip,作为dns轮询的ip,这样也能实现负载均衡双主的功能(实在是在vps没有办法实现我才这样,而且vps好贵啊,如果不是为了给大家做展示与测试,我才不买;公司的测试机器也没有外网ip,所以才用vps给大家展示,请见谅!)

下图是dns做轮询的查看图

 

从图中可以看到,www.netnvo.com这个域名对于2个ip,分别是184.82.79.165与184.82.79.161,实现了dns轮询。

由于我vps的内存是256m的,所以在进行ab与webbench的时候,最多只能到7000并发,在我做测试的测试环境里,并发到1w是没有问题,这里的vps架构只是为了大家的研究,测试就别做太多的并发,否则会把vps的内存给消耗没的,大家注意这点!

BTW:在制作这个架构中,我的很多朋友与群友给了我很多帮助性的建议,我还从网上的很多blog中学会了很多知识,尤其是http://bbs.ywlm.net/thread-965-1-1.html这篇blog给了我很大的参考性,十分感谢他们!

 


 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/835339,如需转载请自行联系原作者






相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
165 0
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
50 4
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
69 3
|
3月前
|
Unix 应用服务中间件 Linux
Nginx入门--初识Nginx的架构
Nginx入门--初识Nginx的架构
67 0
|
5月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
91 2
|
5月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
109 1
|
6月前
|
监控 应用服务中间件 nginx
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
|
6月前
|
应用服务中间件 nginx 缓存
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
|
8月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
199 0
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。

热门文章

最新文章