网站首页linux
两台服务器做Mysql数据库的读写分离及Nginx负载均衡
发布时间:2022-03-19 07:51:30编辑:slayer.hover阅读(372)
一. 部署两台Linux服务器, 安装环境Ubuntu18.4, Redis6.2, Mysql5.7, PHP8.0
主库服务器: 192.168.1.100
从库服务器: 192.168.1.101
二.配置mysql主从
主库配置:
1>主库修改mysql配置,打开主库配置文件my.cnf, 插入
[mysqld] log-bin=mysql-bin #开启二进制日志 server-id=1 #设置server-id binlog-do-db = blog #只同步blog库 binlog-ignore-db = test #不同步test库 binlog-ignore-db = mysql #不同步mysql库
重启mysql.
2>主库创建用于同步的用户账号, (进入主库mysql命令行)
mysql> CREATE USER 'blog'@'192.168.1.101' IDENTIFIED BY '123456';#创建用户 mysql> GRANT REPLICATION SLAVE ON *.* TO 'blog'@'192.168.1.101';#分配权限 mysql> flush privileges; #刷新权限
3>主库查看master状态,记录二进制文件名File字段值(mysql-bin.000003)和位置Position字段值(73):
mysql > SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000006 | 1034 | blog | test,mysql | +------------------+----------+--------------+------------------+
---------------------------------------------------------
从库配置:
1>从库修改mysql配置, 打开从库配置文件my.cnf, 插入
[mysqld] server-id=2 #设置server-id,必须唯一
2>从库执行同步SQL语句, (进入从库mysql命令行)
mysql>change master to master_host='192.168.1.100', master_user='blog', master_password='123456', master_log_file='mysql-bin.000006', master_log_pos=1034;
3>从库启动slave同步进程
mysql>start slave;
4>从库查看slave状态
mysql>show slave status;
若无报错, 此时mysql主从已准备就绪, 在主库里更新blog库里的任意数据, 从库都可以实时看到更新.
若报错: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
即主从架构中使用了相同的UUID.
解决方法:
更新mysql的auto.cnf文件, MySQL启动时,会自动从mysql_data_dir/auto.cnf 文件中获取server-uuid值,
并将这个值存储在全局变量server_uuid中。
如果这个值或者这个文件不存在,那么将会生成一个新的uuid值,并将这个值保存在auto.cnf文件中.
mv /mysql_data_dir/auto.cnf /mysql_data_dir/auto.cnf.bk service mysql restart cat /mysql_data_dir/auto.cnf #此时已经有了一个新的server-uuid值
三. 配置网站数据库读写分离, 修改laravel的database配置
'mysql' => [ /*读写分离*/ 'read' => [ 'host' => [ '192.168.1.100', '192.168.1.101', ], ], 'write' => [ 'host' => ['192.168.1.100'], ], ... ]
四.配置nginx负载均衡
1>在两台服务器上Nginx均配置同样的网站内容.
192.168.1.100上
server { listen 8080; server_name 192.168.1.100; root /data/wwwroot; ... }
192.168.1.101上
server { listen 8080; server_name 192.168.1.101; root /data/wwwroot; ... }
2>在主库上的nginx配置中添加
upstream mysvr { server 192.168.1.100:8080 weight=1 max_fails=3 fail_timeout=3; server 192.168.1.101:8080 weight=1 max_fails=3 fail_timeout=3; } server { listen 80; location ~*^.+$ { proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表 } }
五. 配置两台服务器的session共享
1> 在192.168.1.101上安装redis, 配置两台服务器均可访问
2> 给两台服务器安装redis扩展, 并将php session指向到上面安装好的redis上.
3> 重启phpfpm, 完成.
评论