18.1 集群介绍


·根据功能划分为两大类:高可用和负载均衡

·高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务

·实现高可用的开源软件有:heartbeat、keepalived

·负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这·个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2

·实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler





18.2 keepalived介绍


·在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果

·keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。

·在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。

·master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。

·Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。




18.3/18.4/18.5 用keepalived配置高可用集群


准备两台主机,一台ip为192.168.65.128,一台ip为192.168.65.129

128为master,129为backup

两台机器都执行yum install -y keepalived,两台机器都安装nginx

编辑配置文件/etc/keepalived/keepalived.conf

可以先备份keepalived.conf文件为keepalived.conf.bak

再清空keepalived.conf,之后写入新配置内容

[root@localhost ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@localhost keepalived]# ls
keepalived.conf  keepalived.conf.bak
[root@localhost keepalived]# > keepalived.conf                    ## > 为清空快捷键
[root@localhost keepalived]# vim keepalived.conf

2018-4-9 15周4次课 用keepalived配置高可用集群_配置

内容为:http://note.youdao.com/noteshare?id=cdc47a51a478dd704ce05af309c56da4&sub=9D7895DAD16F4AA6BBC79C20A0855852


notification_email     有问题,发邮件给哪个邮箱,可以不定义

notification_email_from     有问题用哪个邮箱发邮件,可以不定义

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL     都可以不定义

vrrp_script chk_nginx     检测服务是否正常 interval 3 检测间断为3秒

vrrp_instance VI_1     master相关的配置

state     角色是master,如果是从的话就是 backup

interface     发送广播使用的网卡

virtual_router_id     路由id

priority 100     权重

authentication     认证相关信息

virtual_ipaddress 主从共有ip,也就是vip,主宕机,从解析到该ip上去

track_script 加载脚本,之前定义的chk_nginx检查nginx


定义检查nginx是否正常的脚本(keepalived.conf配置文件中定义位置):

[root@localhost keepalived]# vim /usr/local/sbin/check_ng.sh

2018-4-9 15周4次课 用keepalived配置高可用集群_集群_02

配置文件内容:http://note.youdao.com/noteshare?id=17b7d082afd8d31b4fd5c48b5f93bcc1&sub=E207C9413B70409DA1A4E3F0A3FEE494


执行ps -C nginx --no-heading|wc -l命令计算nginx进程数,如果进程数等于0,则说明nginx服务没有启动,那么需要启动nginx服务,启动之后再查看进程数值,如果还是0,说明nginx依然没有启动,那么需要写一个日期的错误提示到日志里,方便排查问题。之后停止keepalived,主keepalived一停,从就会自动起来服务,以免主从都有keepalived启动,产生紊乱,脑裂。


ip addr可以看到vip  192.168.65.100

2018-4-9 15周4次课 用keepalived配置高可用集群_集群_04


更改检查nginx脚本的权限

[root@localhost keepalived]# chmod 755 /usr/local/sbin/check_ng.sh
[root@localhost keepalived]# systemctl start keepalived                ##启动keepalived
[root@localhost keepalived]# ps aux | grep keepalived
root       1726  0.0  0.1 120740  1404 ?        Ss   22:01   0:00 /usr/sbin/keepalived -D
root       1727  0.0  0.2 120740  2752 ?        S    22:01   0:00 /usr/sbin/keepalived -D
root       1728  0.0  0.2 125104  2832 ?        S    22:01   0:00 /usr/sbin/keepalived -D
root       1745  0.0  0.0 112676   980 pts/0    R+   22:01   0:00 grep --color=auto keepalived
[root@localhost keepalived]# ps aux | grep nginx                        ##nginx也已经启动
root        850  0.0  0.1  45992  1280 ?        Ss   20:58   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody      854  0.0  0.3  48480  3920 ?        S    20:58   0:00 nginx: worker process
nobody      855  0.0  0.3  48480  3920 ?        S    20:58   0:00 nginx: worker process
root       1760  0.0  0.0 112676   980 pts/0    R+   22:02   0:00 grep --color=auto nginx
[root@localhost keepalived]# /etc/init.d/nginx stop                    ##停止nginx服务
Stopping nginx (via systemctl):                            [  确定  ]
[root@localhost keepalived]# ps aux | grep nginx                        ##ngxin又自己启动了
root       1821  0.0  0.1  45992  1292 ?        Ss   22:02   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     1825  0.0  0.3  48480  3932 ?        S    22:02   0:00 nginx: worker process
nobody     1826  0.0  0.3  48480  3932 ?        S    22:02   0:00 nginx: worker process
root       1828  0.0  0.0 112676   980 pts/0    R+   22:02   0:00 grep --color=auto nginx

·日志都在/var/log/messages下


·检查防火墙主从iptables和getenforce关闭


·编辑从上的/etc/keepalived/keepalived.conf

[root@localhost ~]# vim /etc/keepalived/keepalived.conf

2018-4-9 15周4次课 用keepalived配置高可用集群_高可用_05

内容:http://note.youdao.com/noteshare?id=b12b72e89f72aca6896e4f250f7b4ce2&sub=94B6C23176174E7AA5E4BADF6F31802F


state 为BACKUP

virtual_router_id,vip 都和主一致

priority 主是100,从是90,要低于主



监控nginx脚本:

[root@localhost ~]# vim /usr/local/sbin/check_ng.sh

2018-4-9 15周4次课 用keepalived配置高可用集群_集群_06

如果nginx是yum 安装的,可以用systemctl start nginx为启动命令


更改脚本权限:

[root@localhost keepalived]# chmod 755 /usr/local/sbin/check_ng.sh


此时访问192.168.65.128可以访问nginx的默认虚拟服务器

2018-4-9 15周4次课 用keepalived配置高可用集群_高可用_07

2018-4-9 15周4次课 用keepalived配置高可用集群_集群_09


而192.168.65.129也可以访问自己nginx默认页


如果是yum安装的,那么/usr/share/nginx/html/index.html

2018-4-9 15周4次课 用keepalived配置高可用集群_集群_10


而此时如果访问192.168.65.100,那么访问的是主

2018-4-9 15周4次课 用keepalived配置高可用集群_配置_11


主上的ip:

2018-4-9 15周4次课 用keepalived配置高可用集群_集群_12


从上ip:

2018-4-9 15周4次课 用keepalived配置高可用集群_集群_13


[root@localhost ~]# iptables -I OUTPUT -p vrrp -j DROP

2018-4-9 15周4次课 用keepalived配置高可用集群_高可用_14


虽然从上有了vip,但是主上vip并没有释放掉

2018-4-9 15周4次课 用keepalived配置高可用集群_配置_15


访问192.168.65.100,依然是主上的默认虚拟服务器

2018-4-9 15周4次课 用keepalived配置高可用集群_配置_16


停止主上的keepalived服务,那么主上释放vip,访问192.168.65.100,已经不是主上的默认虚拟服务器了,而是从上的,因此vip已经转移到从上

[root@localhost ~]# systemctl stop keepalived

2018-4-9 15周4次课 用keepalived配置高可用集群_高可用_17


重启主上的keepalived,那么vip会重新从从上转移到主上

[root@localhost ~]# systemctl start keepalived

2018-4-9 15周4次课 用keepalived配置高可用集群_高可用_18

2018-4-9 15周4次课 用keepalived配置高可用集群_配置_19

2018-4-9 15周4次课 用keepalived配置高可用集群_配置_20