MySQL+NGINX设置主主复制高可用

该实验目的是为了:

1,使用NGINX轮询来配置mysql主主复制集群的高可用,当两台mysql正常使用的时候,在他们之间轮询,分担服务器压力。当其中一台mysql down了之后,NGINX会自动轮询up的那台。当down的mysql启动之后,数据会自动同步。,

2,远程连接mysql的时候,采用NGINX的IP即可。

准备3台centos7服务器

192.168.8.131 mysql1

192.168.8.132 mysql2

192.168.8.133 nginx+mysql客户端

mysql主主集群搭建参考:MySQL5.7.30主从复制集群搭建及互为主从集群搭建

NGINX安装步骤如下:

yum -y install openssl openssl-devel make gcc gcc-c++ epel-devel
tar -xf nginx-1.10.3.tar.gz
cd  nginx-1.10.3

./configure  --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_flv_module  --with-http_gzip_static_module  --with-stream

make && make install

这里最重要的是要编译安装stream模块

然后在nginx.conf的最后面加上

stream {
        upstream mysql {
        server 192.168.8.131:3306 max_fails=3 fail_timeout=30s;
        server 192.168.8.132:3306 max_fails=3 fail_timeout=30s;
}
server {
        listen       3306;
        proxy_pass mysql;
}
}
注意:是在配置文件的最后一个 } 后面加上这段配置,否则肯定会报错的。

/usr/local/nginx/sbin/nginx -t

这里会报个错误,说找不到NGINX用户。建一个呗。

groupadd nginx
useradd -g nginx -d /home/nginx nginx

/usr/local/nginx/sbin/nginx

mysql客户端可以使用:

yum -y install mariadb

首先要确认在NGINX服务器133上可以通过命令连接131和132

 mysql -u root -h 192.168.8.131 -p123456
 mysql -u root -h 192.168.8.132 -p123456

如果不能连接,首先考虑防火墙是否关闭,其次是设置mysql的访问权限。

grant all on *.* to  'root'@'192.168.8.%' identified by '123456';

flush privileges

如果具备下面两个条件:

1,NGINX配置文件ok

2,本机可以连接两台mysql

接下来我们就可以测试通过NGINX的IP来连接mysql

mysql -u root -p123456 -h 192.168.8.133

正常情况下,这时候已经可以连接了。

让我们down掉131的mysql,在133上创建一个test4

service mysql stop
 

MySQL [(none)]> create database test4;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    6
Current database: *** NONE ***

Query OK, 1 row affected (0.02 sec)

虽然会报错说其中一台msyqldown了,但是仍然会创建成功,在132上看,的确创建成功了。

我们再创建一个test5

MySQL [(none)]> create database test5;
Query OK, 1 row affected (0.00 sec)
此时不再报错,说明NGINX已经切换到了132上,数据库可以正常使用了

实验完成,我们启动131的mysql,然后看数据是否自动同步

service mysql start
 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test1              |
| test2              |
| test4              |
| test5              |
+--------------------+
9 rows in set (0.00 sec)
 

实验成功,哦也!!

有些实验也有用nginx+keepalive的方案来实现负载均衡,但keepalive这个工具能实现的功能,mysql也可以做到,并且负载功能更加强大。

在生产环境中,有用VIP连接数据库的,这里可以看做是NGINX的IP。也有用域名连接数据库的,这里需要用NGINX的IP做个DNS解析。推荐的方式是用域名连接,这样不管底层的NGINX怎么切换,我们域名都不会变,只需要更改该底层的IP重做DNS即可。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值