搭建高可用web和数据库集群

1、项目简介即拓扑图
本次设计使用keepalived与lvs搭建一个调度器集群,实现lvs调度器的高可用,当lvs调度器的master宕机后,keepalived会自动切换到backup上。
调度后面的web集群,实现web集群的负载均衡,前方调度器会根据lvs算法把服务发给web集群中的主机去响应。
在web集群后面搭建数据库集群,数据库设置主主结构,并添加keepalived来实现高可用。
具体拓扑图如下:

2、环境准备
机器名称 IP配置 服务角色 备注
LVS1-master 192.168.4.1
(VIP1:192.168.4.100) 调度器的主服务器 配置keepalived
LVS2-backup 192.168.4.2
(VIP1:192.168.4.100) 调度器的从服务器 配置keepalived
Web1 192.168.4.3 后端web服务器 开启lnm的web
Web2 192.168.4.4 后端web服务器 开启lnm的web
db1 192.168.4.5
(VIP2:192.168.4.200) 后端mysql服务器 配置keepalived
db2 192.168.4.6
(VIP2:192.168.4.200) 后端mysql服务器 配置keepalived
3、配置调度服务器
3.1装包
[[email protected] ~]# yum -y install ipvsadm.x86_64
[[email protected] ~]# yum -y install keepalived.x86_64
3.2修改keepalived配置文件(主调度器)
1)全局段——设置发送邮件

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

2)定义主从和vip
vrrp_instance VI_1 {
    state MASTER             //主调度器
    interface eth0
    virtual_router_id 51        //虚拟路由ip
    priority 150                //优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111       //设置密码
    }
    virtual_ipaddress {
        192.168.4.100         //配置vip
    }
}

3)定义调度算法
virtual_server 192.168.4.100 80 {
    delay_loop 6
    lb_algo rr                 //算法为轮询
    lb_kind DR               //LVS模式为DR
    persistence_timeout 50   //50s内相同的客户机来访问给相同的web服务器
protocol TCP

    real_server 192.168.4.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.4.4 80 {                      //有几个web服务器写几段
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

3.3配置从服务器
从服务器与主服务器的配置文件相似,所以直接scp一份过去,把从服务器上的配置文件中的MASTER改为BACKUP并把优先级调小。

[[email protected] ~]# scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
……
state BACKUP
……
priority 100
……
:wq

4、配置lnp服务器(web)
4.1安装源码包nginx

[[email protected] lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[[email protected] lnmp_soft]# cd nginx-1.12.2/
[[email protected] nginx-1.12.2]# useradd -s /sbin/nologin nginx
[[email protected] nginx-1.12.2]# yum -y install gcc gcc-c++ pcre-devel
[[email protected] nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx //如果报错,则把需要的包安装上
[[email protected] nginx-1.12.2]# yum -y install zlib-devel
[[email protected] nginx-1.12.2]# make & make install
[[email protected] sbin]# ln -s /usr/local/nginx/sbin/nginx /sbin/

4.2修改nginx配置文件
[email protected] sbin]# vim /usr/local/nginx/conf/nginx.conf
1)修改最大链接数,增大并发

events {
    worker_connections  65535;
}
2)网站根路径

location / {
            root   html;
            index  index.php index.html index.htm;
        }

3)做动静分离

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }

4)启动服务:[[email protected] sbin]# nginx -s reload

4.3改ulimit参数支持更大并发
[[email protected] sbin]# ulimit -Hn 100000                 //临时修改
[[email protected] sbin]# ulimit -Sn 100000
[[email protected] sbin]# vim /etc/security/limits.conf      //永久修改
*               soft     nofile      100000
*               hard    nofile       100000          //最后添加
4.4 安装php来支持动态解析

[[email protected] sbin]# yum -y install php php-mysql.x86_64
[[email protected] lnmp_soft]# yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm
[[email protected] lnmp_soft]# systemctl restart php-fpm.service
[[email protected] lnmp_soft]# systemctl enable php-fpm.service

