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装包
[root@lvs1 ~]# yum -y install ipvsadm.x86_64
[root@lvs1 ~]# yum -y install keepalived.x86_64
3.2修改keepalived配置文件(主调度器)
1)全局段——设置发送邮件

global_defs {notification_email {root@localhost}notification_email_from admin@tedu.cnsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr
#   vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}2)定义主从和vip
vrrp_instance VI_1 {state MASTER             //主调度器interface eth0virtual_router_id 51        //虚拟路由ippriority 150                //优先级advert_int 1authentication {auth_type PASSauth_pass 1111       //设置密码}virtual_ipaddress {192.168.4.100         //配置vip}
}3)定义调度算法
virtual_server 192.168.4.100 80 {delay_loop 6lb_algo rr                 //算法为轮询lb_kind DR               //LVS模式为DRpersistence_timeout 50   //50s内相同的客户机来访问给相同的web服务器
protocol TCPreal_server 192.168.4.3 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.4.4 80 {                      //有几个web服务器写几段weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}3.3配置从服务器
从服务器与主服务器的配置文件相似,所以直接scp一份过去,把从服务器上的配置文件中的MASTER改为BACKUP并把优先级调小。

[root@lvs1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.4.2:/etc/keepalived/
[root@lvs2 ~]# vim /etc/keepalived/keepalived.conf
……
state BACKUP
……
priority 100
……
:wq

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

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

4.2修改nginx配置文件
root@web1 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)启动服务:[root@web1 sbin]# nginx -s reload4.3改ulimit参数支持更大并发
[root@web1 sbin]# ulimit -Hn 100000                 //临时修改
[root@web1 sbin]# ulimit -Sn 100000
[root@web1 sbin]# vim /etc/security/limits.conf      //永久修改
*               soft     nofile      100000
*               hard    nofile       100000          //最后添加
4.4 安装php来支持动态解析

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

4.5 配置vip在lo:0网卡上(本机回环地址)
[root@web1 lnmp_soft]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo{,:0}
[root@web1 network-scripts]# vim ifcfg-lo:0DEVICE=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
[root@web1 network-scripts]# ifup lo:0      //启动网卡
[root@web1 network-scripts]# ip addr show lo    //查看4.6 web2上同样配置(同上)
5、测试一下前面的配置是否正确
1)在web1和web2上写一个不同的页面
2)在lvs1&lvs2上启动keepalived服务
[root@lvs1 ~]# systemctl start keepalived.service
[root@lvs1 ~]# ipvsadm -Ln       //看规则中是否有web1&web2
[root@room9pc01 ~]# firefox http://192.168.4.100
3)把其中一台web挂掉,看看规则中是否会有变化,且是否有邮件
6、配置db1&db2
6.1安装配置mysql
[root@db1 ~]# tar -xf mysql-5.7.17.tar
[root@db1 ~]# yum -y install mysql-community-*
[root@db1 ~]# systemctl start mysqld     //启服务
[root@db2 ~]# grep -i password /var/log/mysqld.log   //找初始登录秘密
[root@db2 ~]# 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";[root@db1 ~]# 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,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突[root@db2 ~]# systemctl restart mysqld[root@db1 mysql]# mysql -uroot -p123456
mysql> grant replication slave on *.* to repluser@'%' identified by "123456";
mysql> grant all on *.* to admin@'%' 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)安包
[root@db1 network-scripts]# yum -y install keepalived.x86_64
2)修改配置文件
[root@db1 ~]# vim /etc/keepalived/keepalived.conf
全局段——发邮件
global_defs {notification_email {root@localhost}notification_email_from admin@tedu.cnsmtp_server 127.0.0.1smtp_connect_timeout 30router_id mysql-1vrrp_skip_check_adv_addr
#   vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}

定义主服务器

vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 53priority 150nopreempt      //不抢占优先权advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.4.200}
}

定义算法和real_server

virtual_server 192.168.4.200 3306 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.4.5 3306 {
   weight 1

notify_down /etc/keepalived/bin/mysql.sh

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

TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 3306     //监控健康状态端口。}}
}3)把主服务器上的配置文件scp一份到从库上,只需修改MASTER/优先级和real server的ip即可。并把nopreempt这一行去掉,这个一般只配置在优先级大的上面。4)启服务
[root@db2 ~]# systemctl restart keepalived.service
5)看vip是否到这台主机了。
[root@db1 ~]# ip a s eth06.4 db1&db2编写调度keepalived的脚本
因为keepalived没有与lvs联用,所以不会像前面的调度器上调度web一样,当一台web挂掉,keepalived会把其从lvs的规则中自动删除,在这一个db集群中,只有db1或者db2上的keepalived程序挂掉时,vip才会从master上跳到backup上。Mysqld挂掉则不会自动跳,这样启不到监控调度的作用,所以我们可以编写个脚本来调度。
当监控到db1上3306端口挂掉了,则关闭本机的keepalived服务器。
[root@db1 bin]# mkdir /etc/keepalived/bin
[root@db1 bin]# vim mysql.sh
#!/bin/bash
pkill keepalived
/sbin/ifdown eth0 && /sbin/ifup eth0
:wq6.5 验证调度keepalived的脚本
在db1上把mysqld服务stop掉,看vip是否跑到db2这台主机上了。
当数据库重新起来之后,要把keepalived服务手动启起来。

