集群-架构
2台虚拟机
[root@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@linux-node1 ~]# yum install -y net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap gcc glibc gcc-c++ make haproxy keepalived nginx psmisc
vim /etc/haproxy/haproxy.cfg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | global maxconn 100000 chroot /var/lib/haproxy user haproxy group haproxy daemon nbproc 1 pidfile /usr/local/haproxy/logs/haproxy .pid log 127.0.0.1 local3 info defaults option http-keep-alive maxconn 100000 mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms listen stats mode http bind 0.0.0.0:8888 stats enable stats uri /haproxy-status stats auth haproxy:saltstack frontend frontend_www_example_com bind 10.240.17.100:80 mode http option httplog log global default_backend backend_www_example_com backend backend_www_example_com option forwardfor header X-REAL-IP option httpchk HEAD / HTTP /1 .0 balance source server web-node1 10.240.17.100:8080 check inter 2000 rise 30 fall 15 server web-node2 10.240.17.103:8080 check inter 2000 rise 30 fall 15 |
[root@node1 www]# systemctl restart haproxy
[root@node1 www]# mkdir /data/www/www -p
[root@node1 www]# echo "node1" /data/www/www/index.html
[root@node1 www]# vim /data//ops/app/tengine-2.1.0/conf/vhost.default.conf
1 2 3 4 5 6 7 8 9 | server { listen 8080; location / { root /data/www/www ; index index.html index.htm; } error_log logs /error_www .abc.com.log error; access_log logs /access_www .abc.com.log main; } |
[root@node2 www]# systemctl restart haproxy
[root@node2 www]# mkdir /data/www/www -p
[root@node2 www]# echo "node2" /data/www/www/index.html
[root@node2 www]# vim /data//ops/app/tengine-2.1.0/conf/vhost.default.conf
1 2 3 4 5 6 7 8 9 | server { listen 8080; location / { root /data/www/www ; index index.html index.htm; } error_log logs /error_www .abc.com.log error; access_log logs /access_www .abc.com.log main; } |
网友访问发现一直是访问node2因为haproxy配置文件定义了 balance source 根据源IP算法来访问的,如果想轮训改成 roundrobin
yum install keepalived
vim /etc/keepalived/keepalived.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ! Configuration File for keepalived global_defs { notification_email { saltstack@example.com } notification_email_from keepalived@example.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id haproxy_node1 } vrrp_instance haproxy_ha { state MASTER interface em1 virtual_router_id 36 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.240.17.222 } } |
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
[root@node1 ~]# vim /etc/haproxy/haproxy.cfg
bind 10.240.17.222:80
[root@node1 ~]# systemctl start keepalived
[root@node1 ~]# systemctl reload haparoxy
###
[root@node2 ~]# yum install keepalived -y
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ! Configuration File for keepalived global_defs { notification_email { saltstack@example.com } notification_email_from keepalived@example.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id haproxy_node2 } vrrp_instance haproxy_ha { state BACKUP interface em1 virtual_router_id 36 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.240.17.222 } } |
[root@node2 ~]# vim /etc/haproxy/haproxy.cfg
bind 10.240.17.222:80
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
[root@node2 ~]# /etc/init.d/haproxy restart
[root@node2 ~]# /etc/init.d/keepalived restart
然后用网页访问VIP,发现node1 keepalived停了虚IP飘逸到node2了,如果实现切换就写检查脚本
###
灾难恢复 根据信息系统灾难恢复规范来定义级别。
1.核心业务,非核心业务
2.从重要数据到非重要数据
3.从下往上
4.灾备演练
5.徘徊在冷备和双活之间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构