楼主: djxonline
70 0

[基础问题] nginx动静分离+keepalived热备+oneproxy调度mysql读写分离 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-3-30
最后登录
2018-3-30

楼主
djxonline 发表于 2025-11-25 18:07:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

本架构设计结合了动静分离、Keepalived高可用热备机制以及OneProxy实现MySQL读写分离,整体系统具备较高的稳定性与负载能力。以下是各服务节点的IP规划及功能说明:

服务名称 IP地址
Nginx1 + Keepalived 192.168.1.10(VIP: 192.168.1.254)
Nginx2 + Keepalived 192.168.1.20(VIP: 192.168.1.254)
Apache1 192.168.1.30
Apache2 192.168.1.40
OneProxy 192.168.1.50
MySQL 主库 192.168.1.60
MySQL 从库1 192.168.1.70
MySQL 从库2 192.168.1.80
客户端 192.168.1.90

MySQL主从复制配置

主数据库(MySQL Master)设置

首先在主服务器上安装MariaDB数据库服务:

yum -y install mariadb mariadb-server

启动并重启服务以确保正常运行:

systemctl restart mariadb

设置数据库root用户密码:

mysqladmin -u root password 123.com

编辑配置文件/etc/my.cnf,添加以下内容以启用二进制日志和主从同步支持:

server-id=1
log-bin=master-log
log-slave-updates=true

完成修改后,重启数据库服务:

systemctl restart mariadb

登录MySQL并授权从节点复制权限及OneProxy访问权限:

mysql -u root -p123.com
grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123.com';
grant all on *.* to 'oneproxy'@'192.168.1.%' identified by '123.com';

查看当前主库状态,记录File和Position值,用于从节点连接:

show master status;

从数据库1(MySQL Slave1)配置

安装MariaDB服务:

yum -y install mariadb mariadb-server

重启服务:

systemctl restart mariadb

设置root密码:

mysqladmin -u root password 123.com

修改/etc/my.cnf配置文件,添加如下参数:

server-id=2
relay-log=relay-log-bin
relay-log-index=slave-relay-log.index

重启服务:

systemctl restart mariadb

登录数据库并授权OneProxy访问权限,同时配置主从连接信息:

mysql -u root -p123.com
grant all on *.* to 'oneproxy'@'192.168.1.%' identified by '123.com';
change master to master_host='192.168.1.60',master_user='slave',master_password='123.com',master_log_file='master-log.000001',master_log_pos=542;

启动从节点复制进程:

start slave;

检查主从同步状态是否正常:

show slave status\G;

从数据库2(MySQL Slave2)配置

同样执行安装命令:

yum -y install mariadb mariadb-server

重启服务:

systemctl restart mariadb

设置root密码:

mysqladmin -u root password 123.com

编辑/etc/my.cnf文件,配置唯一ID及中继日志相关参数:

server-id=3
relay-log=relay-log-bin
relay-log-index=slave-relay-log.index

重启数据库服务:

systemctl restart mariadb

登录MySQL控制台,赋予OneProxy权限,并建立与主库的复制关系:

mysql -u root -p123.com
grant all on *.* to 'oneproxy'@'192.168.1.%' identified by '123.com';
change master to master_host='192.168.1.60',master_user='slave',master_password='123.com',master_log_file='master-log.000001',master_log_pos=542;

开启复制线程:

start slave;

验证从库连接与同步状态:

show slave status\G;

数据同步测试

在主数据库上创建新的数据库和表,并插入测试数据,验证是否能成功同步至各个从节点。

MariaDB [(none)]> create database abc charset utf8;
MariaDB [(none)]> use abc;
MariaDB [abc]> create table biao1 (id int,name char(20));
MariaDB [abc]> insert into biao1 values (1,'a1');

随后可在各从库中查询该表内容,确认数据已自动同步,从而完成整个主从复制环境的部署与验证。

MariaDB [abc]> insert into biao1 values (2,'a2');

查看数据库中的数据:

配置 OneProxy 实现读写分离

首先进行软件包的复制操作:

接着解压安装包,并将其移动到指定目录:

tar -zxf oneproxy-rhel5-linux64-v6.0.0-ga.tar.gz -C /usr/src/
mv /usr/src/oneproxy/ /usr/local/
cd /usr/local/oneproxy/

为脚本添加可执行权限:

chmod a+x demo.sh

编辑 demo.sh 脚本文件,修改相关路径设置:

export ONEPROXY_HOME=/usr/local/oneproxy

随后修改服务启动脚本 oneproxy.service 中的路径配置:

ONEPROXY_HOME=/usr/local/oneproxy

生成用于认证的加密密码字符串:

/usr/local/oneproxy/bin/mysqlpwd 123.com

输出结果为:

7FB703DA3682A0CCC20168D44E8A7E92FE676A51

编辑主配置文件 proxy.conf,完成读写分离规则设定:

vim /usr/local/oneproxy/conf/proxy.conf

在配置文件中加入以下内容:

proxy-master-addresses.1 = 192.168.1.60:3306@server1
proxy-slave-addresses.2 = 192.168.1.70:3306@server1
proxy-slave-addresses.3 = 192.168.1.80:3306@server1
proxy-group-policy = server1:2
proxy-user-list= oneproxy/7FB703DA3682A0CCC20168D44E8A7E92FE676A51@abc

