lnmp应用分离+keepalived+mysql互为主备

简介:

nginx+php:192.168.198.135,192.168.198.131
keepalived-master:192.168.198.228
keepalived-slave:192.168.198.229
mysql+keepalived:192.168.198.134,192.168.198.141

discuz:http://ahdx.down.chinaz.com/201710/Discuz_X3.4_SC_UTF8_1001.zip

1、安装nginx
①源码
②yum安装(我使用了这个)
yum install -y nginx

lnmp应用分离+keepalived+mysql互为主备

2、安装mariadb
①源码
②yum安装(我使用了这个)
yum install -y epel-release
yum install -y mariadb-server mariadb
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y

(1)mariadb主从配置(my.cnf)
主:
[mysqld]
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
wait_timeout = 300
#skip_name_resolve = 1
#explicit_defaults_for_timestamp=true
#symbolic-links =0
max_allowed_packet = 100M
thread_stack = 192K
thread_cache_size = 8
max_connections = 1000
max_connect_errors = 1500
transaction_isolation = READ-COMMITTED
#explicit_defaults_for_timestamp = 1
join_buffer_size = 134217728
tmp_table_size = 67108864
tmpdir = /tmp
#innodb_log_buffer_size = 32M
#innodb_log_file_size = 48M
#innodb_page_size = 8192
#innodb_buffer_pool_size = 12G
#innodb_buffer_pool_instances = 8
#innodb_buffer_pool_load_at_startup = 1
#innodb_buffer_pool_dump_at_shutdown = 1
#innodb_lru_scan_depth = 2000
#innodb_lock_wait_timeout = 5
#innodb_io_capacity = 4000
#innodb_io_capacity_max = 8000
#innodb_flush_method = O_DIRECT
#innodb_file_format = Barracuda
#innodb_file_format_max = Barracuda
query_cache_limit = 32M
query_cache_size = 32M
expire_logs_days = 10
max_binlog_size = 100M
#for replication
log-bin=mysql-bin
log-bin=test-bin
binlog-do-db=test
binlog-do-db=discuz
binlog-do-db=db
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#binlog-ignore-db=oc
[client]
#socket=/app/mysql/lib/mysql.sock
socket=/var/lib/mysql/mysql.sock

Disabling symbolic-links is recommended to prevent assorted security risks

#symbolic-links=0

Settings user and group are ignored when systemd is used.

If you need to run mysqld under a different user or group,

customize your systemd unit file for mariadb according to the

instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#

include all files from the config directory

#
!includedir /etc/my.cnf.d

从:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character_set_server=utf8
#default-storage-engine=innodb
init_connect='SET NAMES utf8'
log-bin=test-bin
port=3306
#import csv file
secure_file_priv=""
max_connections = 1000
max_connect_errors = 1000
join_buffer_size = 11382893
tmp_table_size = 6710886
tmpdir = /tmp

Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

Settings user and group are ignored when systemd is used.

If you need to run mysqld under a different user or group,

customize your systemd unit file for mariadb according to the

instructions in http://fedoraproject.org/wiki/Systemd

inno settings

#innodb_buffer_pool_size = 5G
#innodb_log_buffer_size = 32M
#innodb_log_file_size = 512M
#innodb_lru_scan_depth = 2000
#innodb_lock_wait_timeout = 5
#innodb_io_capacity = 4000
#innodb_io_capacity_max = 8000
#innodb_flush_method = O_DIRECT
#innodb_file_format = Barracuda
#innodb_file_format_max = Barracuda
#innodb_flush_neighbors = 1
#innodb_log_file_size = 2G
#innodb_log_buffer_size = 10777216
#innodb_purge_threads = 4
#innodb_large_prefix = 1
#innodb_thread_concurrency = 64
#innodb_print_all_deadlocks = 1
#innodb_strict_mode = 1
#innodb_sort_buffer_size = 67108864
#####Logs Settings#####
#innodb_log_buffer_size = 10777216
#innodb_purge_threads = 4
#innodb_large_prefix = 1
#innodb_thread_concurrency = 64
#innodb_print_all_deadlocks = 1
#innodb_strict_mode = 1
#innodb_sort_buffer_size = 67108864
#####Logs Settings#####
query_cache_limit = 32M
query_cache_size = 32M
expire_logs_days = 10
max_binlog_size = 100M
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=134
replicate-do-db=db
replicate-do-db=test
replicate-do-db=discuz
replicate_wild_do_table=test.t2
replicate_wild_do_table=test.t4
###replicate-do-db=erp
#replicate-do-db=payment
#replicate-do-db=crm
#replicate-do-db=marketing
#replicate-do-db=ocrp
#replicate-do-db=oc
slave-skip-errors=1032,1062,1050,1051,1677
log-slave-updates=true
relay-log=test-relay-bin
#relay-log-index=relay-bin-index

#skip-slave-start
#slave-parallel-type=LOGICAL_CLOCK
#slave-parallel-workers=16
#slave_pending_jobs_size_max=120M
#relay_log_info_repository=table
#master_info_repository=table

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#

include all files from the config directory

#
!includedir /etc/my.cnf.d

(2)mariadb主从数据库的配置
主:
①创建用户
[root@zimbra ~]# mysql -u root -p123456 -e "create user repl;"
②授权远程访问(这一步不做好的话,通过vip访问会导致discuz会出现1045的报错)
[root@zimbra ~]# mysql -u root -p123456 -e "grant all privileges on . to 'root'@'192.168.198.134' identified by '123456' with grant option;"

