Nginx + MySql5.7 主从 主主 高可用集群环境搭建

一、准备

主机作用系统版本MySQL版本
192.168.9.106主 /从CentOS7.6MySQL5.7.35
192.168.9.107从/主CentOS7.6MySQL5.7.35

两台机器安装好 MySQL5.7.35,参考文章如下:

https://blog.csdn.net/CsethCRM/article/details/119418841

二 在 192.168.9.106 (主)上配置

1. 在192.168.9.106(主) 上配置 my.cnf

vim /etc/my.cnf
[mysqld] 下边 添加 如下配置:

#开启二进制日志
log-bin=mysql-bin
#任意自然数n,只要保证两台MySQL主机不重复就可以了。
server-id=663

2. 登录 9.106 的MySQL

mysql -u root -p
输入自己的密码

3. 创建 repl 用户,指定该用户只能在主库 192.168.9.106 上使用 Repl123!@# 密码登录

mysql> create user 'repl'@'192.168.9.106' identified by 'Repl123!@#';

4. 为 repl 用户赋予 REPLICATION SLAVE 权限。

mysql> grant replication slave on *.* to 'repl'@'192.168.9.106';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'repl'@'%' IDENTIFIED BY 'Repl123!@#' WITH GRANT OPTION;

5. 查看用户

mysql> select user,host from mysql.user;

6.查看 master 状态

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

注意:如果遇到 empty set 1.请检查一下配置是否按照示例中106的配置进行配置 2.重启一下MySQL再看看

三、 在 192.168.9.107 (从)上配置

1. 在192.168.9.107(从) 上配置my.cnf

vim /etc/my.cnf
[mysqld] 下边 添加 如下配置:
#开启二进制日志
log-bin=mysql-bin
#任意自然数n,只要保证两台MySQL主机不重复就可以了。
server-id=662

2. 配置连接主服务器的信息

mysql -u root -p
输入自己的密码
mysql> change master to master_host='192.168.9.106', master_user='repl',MASTER_PORT =3306,master_password='Repl123!@#',master_log_file='mysql-bin.000002',master_log_pos=154;

注意:
master_log_file 一定要对应 106(主)机器 show master status 中的 File 字段;  master_log_pos 一定要对应 106(主)机器 show master status 中的 Position 154
mysql> start slave;

3. 查看状态

mysql> show slave status \G

主要看以下消息有两个YES即可 :

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

恭喜您,截止目前,MySQL 主(9.106)从(9.107)已经 配置完成。

在9.106 上的一切操作会近实时 同步到9.107的DB中。

四、MYSQL 主主配置

(把192.168.9.107也配置成作为主,192.168.9.106配置成为从);192.168.9.106 和 192.168.9.107 互为主从;组成 主主

1. 查看状态 - (192.168.9.107上操作):

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      964 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2. 创建 repl 用户,指定该用户只能在主库 192.168.9.106 上使用 Repl123!@# 密码登录 - (192.168.9.107上操作)

mysql> create user 'repl107'@'192.168.9.107' identified by 'Repl123!@#';

3.为 repl 用户赋予 REPLICATION SLAVE 权限 - (192.168.9.107上操作)

mysql> grant replication slave on *.* to 'repl107'@'192.168.9.107';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'repl107'@'%' IDENTIFIED BY 'Repl123!@#' WITH GRANT OPTION;

4.刷新权限 - (192.168.9.107上操作)

Flush privileges;

5.把9.106 设置为9.107的从 - (192.168.9.106上操作)

mysql> change master to master_host='192.168.9.107', master_user='repl107',MASTER_PORT =3306,master_password='Repl123!@#',master_log_file='mysql-bin.000001',master_log_pos=964;
mysql> start slave;
mysql> show slave status \G
主要看以下消息有两个YES即可 :

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

截止目前 192.168.9.106 和 192.168.9.107 主主 集群已经成功搭建,两台机器无论在那一台上的增删改查 都会 近实时同步到另一台;

但是还不能做到高可用,如果要做到高可用,继续往下看;

五、利用 Nginx 配置 高可用 主主 负载均衡

1.机器准备

主机作用系统版本Nginx版本
192.168.9.104NginxUbuntu16.04nginx version: nginx/1.10.3 (Ubuntu)
注意:9.104上不需要安装 MySQL

2.Nginx 配置 /etc/nginx/nginx.conf

在最后一行添加如下代码即可:

stream {
    upstream mysql_proxy{
       hash $remote_addr consistent;
       server 192.168.9.106:3306 weight=1 max_fails=3 fail_timeout=10s;
       server 192.168.9.107:3306 weight=1 max_fails=3 fail_timeout=10s;
    }
    server {
       listen 3306; # 数据库服务器监听端口
       proxy_connect_timeout 10s;
       proxy_timeout 300s; 
       proxy_pass mysql_proxy;
    }
}

3. 截止目前,Nginx + MySQL 主主 的高可用集群搭建完毕。

在这里插入图片描述

附录:

192.168.9.106 my.cnf 配置如图:

[mysqld]
log-bin=mysql-bin
server-id=663

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

192.168.9.107 my.cnf 配置如图:

[mysqld]
log-bin=mysql-bin
server-id=662

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

192.168.9.104 Nginx - nginx.cnf 配置如图:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;


	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;
	gzip_disable "msie6";


	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

stream {
    upstream mysql_proxy{
       hash $remote_addr consistent;
       server 192.168.9.106:3306 weight=1 max_fails=3 fail_timeout=10s;
       server 192.168.9.107:3306 weight=1 max_fails=3 fail_timeout=10s;
    }
    server {
       listen 3306; # 数据库服务器监听端口
       proxy_connect_timeout 10s;
       proxy_timeout 300s; 
       proxy_pass mysql_proxy;
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安得权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值