转载于:https://blog.51cto.com/13731599/2133651

搭建高可用web和数据库集群相关推荐

  1. 从零开始搭建高可用RabbitMQ镜像模式集群

    文章目录 RabbitMQ集群模式搭建 准备工作 选取任意一个节点作为master节点, 进行文件同步, 我这里选择138作为master节点 组成集群 配置镜像队列(设置镜像队列策略) 集群配置参数 ...

  2. 云服务器搭建高可用keepalived+nginx+emqx集群

    云服务器搭建高可用keepalived+nginx+emqx集群 一.高可用emqx集群搭建 1 单机搭建emqx 2 配置认证和鉴权插件 3 搭建emqx集群 二.nginx搭建负载均衡 1 ngi ...

  3. haproxy keepalived_详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群

    概述 目前业界对数据库性能优化普遍采用集群方式,而oracle集群软硬件投入昂贵,mysql则比较推荐用mycat去搭建数据库集群,下面介绍一下怎么用mycat+haproxy+keepalived搭 ...

  4. 干货来袭!手动搭建高可用的Redis5-0分片集群

    其实互联网职业可以大致分两个阶段,在毕业后的3到5年内主要都是以学习.积累为主,从一开始啥都不懂的校园"新鲜人"向"职业人"转变.如果你是Java开发者,在这个 ...

  5. 使用LVS和Keepalived搭建高可用负载均衡服务器集群

    目录 1.什么是LVS和Keepalived 2.负载均衡服务器集群示例环境搭建及安装配置 2.1.环境网络拓扑结构 2.2.安装ipvsadm软件 2.3.安装keepalived 2.4.配置网络 ...

  6. mycat集群_HA高可用架构_验证高可用---MyCat分布式数据库集群架构工作笔记0030

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 前面咱们已经按照下面的,ip地址,已经安装好了,我们的高可用了 然后我们知道了,我们首先在myca ...

  7. 基于高可用配置的RabbitMQ集群实践

    本文将提供一个基于高可用配置的RabbitMQ集群方案.通过介绍RabbitMQ的基本概念.主要作用和使用场景,并搭建RabbitMQ单节点环境.用程序演示消息发送接收过程,以及搭建RabbitMQ高 ...

  8. keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...

    前言:初期应用较小,一般以单机部署为主,即可满足业务的需求,随着业务的不断扩大,单机部署的模式无法承载这么大的业务量,需要进行服务集群化的部署,本文主要介绍服务器Tomcat多实例部署,搭载Keepa ...

  9. 【Redis】高可用架构之Cluster集群和分⽚

    高可用架构之Cluster集群和分⽚ 1. 前言 2. Cluster 模式介绍 2.1 什么是Cluster模式? 2.2 为什么需要Cluster模式? 2.2.1 垂直拓展(scale up)和 ...

最新文章

  1. 【Relax人生法则之躺平方法论】那些看似无足轻重 实则细思极恐的毒鸡汤
  2. java中List深拷贝的简单实例
  3. 树状数组 | 1057
  4. 无言的鞭策:日本20年19人获自然科学诺奖
  5. java stream 取某个字段_java8的函数式编程和stream使用心得
  6. python3下载安装配置-Linux 安装python3.7.3
  7. 机器人II(sdutoj2585)-JAVA
  8. 概率整形技术(PCS)介绍
  9. 如何自动修复XP/VISTA/WIN7系统引导的工具(NTBootAutofix 2.02)
  10. 【Python3网络爬虫开发实战】1.2.1-Requests的安装
  11. 服务器(Windows系统)自建filebrowser网盘服务器超详细教程
  12. 双倍回文[Shoi2011][bzoj2342]
  13. python贴吧顶贴_python模拟登录百度贴吧
  14. MDT批量部署服务搭建
  15. OpenCV 两张大小不同图片的叠加
  16. Web2.0与Web3.0的区别是什么
  17. cogs339 维修数列 ……
  18. 斯年,愿做岁月的知音
  19. 数据库批量插入和存在的问题
  20. 【JSP】登陆成功跳转用户信息界面显示基本用户信息

热门文章

  1. 统计学习导论 Chapter3--Linear Regression
  2. 语义分割--Efficient Deep Models for Monocular Road Segmentation
  3. [c++]引入了头文件和动态库,为什么找不到函数实现
  4. 数据库基准测试:database bencnmark --生成大量随机测试数据
  5. LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法
  6. Java 爬虫--类似Python的requests库--HttpClient, HttpAsyncClient--Maven
  7. oracle19c数据库清理,Oracle 19c集群重装
  8. java自然排序_Java中的自然排序顺序字符串比较 - 是内置的吗?
  9. Tomcat(五):Tomcat 参数调优教程
  10. spring中这些能升华代码的技巧,可能会让你爱不释手