4.5 配置vip在lo:0网卡上(本机回环地址)
[[email protected] lnmp_soft]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp ifcfg-lo{,:0}
[[email protected] network-scripts]# vim ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.4.100
NETMASK=255.255.255.255
NETWORK=192.168.4.100
BROADCAST=192.168.4.100
ONBOOT=yes
NAME=lo:0
:wq
[[email protected] network-scripts]# ifup lo:0      //启动网卡
[[email protected] network-scripts]# ip addr show lo    //查看

4.6 web2上同样配置(同上)
5、测试一下前面的配置是否正确
1)在web1和web2上写一个不同的页面
2)在lvs1&lvs2上启动keepalived服务
[[email protected] ~]# systemctl start keepalived.service
[[email protected] ~]# ipvsadm -Ln       //看规则中是否有web1&web2
[[email protected] ~]# firefox http://192.168.4.100
3)把其中一台web挂掉,看看规则中是否会有变化,且是否有邮件
6、配置db1&db2
6.1安装配置mysql
[[email protected] ~]# tar -xf mysql-5.7.17.tar
[[email protected] ~]# yum -y install mysql-community-*
[[email protected] ~]# systemctl start mysqld     //启服务
[[email protected] ~]# grep -i password /var/log/mysqld.log   //找初始登录秘密
[[email protected] ~]# mysql -hlocalhost -uroot -p‘h:rqUP7PHKqi‘
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=6;
mysql> alter user user() identified by "123456";

[[email protected] ~]# vim /etc/my.cnf
……
validate_password_policy=0
validate_password_length=6
log-bin=db2
server_id=5
binlog_format="mixed"
relay-log=relay-bin
relay-log-index=slave-realy-bin.index
auto-increment-increment=2
auto-increment-offset=2
……
注意:mysql1和mysql只有server-id不同和auto-increment-offset不同,其他必须相同。
部分配置项解释如下:
binlog_format= mixed:指定mysql的binlog日志的格式,mixed是混合模式。
relay-log:开启中继日志功能
relay-log-index:中继日志清单
auto-increment-increment= 2:表示自增长字段每次递增的量,其默认值是1。它的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2。
auto-increment-offset= 2:用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突

[[email protected] ~]# systemctl restart mysqld

[[email protected] mysql]# mysql -uroot -p123456
mysql> grant replication slave on *.* to [email protected]‘%‘ identified by "123456";
mysql> grant all on *.* to [email protected]‘%‘ identified by "123456";

6.2 db1&db2互为主从
mysql> change master to master_host="192.168.4.5",master_user="repluser",master_password="123456",master_log_file="db1.000001",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;

mysql> change master to master_host="192.168.4.6",master_user="repluser",master_password="123456",master_log_file="db2.000002",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;

6.3 db1&db2上部署keepalived
1)安包
[[email protected] network-scripts]# yum -y install keepalived.x86_64
2)修改配置文件
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
全局段——发邮件
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id mysql-1
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

定义主服务器

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 53
    priority 150
    nopreempt      //不抢占优先权
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.4.200
    }
}

定义算法和real_server

