一, Linux 集群概述
1), 根据功能划分为两大类: 高可用和负载均衡
高可用集群通
常为两台服务器, 一台工作, 另外一台作为冗余, 当提供服务的机器宕机, 冗余将接替继续提供服务
2), 实现高可用的开源软件有:
heartbeat,keepalived
heartbeat: 有很多的 BUG, 有很长时间没有更新了, 不推荐用.
3), 负载均衡集群
需要有一台服务器作为分发器, 它负责把用户的请求分发给后端的服务器处理, 在这个集群里, 除了分发器外, 就是给用户提供服务的服务器了, 这些服务器数量至少为 2
实现负载均衡的开源软件有:
LVS,keepalived,haproxy,nginx,
商业的有 F5,Netscaler 成本高, 优势: 更高的并发量, 稳定性好.
二, 高可用的开源软件 keepalived 介绍
1), 我们使用 keepalived 来实现高可用集群, 因为 heartbeat 在 centos6 上有一些问题, 影响实验效果;
2),keepalived 通过 VRRP(Virtual Router Redundancy Protocl) 来实现高可用.
3), 在这个协议里会将多台功能相同的路由器组成一个小组, 这个小组里会有 1 个 master 角色和 N(N>=1) 个 backup 角色.
master 会通过组播的形式向各个 backup 发送 VRRP 协议的数据包, 当 backup 收不到 master 发来的 VRRP 数据包时, 就会认为 master 宕机了. 此时就需要根据各个 backup 的优先级来决定谁成为新的 master.
4),Keepalived 要有三个模块, 分别是 core,check 和 vrrp.
core 模块为 keepalived 的核心, 负责主进程的启动, 维护以及全局配置文件的加载和解;
check 模块负责健康检查;
vrrp 模块是来实现 VRRP 协议的.
三, 用 keepalived 配置高可用
1), 准备两台机器 a 和 b,a 作为 master,b 作为 backup; 两台机器都执行 yum install -y keepalived
2), 两台机器都安装 nginx, 安装 nginx: yum install -y nginx(让哪个服务实现高可用我们实验用 nginx, 而且 nginx 可以用来做负载均衡)
3), 更改配置文件
设定 vip 为 100
编辑 a 上 keepalived 配置文件
[root@a ~]#> /etc/keepalived/keepalived.conf
清空里面的内容
/etc/keepalived/keepalived.conf 加入以下内容:
- global_defs { #全局定义参数
- notification_email { #定义邮箱
- aming@aminglinux.com
- }
- notification_email_from root@aminglinux.com #用哪一个邮箱发送
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id LVS_DEVEL
- }
- vrrp_script chk_nginx { #检测服务是否正常
- script "/usr/local/sbin/check_ng.sh" #shell 要自己定
- interval 3 #检测间断时间 3S
- }
- vrrp_instance VI_1 { #定义 master
- state MASTER
- interface ens33 #指定网卡发广播
- virtual_router_id 51 #定义路由 ID
- priority 100 #定义权重
- advert_int 1 #
- authentication {
- auth_type PASS #认证相关信息
- auth_pass aminglinux>com
- }
- virtual_ipaddress { #公有 IP , 主从都要用的.
- 192.168.188.100
- }
- track_script { #加载
- chk_nginx
- }
- }
内容放也可以从 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf 获取
编辑 a 机器的监控脚本:
vi /usr/local/sbin/check_ng.sh
定入以下内容:
- #!/bin/bash
- # 时间变量, 用于记录日志
- d=
- date --date today +%Y%m%d_%H:%M:%S
- # 计算 nginx 进程数量
- n=
- ps -C nginx --no-heading|wc -l
- # 如果进程为 0, 则启动 nginx, 并且再次检测 nginx 进程数量,
- # 如果还为 0, 说明 nginx 无法启动, 此时需要关闭 keepalived
- if [ $n -eq "0" ]; then
- /etc/init.d/nginx start
- n2=
- ps -C nginx --no-heading|wc -l
- if [ $n2 -eq "0" ]; then
- echo "$d nginx down,keepalived will stop">> /var/log/check_ng.log
- systemctl stop keepalived
- fi
- fi
内容也可以从 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh 获取
给检查脚本 755 权限:
chmod 755 /usr/local/sbin/check_ng.sh
systemctl start keepalived a 机器启动服务
查看服务是否启动 pa aux |grep keep
它的日志文件在: /var/logs/messages
然后再查看它的 IP 地址: ip add
查看防火墙是不是开启, 我们需要把它们关闭.
- iptables -nvL
- getenforce
- systemctl stop firewalld
4), 配置从
B 机器从上编辑配置文件:
清空原 keepalived.conf 文件内容:>/etc/keepalived/keepalived.conf
- global_defs {
- notification_email {br/>aming@aminglinux.com
- }
- notification_email_from root@aminglinux.com
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id LVS_DEVEL
- } mailto:br/%3Eaming@aminglinux.com%3Cbr/
- vrrp_script chk_nginx {
- script "/usr/local/sbin/check_ng.sh"
- interval 3
- }
- vrrp_instance VI_1 {
- state BACKUP
- interface ens33
- virtual_router_id 51
- priority 90
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass aminglinux>com
- }
- virtual_ipaddress {
- 192.168.188.100
- }
- track_script {
- chk_nginx
- }
- }
- # 时间变量, 用于记录日志
- d=
- date --date today +%Y%m%d_%H:%M:%S
- # 计算 nginx 进程数量
- n=
- ps -C nginx --no-heading|wc -l
- # 如果进程为 0, 则启动 nginx, 并且再次检测 nginx 进程数量,
- # 如果还为 0, 说明 nginx 无法启动, 此时需要关闭 keepalived
- if [ $n -eq "0" ]; then
- systemctl start nginx
- n2=
- ps -C nginx --no-heading|wc -l
- if [ $n2 -eq "0" ]; then
- echo "$d nginx down,keepalived will stop">> /var/log/check_ng.log
- systemctl stop keepalived
- fi
- fi
- /usr/share/nginx/html/index.html
- # 四, 测试高可用
来源: http://blog.51cto.com/10690709/2136663