该实验目的是为了:
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即可。