集群介绍
这些实现高可用和负载均衡的都是软件, 是为我们在服务器上的服务所作用的.
keepalived 介绍
用 keepalived 配置高可用集群
在 nginx 上实现高可用:
准备工作:
准备两台机器 133 和 134,133 作为 master(主),134 作为 backup(备用)
两台机器都执行 yum install -y keepalived
两台机器都安装 nginx, 其中 133 上已经编译安装过 nginx,134 上需要 yum 安装 nginx: yum install -y nginx
!!(133 机器的 nginx 是使用二进制的源码包安装的, 而 134 机器的 nginx 是用 yum 安装的
, 因此总会有区别的, 例如在启动服务的时候和使用二进制源码包安装的 nginx 服务在启动时, 可以
使用 /etc/init.d nginx start 启动服务(前提是该服务的服务启动文件放在这里), 也可以用
systemctl start nginx 启动服务. 而使用 yum 安装的 nginx 只能用: systemctl start nginx 启动服务)
一, 配置 master
1. 修改主上 master 的 keepalived 配置文件:
下载后的 keepalived 配置文件在 / etc/keepalived/
(编辑 133 上 keepalived 配置文件, 内容从 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf 获取)
(1)先清除 keepalived 配置文件内容:
> /etc/keepalived/keepalived.conf
(2)vim /etc/keepalived/keepalived.conf, 添加内容:
- global_defs {
- notification_email {
- cansheng@740183413@qq.com
- }
- notification_email_from root@740183413@qq.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"
- interval 3
- }
- vrrp_instance VI_1 {
- state MASTER
- interface ens33
- virtual_router_id 51
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass cansheng123456
- }
- virtual_ipaddress {
- 192.168.136.100
- }
- track_script {
- chk_nginx
- }
- }
VIP: 虚拟 ip, 这个 IP 是由 keepalived 给服务器配置上的, 服务器靠这个 VIP
对外提供服务, 当 master 机器宕机, VIP 被分配上 backup 上, 这样就能保证服务运作.
2. 编写监控脚本(检测服务 nginx)
(内容从 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_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
当主 master 的 nginx 服务不能启动则要关闭 keepalived, 不然则会主从出现脑裂
修改脚本的权限:
chmod 755 /usr/local/sbin/check_ng.sh
3. 启动 keepalived:
systemctl start keepalived
4. 测试一下该脚本:
先关闭 nginx , 判断是否会自动启动.
/etc/init.d/nginx stop
可以看出, 关闭了 nginx . 脚本会执行, 自动执行开启 nginx 服务
5. 检查 VIP 是否加载了在网卡 ip:
ip addr (只能用这个命令查看, ifconfig 不能看到.)
二, 配置从 backup
配置前先检查两台机器的防火墙和 selinux. 要关闭
1. 编辑 keepalived 配置文件
先清空自带内容:> /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
(编辑配置文件, 内容从 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf 获取)
内容:
- global_defs {
- notification_email {
- cansheng@740183413@qq.com
- }
- notification_email_from root@740183413@qq.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"
- 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 cansheng123
- }
- virtual_ipaddress {
- 192.168.136.100
- }
- track_script {
- chk_nginx
- }
- }
2. 编写监控监本:
vim /usr/local/sbin/check_ng.sh
内容从 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh 获取
内容:
- # 时间变量, 用于记录日志
- 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
编写完脚本修改其权限:
chmod 755 /usr/local/sbin/check_ng.sh
3. 开启 keepalived 服务:
systemctl start keepalived
现在主和从都有 nginx
浏览器查看:
主: 192.168.136.133
从: 192.168.136.134
(因为 nginx 是使用 yum 安装的, 所以默认页的路径 / usr/share/nginx/html/index.html)
测试:
判断标准: 查看 VIP 访问的是那个机器的默认页
192.168.136.100
说明这时 VIP 在 master 上
测试高可用
测试 1: 关闭 master 上的 nginx 服务
关闭后 nginx 服务能自动启动, 只要 keepalived 服务启动则加载监控脚本.
测试 2: 在 master 上增加 iptabls 规则 :
iptables -I OUTPUT -p vrrp -j DROP
此时数据已经发生脑裂
(测试后清空 iptables -F)
测试 3: 关闭 master 上的 keepalived 服务:
VIP 释放, 从 backup 得到 VIP. 浏览器上访问 VIP 则访问到
backup 的机器的默认页.
一般搭建高可用都是使用两台机器, 如果是多台机器则在配置文件中, 只要修改权重不同就行了.
MySQL 做高可用, 要保持数据一致才行.
master 和 backup 的 keepalived 的配置文件中的网卡名字是同一个, 这个没有影响吗? backup 主机上要是没有那个网卡, keepalived 是怎么处理的.
可自配, 例如 master 上叫 eth0,backup 上叫 eth1, 在配置文件中指定即可.
来源: http://www.bubuko.com/infodetail-2576619.html