MariaDB [mysql]> grant all privileges on . to 'root'@'192.168.198.141' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> grant all privileges on . to 'root'@'192.168.198.135' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> grant all privileges on . to 'root'@'192.168.198.131' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> grant all privileges on . to 'root'@'192.168.198.23' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#####授权从库同步的账号
[root@zimbra ~]# mysql -u root -p123456 -e "grant all privileges on . to 'repl'@'192.168.198.134' identified by '123456' with grant option;"

lnmp应用分离+keepalived+mysql互为主备
lnmp应用分离+keepalived+mysql互为主备

从:
[root@slave ~]# mysql -uroot -e "stop slave\G"
[root@slave ~]# mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> change master to master_host='192.168.198.141',master_user='repl',master_password='123456',master_log_file='test-bin.000002',master_log_pos=3503;
###根据主pos来做从的数据库配置
lnmp应用分离+keepalived+mysql互为主备

3、安装php
wget http://cn2.php.net/distributions/php-5.6.0.tar.xz 再解压
cd /usr/local/src/php-5.6.0
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-opcache --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --enable-zip --with-bz2 --with-readline --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/png --with-zlib --with-freetype-dir=/usr/local/freetype --with-gd
lnmp应用分离+keepalived+mysql互为主备
配置 PHP
配置文件:

cp php.ini-development /usr/local/php/etc/php.ini
php-fpm 服务

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

php-fpm 可用参数 start|stop|force-quit|restart|reload|status

添加 PHP 命令到环境变量
编辑 ~/.bash_profile,添加:

###java env
export JAVA_HOME=/usr/local/src/jdk1.6.0_45
#export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVE_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib

###php env
export PHP_HOME=/usr/local/php56
#export JRE_HOME=$JAVA_HOME/jre
export PATH=$PHP_HOME/bin:$PHP_HOME/bin:$PATH
export CLASSPATH=.:$PHP_HOME/lib:$PHP_HOME/lib

~/.bash_profile

查看看 PHP 版本
php -v
PHP 5.6.0 (cli) (built: Sep 23 2014 03:44:18) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

4、keepalived配置
mysql-keepalived
lnmp应用分离+keepalived+mysql互为主备
因为mysql用不到那个lvs的东西,就注释了。

nginx-keepalived(主和从的区别在于state和priority)
lnmp应用分离+keepalived+mysql互为主备
lnmp应用分离+keepalived+mysql互为主备

在mariadb的show master status看到不会因为主的nginx机器挂掉而导致数据库连接丢失,因为有vip的
lnmp应用分离+keepalived+mysql互为主备
lnmp应用分离+keepalived+mysql互为主备
lnmp应用分离+keepalived+mysql互为主备
lnmp应用分离+keepalived+mysql互为主备

5、安装phpMyAdmin
wget https://files.phpmyadmin.net/phpMyAdmin/4.7.7/phpMyAdmin-4.7.7-all-languages.zip
把压缩包放进去网址根目录,然后解压,把解压出来的文件夹重命名为phpmyadmin,然后再进去这个目录,把config.sample.inc.php复制为config.inc.php,有行$cfg['Servers'][$i]['host'] = 'localhost'; 把localhost改为你的数据库IP
lnmp应用分离+keepalived+mysql互为主备
更改完毕就重启mariadb和nginx,再通过浏览器访问http://ip/phpmyadmin即可
lnmp应用分离+keepalived+mysql互为主备

关于报错
如果打开php页面404的话,很可能是nginx的配置文件导致的。
lnmp应用分离+keepalived+mysql互为主备
红色圈住的那里要改成网站根目录才行
lnmp应用分离+keepalived+mysql互为主备
mysql 1236报错
lnmp应用分离+keepalived+mysql互为主备
解决:stop slave;reset slave;start slave;
mysql 1050报错
lnmp应用分离+keepalived+mysql互为主备
在my.cnf报错添加slave-skip-errors=1032,1062,1050,1677这段配置后重启mariadb即可

重启机器时候或者keepalived服务没起来,通过这个http://blog.51cto.com/wsw26/2067195 脚本就能踢起来vip了






     本文转自wsw26 51CTO博客,原文链接:http://blog.51cto.com/wsw26/2057357,如需转载请自行联系原作者





相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
887 141
|
11月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
12月前
|
存储 关系型数据库 MySQL
MYSQL数据加密压缩函数应用实战指南。
总的来说,加密和压缩是维护MySQL数据库中数据安全性和效率的有效手段。使用时需权衡性能与安全,合理应用加密和压缩函数。在设计数据库架构时要考虑到加密字段的查询性能,因为加密可能使得一些索引失效。压缩数据能有效减少存储空间的占用,但在服务器负载较高时应避免实时压缩和解压,以免影响总体性能。
355 10
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
741 0
|
存储 关系型数据库 MySQL
介绍一下MySQL的一些应用场景
【10月更文挑战第17天】介绍一下MySQL的一些应用场景
3382 0
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
528 2
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
1227 5
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
779 1
|
数据采集 关系型数据库 MySQL
MySQL表约束的种类与应用
在设计数据库时,合理应用各种约束对于创建一个结构化良好且能够有效维护数据完整性的数据库至关重要。每种约束类型都有其特定的应用场景,理解并正确应用这些约束,可以大大提高数据库应用的稳定性和性能。
446 4
|
关系型数据库 MySQL 数据处理
企业级应用 mysql 日期函数变量,干货已整理
本文详细介绍了如何在MySQL8.0中使用DATE_FORMAT函数进行日期格式的转换,包括当日、昨日及不同时间段的数据获取,并提供了实际的ETL应用场景和注意事项,有助于提升数据处理的灵活性和一致性。
252 0

推荐镜像

更多