virtual_server 192.168.4.200 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.4.5 3306 {
   weight 1

notify_down /etc/keepalived/bin/mysql.sh

``` //如果mysql宕机了,执行脚本中的内容。


        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 3306     //监控健康状态端口。
        }
        }
}

3)把主服务器上的配置文件scp一份到从库上,只需修改MASTER/优先级和real server的ip即可。并把nopreempt这一行去掉,这个一般只配置在优先级大的上面。

4)启服务
[[email protected] ~]# systemctl restart keepalived.service
5)看vip是否到这台主机了。
[[email protected] ~]# ip a s eth0

6.4 db1&db2编写调度keepalived的脚本
因为keepalived没有与lvs联用,所以不会像前面的调度器上调度web一样,当一台web挂掉,keepalived会把其从lvs的规则中自动删除,在这一个db集群中,只有db1或者db2上的keepalived程序挂掉时,vip才会从master上跳到backup上。Mysqld挂掉则不会自动跳,这样启不到监控调度的作用,所以我们可以编写个脚本来调度。
当监控到db1上3306端口挂掉了,则关闭本机的keepalived服务器。
[[email protected] bin]# mkdir /etc/keepalived/bin
[[email protected] bin]# vim mysql.sh
#!/bin/bash
pkill keepalived
/sbin/ifdown eth0 && /sbin/ifup eth0
:wq

6.5 验证调度keepalived的脚本
在db1上把mysqld服务stop掉,看vip是否跑到db2这台主机上了。
当数据库重新起来之后,要把keepalived服务手动启起来。

原文地址:http://blog.51cto.com/13731599/2133651

时间: 2024-11-05 11:52:02

搭建高可用web和数据库集群的相关文章

keepalived+nginx搭建高可用and负载均衡集群

keepalived+nginx搭建高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都由主进程发出,Slave(worke

高可用(HA)集群的搭建 --图形化搭建(针对rhel6.5)

高可用(HA)集群的搭建 --图形化搭建(针对rhel6.5) 实验环境:iptables selinux关闭,三台主机做好解析 实验主机IP: 172.25.0.251 172.25.0.2 172.25.0.3 高可用集群包括RHCS,pacemaker+lvs,heartbeat,keepalievd. 在做实验前,先了解RHCS套件,6以下才有,7就取消了. 一些服务进程的含义如下: Luci/ricci>>web方式的集群管理(配置)工具: Ccs>>集群配置服务,(例如

Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(HA)集群基本概念详解 http://www.linuxidc.com/Linux/2013-08/88522.htm Linux 高可用(HA)集群之Heartbeat详解 http://www.linuxidc.com/Linux/2013-08/88521.htm 一.前言      前几篇博文

LVS+keeplived+nginx+tomcat高可用、高性能jsp集群

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://kerry.blog.51cto.com/172631/557749 #!/bin/bash # BY kerryhu # MAIL:[email protected] # BLOG:http://kerry.blog.51cto.com # Please manual operation yum of before Operation..... #yum -y install

Heartbeat+MySQL+NFS 实现高可用(HA)的MySQL集群

一:试验目的 利用heartbeat心跳机制haresource实现高可用(HA)mysql数据库的搭建. 二:试验拓扑图 三:安装前的环境准备 规划IP为192.168.1.14为node1;IP为192.168.1.2为node2 1)修改各主机名称 修改node1主机名称  vim /etc/sysconfig/network   NETWORKING=yes   HOSTNAME=node1 #修改主机名称为node1  vim /etc/hosts     192.168.1.2 no

keepalived+nginx实现高可用and负载均衡集群

keepalived+nginx实现高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(work

高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南

(WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 为了部署HA集群,应该准备以下事情: namenode服务器: 运行namenode的服务器应该有相同的硬件配置. journalnode服务器:运行的journalnode进程非常轻量,可以部署在其他的服务器上.注意:必须允许至少3个节点.当然可以运行更多,但是必须是奇数个,如3,5,7,9个等等.当运行N个节点时,系统可以容忍至少(N-1)/2个节点失败而不影响正常运行. 在HA集群中,standby状态的

InitPHP框架搭建高可用WEB应用01:创建项目

创建Hello World项目 1. 下载框架 选择最新的版本,进行下载.框架下载地址:http://initphp 2. 创建项目目录 创建项目目录,目录示意图: 1. 文件夹initphp是最新下载的initphp框架文件夹 2. conf/comm.conf.php 放置项目配置文件 3. web/controller/ 文件夹放置控制器文件 4. index.php是项目入口文件 说明:使用initphp开发的项目是单入口,所有请求都会通过index.php进行分发. 3. index.

16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程

16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud, Redis,ActiveMQ,Nginx,Mycat,Netty,Jvm,Mecached,Nosql,Spring,大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:架构师,高并发,分布式,集群,高可用,高可扩展,高性能,设计模式,数据结构算法,虚拟机,微服务架构,日志分析,