web访问MySQL集群_搭建高可用web和数据库集群

本文档介绍了如何使用LVS和Keepalived搭建高可用的web和数据库集群。首先,通过配置Keepalived实现LVS调度器的主备切换,确保调度服务的稳定性。接着,利用LVS的负载均衡算法,将web请求分散到多个web服务器。在web集群后,部署主主结构的MySQL数据库集群,并应用Keepalived以保证数据库的高可用。每个阶段都详细说明了环境准备、配置步骤及验证方法,旨在提供一个完整的集群构建方案。
摘要由CSDN通过智能技术生成

1、项目简介即拓扑图

本次设计使用keepalived与lvs搭建一个调度器集群,实现lvs调度器的高可用,当lvs调度器的master宕机后,keepalived会自动切换到backup上。

调度后面的web集群,实现web集群的负载均衡,前方调度器会根据lvs算法把服务发给web集群中的主机去响应。

在web集群后面搭建数据库集群,数据库设置主主结构,并添加keepalived来实现高可用。

具体拓扑图如下:

73e7283d1991116ccc64ab5bc2256abe.png

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.cn

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并把优先级调小。

[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 reload

4.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: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

[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.cn

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)启服务

[root@db2 ~]# systemctl restart keepalived.service

5)看vip是否到这台主机了。

[root@db1 ~]# 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服务器。

[root@db1 bin]# mkdir /etc/keepalived/bin

[root@db1 bin]# vim mysql.sh

#!/bin/bash

pkill keepalived

/sbin/ifdown eth0 && /sbin/ifup eth0

:wq

6.5 验证调度keepalived的脚本

在db1上把mysqld服务stop掉,看vip是否跑到db2这台主机上了。

当数据库重新起来之后,要把keepalived服务手动启起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值