本架构设计结合了动静分离、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
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
创建测试页面 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=nginxmake && 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上检查是否成功接管主节点职责
继续执行访问测试,服务依然可用



雷达卡


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
京公网安备 11010802022788号







