LAMP简单构建Discuz论坛,实现数据库主从复制并读写分离

项目实例 / 2020-05-18

知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

描述:

httpd+php动态站点
proxy SQL实现mariadb主从数据库读写分离

服务器介绍:

1proxy SQL服务器:192.168.239.140
1web服务器:192.168.239.143
数据库服务器:192.168.239.149
数据库服务器:192.168.239.150

web服务器上操作如下:

在码云上将网站文件下载至指定位置,并修改文件目录属主属组

chown -R apache:apache upload/

安装相应程序包

yum install -y httpd php php-mysql

编辑httpd配置文件

vim /etc/httpd/conf/httpd.conf #修改以下配置项即可

找到DocumentRoot "/var/www/html/upload" #修改为指向你的网站文件目录

启动httpd服务

systemctl start httpd

proxy SQL服务器上操作如下:

添加proxysql官方yum

vim /etc/yum.repo.d/proxysql.repo

配置项如下:

[proxysql_repo]
name= ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/\$releasever
gpgcheck=1	gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key

安装proxysql

yum install -y proxysql

编辑配置文件

vim /etc/proxysql.cnf

配置如下参考

admin_variables=
{       
       admin_credentials="admin:admin"
#      mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
       mysql_ifaces="0.0.0.0:6033"
#      refresh_interval=2000
#      debug=true
}
    
mysql_variables=
{
       threads=4
       max_connections=2048
       default_query_delay=0
       default_query_timeout=36000000
       have_compress=true
       poll_timeout=2000
#      interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
       interfaces="0.0.0.0:3306"
       default_schema="information_schema"
       stacksize=1048576
       server_version="5.5.30"
       connect_timeout_server=3000
       monitor_username="monitor"
       monitor_password="monitor"
       monitor_history=600000
       monitor_connect_interval=60000
       monitor_ping_interval=10000
       monitor_read_only_interval=1500
       monitor_read_only_timeout=500
       ping_interval_server_msec=120000
       ping_timeout_server=500
       commands_stats=true
       sessions_sort=true
       connect_retries_on_failure=10
}
    
mysql_servers =
(
       { address="192.168.239.149" , port=3306 , hostgroup=0, max_connections=5 },
       { address="192.168.239.150" , port=3306 , hostgroup=1, max_connections=5 },
)
    
mysql_users:
(
       {
              username = "sanxi"
              password = "sanxi666"
              default_hostgroup = 0
              max_connections=1000
              default_schema="test"
              active = 1
       }
)
    
mysql_query_rules:
(       
      {       
              rule_id=1
              active=1
              match_pattern="^SELECT .* FOR UPDATE$"
              destination_hostgroup=0
              pply=1
       },
       {       
              rule_id=2
              active=1
              match_pattern="^SELECT"
              destination_hostgroup=1
              apply=1
       }
)
    
mysql_replication_hostgroups=
(
       {
              writer_hostgroup=0
              reader_hostgroup=1
              comment="test repl 1"
       }
)
    等待在数据库主节点授权账号后才能启动服务

数据库操作如下:

在主服务器操作

安装mariadb
yum install -y mariadb
编辑配置文件
vim /etc/my.cnf
如下参考:
server_id=1
log_bin=log-bin
skip_name_resolve=ON
启动服务
systemctl restart mariadb
连接至mariadb操作以下:
  • proxy SQL监控账号授权访问
MariaDB [(none)]> GRANT USAGE,REPLICATION CLIENT ON *.* TO 'monitor'@'192.168.239.%' IDENTIFIED BY 'monitor';
  • discuz和从节点账号授权
MariaDB [(none)]> GRANT ALL ON *.* TO 'sanxi'@'192.168.239.%' IDENTIFIED BY 'sanxi666';
  • 刷新权限以生效:
MariaDB [(none)]> FLUSH PRIVILEGES;
  • 查看主节点日志文件当前所处位置:一会在从节点上用到
MariaDB [(none)]> SHOW MASTER STATUS;
+----------------+----------+--------------+------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+----------+--------------+------------------+
| log-bin.000007 |  2941070 |              |                  |
+----------------+----------+--------------+------------------+
1 row in set (0.00 sec)

从服务器操作:

安装mariadb
yum install -y mariadb
编辑配置文件
vim /etc/my.cnf
如下参考:
server_id=2
relay_log=relay-log
skip_name_resolve=ON
read_only=ON
启动服务
systemctl restart mariadb

在从节点上配置主节点:

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.239.149',MASTER_USER='sanxi',MASTER_PASSWORD='sanxi666',MASTER_LOG_FILE='log-bin.000007',MASTER_LOG_POS=2941070;

启动复制:

mysql> START SLAVE

####在proxy SQL服务器上启动服务:

systemctl start proxysql

然后浏览器输入 web地址/install,根据提示一步一步操作即可

世间微尘里 独爱茶酒中