启动 OneProxy 服务:

/usr/local/oneproxy/oneproxy.service start &

进行连接测试以验证功能是否正常:

在任意 MySQL 客户端上执行如下命令,授予 OneProxy 执行 DDL 的权限:

mysql -u admin -pOneProxy -h 192.168.1.50 -P 4041 -e "set gaccess server1 0";

部署 Apache + PHP 环境(两台服务器)

Apache+PHP1 配置步骤:

安装 httpd 及 PHP 相关组件:

yum -y install httpd php*

修改主配置文件 httpd.conf,调整以下三项设置:

  • 关闭 KeepAlive 功能:
  • sed -i "1a keepalive off " /etc/httpd/conf/httpd.conf
  • 更改默认首页顺序,优先加载 index.php:
  • sed -i "s/index.html/index.php index.html/g" /etc/httpd/conf/httpd.conf
  • 增加 PHP 文件类型解析支持:
  • sed -i "286a AddType application/x-httpd-php .php" /etc/httpd/conf/httpd.conf

重启服务使配置生效:

systemctl restart httpd

创建测试页面 index.php:

vim /var/www/html/index.php

写入以下 PHP 代码:

<?php
$link=mysql_connect("192.168.1.50:3307","oneproxy","123.com");
if($link) echo "aaaaaaaaaaaaaaa"
?>

通过浏览器访问进行测试:

firefox 192.168.1.30 &

Apache+PHP2 配置步骤:

同样执行基础环境安装:

yum -y install httpd php*

进行相同的 httpd.conf 参数修改:

sed -i "1a keepalive off " /etc/httpd/conf/httpd.conf
sed -i "s/index.html/index.php index.html/g" /etc/httpd/conf/httpd.conf
sed -i "286a AddType application/x-httpd-php .php" /etc/httpd/conf/httpd.conf

重启服务:

systemctl restart httpd

配置其网页文件内容:

vim /var/www/html/index.php

输入如下代码:

<?php
$link=mysql_connect("192.168.1.50:3307","oneproxy","123.com");
if($link) echo "bbbbbbbbb"
?>

访问测试页面确认服务状态:

Nginx 实现动静分离与热备机制

Nginx1 节点配置:

首先安装 Nginx 所需依赖及高可用组件 Keepalived:

yum -y install pcre-devel zlib-devel keepalived

复制 Nginx 相关软件包至本地:

tar -zxf nginx-1.12.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.12.0/
useradd -M -s /sbin/nologin nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx


make && make install
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

vim /usr/local/nginx/conf/nginx.conf

在配置文件中新增以下内容:
upstream apache {
    server 192.168.1.30:80 weight=1;
    server 192.168.1.40:80 weight=1;
}


同时修改如下 location 块:
location ~ \.php$ {
    proxy_pass http://apache;
}


完成配置后启动 Nginx 服务:
nginx

接着编辑首页 HTML 文件以添加超链接:
vim /usr/local/nginx/html/index.html

插入如下代码:
<h1><a href="./index.php">PHP</a></h1>


接下来进行热备份配置:
vim /etc/keepalived/keepalived.conf

移除以下几行配置项:
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0

然后修改相关参数:
router_id LVS_DEVEL_r1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.254
    }
}


删除该配置文件中“下面所有”相关内容。

保存并重启 Keepalived 服务:
systemctl restart keepalived


---

Nginx 第二台服务器配置(Nginx2):

首先安装必要的依赖包及 Keepalived:
yum -y install pcre-devel zlib-devel keepalived

从第一台 Nginx 服务器复制 Nginx 源码包到当前主机:
scp root@192.168.1.10:/root/nginx-1.12.0.tar.gz /root/


解压并进入源码目录:
tar -zxf nginx-1.12.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.12.0/

创建运行用户:
useradd -M -s /sbin/nologin nginx

执行配置脚本:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx

编译并安装:
make && make install

建立命令软连接以便全局调用:
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

配置负载均衡 upstream:
vim /usr/local/nginx/conf/nginx.conf

添加后端 Apache 服务器组:
upstream apache {
    server 192.168.1.30:80 weight=1;
    server 192.168.1.40:80 weight=1;
}


调整 PHP 请求的转发规则:
location ~ \.php$ {
    proxy_pass http://apache;
}


启动服务:
nginx

为网页添加导航链接:
vim /usr/local/nginx/html/index.html

加入如下 HTML 内容:
<h1><a href="./index.php">PHP</a></h1>


配置 Keepalived 实现高可用热备:
vim /etc/keepalived/keepalived.conf

清除以下严格模式相关设置:
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0

更新路由器标识和实例配置:
router_id LVS_DEVEL_r2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.254
    }
}


删除配置文件中“下面所有”的多余内容。

最后重启服务使配置生效:
systemctl restart keepalived

客户端进行访问测试

模拟主Nginx发生故障,将nginx1的网卡断开

在Nginx2上检查是否成功接管主节点职责

继续执行访问测试,服务依然可用

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MySQL proxy Lived ePRO live

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 18:49