LAMP架构

一,php 部署

[root@nodea ~]# tar jxf php-7.4.12.tar.bz2

[root@nodea ~]# cd php-7.4.12/

[root@nodea php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd

[root@nodea php-7.4.12]# yum install -y systemd-devel.x86_64

[root@nodea php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd

[root@nodea php-7.4.12]# yum install libxml2-devel -y

[root@nodea php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd

[root@nodea php-7.4.12]# yum install sqlite-devel.x86_64 -y

[root@nodea php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd

[root@nodea php-7.4.12]# yum install libcurl-devel.x86_64 -y

[root@nodea php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd

[root@nodea php-7.4.12]# yum install libpng-devel.x86_64 -y

[root@nodea php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd

[root@nodea ~]# yum install -y oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm

[root@nodea php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd  编译成功

LAMP架构_第1张图片

 

[root@nodea php-7.4.12]# make

[root@nodea php-7.4.12]# make install

二, nginx + php-fpm

【1】复制启动脚本文件

[root@nodea php-7.4.12]# cd /usr/lib/systemd/system

[root@nodea system]# mv /root/nginx.service .

[root@nodea system]# systemctl daemon-reload刷新设定

[root@nodea system]# systemctl enable --now nginx

[root@nodea php-7.4.12]# cd /usr/local/php/

[root@nodea php]# cd etc

[root@nodea etc]# vim php-fpm.conf

LAMP架构_第2张图片

[root@nodea etc]# cd php-fpm.d/

[root@nodea php-fpm.d]# cp www.conf.default www.conf

[root@nodea php-7.4.12]# cp php.ini-production  /usr/local/php/etc/php.ini

[root@nodea php-7.4.12]# cd sapi/

[root@nodea sapi]# cd fpm/

[root@nodea fpm]# cp php-fpm.service /usr/lib/systemd/system

【2】编辑启动脚本文件,重载服务配置文件——>配置完成

[root@nodea fpm]# vim /usr/lib/systemd/system/php-fpm.service

LAMP架构_第3张图片

[root@nodea fpm]# systemctl daemon-reload

[root@nodea fpm]# systemctl start php-fpm.service

[root@nodea fpm]# systemctl enable php-fpm.service

【3】配置php测试页面

[root@nodea fpm]# cd /usr/local/nginx/html/

[root@nodea html]# vim index.php

【4】nginx配置文件修改

[root@nodea conf]# vim nginx.conf

LAMP架构_第4张图片 【5】重启nginx后测试 

[root@nodea conf]# nginx -s reload

LAMP架构_第5张图片 【6】配置php命令

[root@nodea ~]# vim .bash_profile

 

[root@nodea ~]# source .bash_profile 

 

 三, mysql 的部署

1).解压

[root@nodea ~]# tar zxf mysql-boost-5.7.36.tar.gz

[root@nodea ~]# cd mysql-5.7.36/

2).编译

[root@nodea mysql-5.7.36]# yum install -y cmake

[root@nodea mysql-5.7.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.36/boost/boost_1_59_0

[root@nodea mysql-5.7.36]# yum install -y gcc-c++.x86_64

[root@nodea mysql-5.7.36]# yum install -y bison

[root@nodea mysql-5.7.36]# rm -rf CMakeCache.txt   删除编译的缓存文件

[root@nodea mysql-5.7.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.36/boost/boost_1_59_0           

[root@nodea mysql-5.7.36]# make

LAMP架构_第6张图片

[root@nodea mysql-5.7.36]# make install

然后执行 make install 向向/usr/local/mysql中连续写入数据即可编译完成,当编译完成之后便会生成/usr/local/mysql这个目录。

cmake在编译的过程中有颜色,有进度。

3).生成启动脚本和环境变量设定

[root@nodea mysql-5.7.36]# cd support-files/

[root@nodea support-files]# cp mysql.server /etc/init.d/mysqld

[root@nodea support-files]# chmod +x /etc/init.d/mysqld

[root@nodea support-files]#  useradd -M -d /data/mysql mysql   

[root@nodea support-files]# mkdir -p /data/mysql

[root@nodea support-files]# cd /usr/local/mysql/

[root@nodea mysql]# chown mysql.mysql /data/mysql/

[root@nodea ~]# vim .bash_profile

 

[root@nodea ~]# source .bash_profile                                                  

[root@nodea my.cnf.d]# cd /etc

[root@nodea etc]# vim my.cnf

LAMP架构_第7张图片

4).mysql初始化

[root@nodea etc]# mysqld --initialize --user=mysql  安全初始化

LAMP架构_第8张图片

[root@nodea etc]# /etc/init.d/mysqld start启动数据库

[root@nodea mysql]# mysql_secure_installation 密码初始化

 LAMP架构_第9张图片

LAMP架构_第10张图片 

注:改密码,不要检查密码的强壮度,否则校验过不去。

在修改密码之后,用更改的密码成功登陆数据库,至此数据库编译结束。

[root@nodea mysql]# mysql -p

四,php添加memcache功能模块 

 【1】memcache的安装:

3.php添加memcache功能模块

[root@nodea ~]# tar zxf memcache-4.0.5.2.tgz

[root@nodea ~]# cd memcache-4.0.5.2/

[root@nodea memcache-4.0.5.2]# phpize

在执行 phpize 命令的时候,提示缺少 autocon ,下载缺失的包再去执行命令;

[root@nodea memcache-4.0.5.2]# yum install -y autoconf

当执行完 phpize 命令的时候,就会生成 configure 命令

[root@nodea memcache-4.0.5.2]# ./configure --enable-memcache

[root@nodea memcache-4.0.5.2]#  make && make install

 【2】配置Php加载memcache模块

[root@nodea no-debug-non-zts-20190902]# cd /usr/local/php/etc/

[root@nodea etc]# vim php.ini加入一行, php 支持动态扩展;加入之后会自动识别其内容。

LAMP架构_第11张图片

[root@nodea etc]# systemctl  reload php-fpm

[root@nodea etc]# php -m | grep memcache

安装memcached服务并启用 :

[root@nodea etc]# yum install -y memcached

[root@nodea etc]# systemctl start memcached

php 的工作原理:php ->memcache.so ->memcached,动态数据都是依据相应的模块来完成的;
此处需要安装 memcached 的后台服务,端口是11211;

配置php和memcache在nginx中的发布文件

[root@nodea etc]# cd

[root@nodea ~]# cd memcache-4.0.5.2/

[root@nodea memcache-4.0.5.2]# cp example.php memcache.php /usr/local/nginx/html/

[root@nodea memcache-4.0.5.2]# cd /usr/local/nginx/html/

[root@nodea html]# vim memcache.php

 测试:

LAMP架构_第12张图片

 

五,nginx 的高速缓存 

1).解压

[root@nodea ~]# systemctl stop nginx

[root@nodea ~]# tar zxf openresty-1.19.9.1.tar.gz

[root@nodea ~]# cd openresty-1.19.9.1/

2).编译

[root@nodea openresty-1.19.9.1]# ./configure --prefix=/usr/local/openresty --with-http_ssl_module --with-http_stub_status_module

[root@nodea openresty-1.19.9.1]# make

[root@nodea openresty-1.19.9.1]# make install

[root@nodea openresty-1.19.9.1]# cd /usr/local/openresty/

3).修改配置文件

[root@nodea openresty]# cd nginx/

[root@nodea nginx]# cd conf

[root@nodea conf]# vim nginx.conf

LAMP架构_第13张图片 

4).开启

[root@nodea nginx]# cd sbin

[root@nodea sbin]# /usr/local/openresty/nginx/sbin/nginx -t 检测语法

[root@nodea sbin]# /usr/local/openresty/nginx/sbin/nginx 运行

[root@nodea sbin]# curl localhost

LAMP架构_第14张图片

5).构建高效缓存

[root@nodea nginx]# cd html

[root@nodea html]# pwd

/usr/local/openresty/nginx/html

[root@nodea html]# cp /usr/local/nginx/html/index.php .

[root@nodea html]# cp /usr/local/nginx/html/example.php .

LAMP架构_第15张图片

 做压测:

 

 切换为高效模式:

[root@nodea html]# cd ..

[root@nodea nginx]# cd conf

[root@nodea conf]# pwd

/usr/local/openresty/nginx/conf

[root@nodea conf]# vim nginx.conf

LAMP架构_第16张图片

LAMP架构_第17张图片 

[root@nodea conf]# /usr/local/openresty/nginx/sbin/nginx -s reload

换成高效缓存模式后,再次进行压力测试;
模拟10个并发,处理10000个请求,没有错误

LAMP架构_第18张图片

LAMP架构_第19张图片 速率很快且无失败请求 

六,tomcat 结合 memcache 

tomcat的安装:

安装前需要搭建tomcat可以运行的java环境(安装java开发工具包JDK)

[root@nodea ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/

[root@nodea ~]# cd /usr/local/

[root@nodea local]# ln -s apache-tomcat-7.0.37/ tomcat

[root@nodea local]# cd tomcat/

[root@nodea tomcat]# cd bin

[root@nodea bin]# yum install java-1.8.0-openjdk.x86_64

[root@nodea bin]# ./startup.sh运行

LAMP架构_第20张图片

 开启之后,会开启一个8080端口:

作为一个应用软件,用户不可能用8080来访问,用户默认访问的是80。

前端访问流程: client -> nginx:80 -> *.jsp -> tomcat:8080,由于使用的是 java,相对还是比较耗内存的,所以需要多来几个做负载均衡。nginx 可以承受高并发,而 tomcat 不行。

[root@nodea bin]# /usr/local/openresty/nginx/sbin/nginx -s stop

[root@nodea bin]# systemctl start nginx

[root@nodea bin]# cd /usr/local/nginx/conf/

[root@nodea conf]# vim nginx.conf

LAMP架构_第21张图片

LAMP架构_第22张图片

[root@nodea conf]# nginx -s reload

[root@nodea conf]# cd /usr/local/tomcat/

[root@nodea tomcat]# cd webapps/

[root@nodea webapps]# cd ROOT/

[root@nodea ROOT]# mv /root/test.jsp .

[root@nodea ROOT]# scp test.jsp nodeb:/usr/local/tomcat/webapps/ROOT/

 

nodeb上也安装上述同样的过程

[root@nodeb ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/

[root@nodeb ~]# cd /usr/local/

[root@nodeb local]# ln -s apache-tomcat-7.0.37/ tomcat

[root@nodeb local]# yum install java-1.8.0-openjdk.x86_64

[root@nodeb local]# cd tomcat/

[root@nodeb tomcat]# cd bin/

[root@nodeb bin]# ./startup.sh

测试:

宕停掉nodea

[root@nodea ~]# cd /usr/local/nginx/conf/

[root@nodea conf]# /usr/local/tomcat/bin/shutdown.sh

LAMP架构_第23张图片

自动跳转到nodeb

 

由于session 不共享;当我们只开启一个tomcat时,产生的数据会保存到本地,但是当开启两个tomcat时,由于在负载均衡状态,受到nginx的调度,node2端提交数据后直接跳到了node3,与之前的建立的session断开了,再次回来数据就不存在了。为了解决这个问题,我们需要重新编译,添加sticky模块。sticky粘值能让同一个服务器的请求放到同一个后端上。

[root@nodeb bin]# yum install -y memcached

[root@nodeb bin]# systemctl start memcached

[root@nodeb bin]# /usr/local/tomcat/bin/shutdown.sh

[root@nodeb bin]# cd /usr/local/tomcat/lib/

[root@nodeb jar]# mv asm-3.2.jar /usr/local/tomcat/lib/

   mv minlog-1.2.jar /usr/local/tomcat/lib/

  mv kryo-1.04.jar /usr/local/tomcat/lib/

   mv msm-kryo-serializer-1.6.3.jar /usr/local/tomcat/lib/

   mv kryo-serializers-0.10.jar /usr/local/tomcat/lib/

    mv reflectasm-1.01.jar /usr/local/tomcat/lib/

    mv memcached-session-manager-1.6.3.jar /usr/local/tomcat/lib/

    mv spymemcached-2.7.3.jar /usr/local/tomcat/lib/

    mv memcached-session-manager-tc7-1.6.3.jar /usr/local/tomcat/lib/

[root@nodeb lib]# unzip ja

[root@nodeb lib]# cd ..

[root@nodeb tomcat]# cd conf/

[root@nodeb conf]# vim context.xml

 [root@nodeb logs]# /usr/local/tomcat/bin/startup.sh

[root@nodea conf]# cd ..

[root@nodea nginx]# cd ..

[root@nodea local]# cd tomcat/

[root@nodea tomcat]# cd lib/

[root@nodeb jar]# mv minlog-1.2.jar /usr/local/tomcat/lib/

  mv kryo-1.04.jar /usr/local/tomcat/lib/

   mv msm-kryo-serializer-1.6.3.jar /usr/local/tomcat/lib/

   mv kryo-serializers-0.10.jar /usr/local/tomcat/lib/

    mv reflectasm-1.01.jar /usr/local/tomcat/lib/

    mv memcached-session-manager-1.6.3.jar /usr/local/tomcat/lib/

    mv spymemcached-2.7.3.jar /usr/local/tomcat/lib/

    mv memcached-session-manager-tc7-1.6.3.jar /usr/local/tomcat/lib/

[root@nodea lib]# unzip jar.zip

[root@nodea lib]# cd ..

[root@nodea tomcat]# cd conf/

[root@nodea conf]# vim context.xm

LAMP架构_第24张图片

[root@nodea logs]# /usr/local/tomcat/bin/startup.sh

[root@nodea logs]# yum install telnet

测试:

此时沾滞在192.168.0.8上,可看到保存的session;

 LAMP架构_第25张图片

模拟故障,此时我们停掉nodeb tomcat(bin/shutdown.sh) ;

LAMP架构_第26张图片 

发现 tomcat 换成了192.168.0.7,但是 session 被保留下来了

[root@nodea logs]# yum install telnet 可以下载工具,进到应用查看 session 信息;

如果一台主机的 tomcat 和 memcache 都挂掉,或者宕机了,session就没了。

此时是nodea接管了,如果此时nodeb 的 tomcat 开启了之后,nodeb的 tomcat 挂掉了,那么数据是不会被保存的;因为其并不是时时共享的存储;只是 tomcat 向里面存数据。

但是,如果 nodeb 只是停掉了 memcached,那么不会有事,数据会自动通过 tomcat 迁移到 nodea 上,此时在网页输入数据,会存在 memcached2 里面。

 七,nginx + php-fpm + mysql

[root@nodea ~]# unzip phpMyAdmin-5.0.2-all-languages.zip

[root@nodea ~]# mv phpMyAdmin-5.0.2-all-languages/ /usr/local/nginx/html/myadmin

浏览时出现错误

LAMP架构_第27张图片

[root@nodea ~]# cd /usr/local/nginx/conf

[root@nodea conf]# vim nginx.conf

LAMP架构_第28张图片

[root@nodea conf]# nginx -s reload 重启后问题修复 

LAMP架构_第29张图片

解决

[root@nodea nginx]# cd /usr/local/php/

[root@nodea php]# cd etc

LAMP架构_第30张图片

[root@nodea etc]# systemctl reload php-fpm 重启后解决

如果出现下面问题是权限不足

LAMP架构_第31张图片 解决:[root@nodea data]# chmod 755 mysql/

八,Mysql 的主从复制

 

[root@nodea ~]# cd /usr/local/

[root@nodea local]# scp -r mysql/ nodeb:/usr/local

[root@nodea local]# cd /etc/init.d/

[root@nodea init.d]# scp mysqld nodeb:/etc/init.d/

[root@nodea init.d]# scp /etc/my.cnf nodeb:/etc/

[root@nodeb ~]# systemctl disable --now httpd

[root@nodeb ~]# groupadd -g 1001 mysql

[root@nodeb ~]# useradd -u 1001 -g 1001 -M -d /data/mysql mysql

[root@nodeb ~]# mkdir /data/mysql -p

[root@nodeb ~]# vim .bash_profile

LAMP架构_第32张图片

[root@nodeb ~]# source .bash_profile

[root@nodeb ~]# mysqld --initialize --user=mysql

[root@nodeb ~]# /etc/init.d/mysqld start

[root@nodeb ~]# mysql_secure_installation

LAMP架构_第33张图片

LAMP架构_第34张图片 [root@nodea init.d]# vim /etc/my.cnf

[root@nodea init.d]# /etc/init.d/mysqld restart

[root@nodea init.d]# cd /data/mysql/

[root@nodea mysql]# mysqlbinlog mysql-bin.000001  查看二进制日志文件

[root@nodea mysql]# mysql -p

LAMP架构_第35张图片

[root@nodeb ~]# vim /etc/my.cnf

LAMP架构_第36张图片

[root@nodeb ~]# /etc/init.d/mysqld restart  重启 

nodea:

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';

Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

Query OK, 0 rows affected (0.00 sec)

LAMP架构_第37张图片

验证:

 

同步westos库:

[root@nodea mysql]# mysqldump -uroot -p westos > test.sql

[root@nodea mysql]# mysqldump -uroot -p westos > test.sql

[root@nodeb ~]# cat test.sql

LAMP架构_第38张图片

[root@nodeb ~]# mysqladmin -plee create westos

[root@nodeb ~]# mysql -plee westos < test.sql

[root@nodeb ~]# mysql -p

LAMP架构_第39张图片

 [root@nodea mysql]# mysql -p

LAMP架构_第40张图片

检测:[root@nodeb ~]# mysql -p

 

八,基于GTID(全局事务标识)的主从复制

 [root@nodea mysql]# vim /etc/my.cnf

LAMP架构_第41张图片

[root@nodea mysql]# /etc/init.d/mysqld restart

[root@nodeb ~]# vim /etc/my.cnf

[root@nodeb ~]# /etc/init.d/mysqld restart

 LAMP架构_第42张图片

[root@nodeb ~]# mysql -p

LAMP架构_第43张图片 

测试:

在a主机上插入表内容

LAMP架构_第44张图片

 在b主机上看

 

九,半同步复制 

[root@nodea mysql]# mysql -p

[root@nodeb mysql]# mysql -p

LAMP架构_第45张图片 [root@nodea mysql]# mysql -p

LAMP架构_第46张图片

 测试:a主机:

LAMP架构_第47张图片

b主机:

LAMP架构_第48张图片 

a主机中

 LAMP架构_第49张图片

十,mysql异步复制 

 LAMP架构_第50张图片

 更快一些,matser 发送二进制日志给 slave,master只负责发送,不确保slave是否收到。

 

十一,并行复制

开启 sql 线程并行复制,在 slave 端开启16线程进行 sql 回放,可以提高80%的性能。原先是一线程,如果启用并行复制,值不要设置为1 ;启用并行复制,原先的线程会退化为协调线程,后端是一个work,中间做了调度,性能会有损耗,不如之前。

把半同步的参数写到主配置文件里,让它重启后自动生效;

[root@nodeb ~]# vim /etc/my.cnf

LAMP架构_第51张图片

 十二,mysql的全同步复制(组复制)

配置过程:

为保证实验环境纯净,将所有的数据库停掉,然后将 nodea-c 的data 目录删除,重新配置初始化,初始化完成之后启动数据库,然后修改配置信息,然后再重启数据库,让新加入的参数生效。

[root@nodea ~]# cd /usr/local/

[root@nodea local]# scp -r mysql/ nodec:/usr/local/

[root@nodea local]# /etc/init.d/mysqld stop

[root@nodec ~]# groupadd -g 1001 mysql

[root@nodec ~]# useradd -u 1001 -g 1001 -M -d /data/mysql mysql

[root@nodec ~]# mkdir /data/mysql -p

[root@nodec ~]# vim .bash_profile

[root@nodec ~]# source .bash_profile

[root@nodeb mysql]# cd  /etc/init.d/

[root@nodeb init.d]# scp mysqld nodec:/etc/init.d/

[root@nodeb init.d]# cd

[root@nodeb ~]# scp /etc/my.cnf nodec:/etc/

[root@nodea local]# vim /etc/my.cnf

[root@nodea local]# cd /data/mysql/

[root@nodea mysql]# rm -rf *

[root@nodea mysql]# mysqld --initialize --user=mysql

[root@nodea mysql]# /etc/init.d/mysqld start

[root@nodea mysql]# mysql -p

mysql> ALTER USER root@localhost identified by 'lee';

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

mysql> FLUSH PRIVILEGES;

mysql>  SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FOR CHANNEL 'group_replication_recovery';

mysql> SET GLOBAL group_replication_bootstrap_group=ON;

mysql>  START GROUP_REPLICATION;

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

mysql> SELECT * FROM performance_schema.replication_group_members;

LAMP架构_第52张图片

LAMP架构_第53张图片 

[root@nodeb ~]# /etc/init.d/mysqld stop

[root@nodeb ~]# cd /data/mysql/

[root@nodeb mysql]# rm -rf *

[root@nodeb mysql]# vim /etc/my.cnf

LAMP架构_第54张图片

[root@nodeb ~]# cd /data/mysql/

[root@nodeb mysql]# mysqld --initialize --user=mysql

[root@nodeb mysql]# /etc/init.d/mysqld start

[root@nodeb mysql]# mysql -p

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

mysql> FLUSH PRIVILEGES;

mysql>  SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FOR CHANNEL 'group_replication_recovery';

mysql>  START GROUP_REPLICATION;

 LAMP架构_第55张图片

[root@nodec ~]# vim /etc/my.cnf

LAMP架构_第56张图片

[root@nodec ~]# mysqld --initialize --user=mysql

[root@nodec ~]# /etc/init.d/mysqld start

[root@nodec ~]# mysql -p

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

mysql> FLUSH PRIVILEGES;

mysql>  SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FOR CHANNEL 'group_replication_recovery';

mysql>  START GROUP_REPLICATION;

 十三,读写分离

[root@noded ~]# rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm

[root@noded ~]# cd /etc/mysqlrouter/

[root@noded mysqlrouter]# vim mysqlrouter.conf

LAMP架构_第57张图片

[root@noded mysqlrouter]# systemctl start mysqlrouter.service

[root@noded mysqlrouter]# netstat -anltp

LAMP架构_第58张图片

[root@nodea ~]# mysql -p

mysql> grant all on test.* to zcx@'%' identified by 'lee';

[root@noded mysqlrouter]# yum install -y lsof

[root@nodec ~]# yum install -y lsof

START GROUP_REPLICATION;

[root@nodea ~]# yum install -y lsof

mysql> SET GLOBAL group_replication_bootstrap_group=ON;

mysql> START GROUP_REPLICATION;

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

[root@nodeb ~]# yum install -y lsof

START GROUP_REPLICATION;

[root@localhost ~]# yum install mariadb.x86_64

[root@localhost ~]# mysql -h  192.168.0.10 -P 7001 -u zcx -p

LAMP架构_第59张图片

 访问的是7002端口,会根据配置文件中的信息,只能对test库做任何动作;并且每次连接数据库是默认的第一个;但是对后端是有健康检查的,当宕机之后,会默认顺延。

LAMP架构_第60张图片

  

 十四,延迟复制

 

[root@nodea ~]# /etc/init.d/mysqld stop

[root@nodea ~]# vim /etc/my.cnf

[root@nodea ~]# cd /data/mysql/

[root@nodea mysql]# rm -rf *

[root@nodea mysql]# /etc/init.d/mysqld start

[root@nodea mysql]# mysqld --initialize --user=mysql

[root@nodea mysql]# mysql -p

mysql> alter user root@localhost identified by 'lee';

mysql> grant replication slave on *.* to repl@'%' identified by 'lee';

mysql> show master status;

[root@nodeb ~]# /etc/init.d/mysqld stop

[root@nodeb ~]# vim /etc/my.cnf

LAMP架构_第61张图片

[root@nodeb ~]# cd /data/mysql/

[root@nodeb mysql]# rm -rf *

[root@nodeb mysql]# mysqld --initialize --user=mysql

[root@nodeb mysql]# /etc/init.d/mysqld start

[root@nodeb mysql]# mysql -p

mysql>  alter user root@localhost identified by 'lee';

mysql> change master to master_host='192.168.0.7', master_user='repl', master_password='lee', master_auto_position=1;

mysql> start slave;

mysql> show slave status\G;

[root@nodec ~]# /etc/init.d/mysqld stop

[root@nodec ~]# vim /etc/my.cnf

LAMP架构_第62张图片

[root@nodec ~]# cd /data/mysql/

[root@nodec mysql]# rm -rf *

[root@nodec mysql]# mysqld --initialize --user=mysql

[root@nodec mysql]# /etc/init.d/mysqld start

[root@nodec mysql]# mysql -p

mysql> alter user root@localhost identified by 'lee';

mysql> change master to master_host='192.168.0.7', master_user='repl', master_password='lee', master_auto_position=1;

mysql> start slave;

mysql> show slave status\G;

LAMP架构_第63张图片

[root@nodea mysql]# mysql -p

mysql> create database test;

mysql> use test

mysql> create table user_tb(

    -> username varchar(25) not null,

    -> password varchar(50) not null);

mysql> insert into user_tb values ('user1','123');

在b,c主机里查看表

LAMP架构_第64张图片

[root@nodec mysql]# mysql -p

mysql> stop slave sql_thread;

mysql> CHANGE MASTER TO MASTER_DELAY = 30;

mysql> start slave sql_thread;

[root@nodea mysql]# mysql -p

mysql> insert into user_tb values ('user2','123');创建,

b主机立刻就好

LAMP架构_第65张图片

十五,慢查询

[root@nodea mysql]# mysql -p

mysql> set long_query_time=10;

mysql> show variables like "long%";

mysql> show variables like "slow%";

mysql> set global slow_query_log=ON;

 

 

十六,高可用架构

 

[root@noded ~]# systemctl stop mysqlrouter.service

[root@noded ~]# tar zxf mha.tgz

[root@noded ~]# cd MHA-7/

[root@noded MHA-7]# yum install -y *.rpm

[root@noded MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm nodea:

[root@noded MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm nodeb:

[root@noded MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm nodec:

[root@nodea ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

[root@nodea ~]# mysql -p

mysql> grant all on *.* to root@'%' identified by 'lee';

[root@nodeb ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

[root@nodec ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

[root@nodec ~]# mysql -p

mysql> stop slave sql_thread;

mysql> CHANGE MASTER TO MASTER_DELAY = 0;

mysql> start slave sql_thread;

[root@noded ~]# cd MHA-7/

[root@noded ~]# cd /etc

[root@noded etc]# mkdir mha

[root@noded ~]# cd MHA-7/

[root@noded MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz

[root@noded MHA-7]# cd mha4mysql-manager-0.58

[root@noded mha4mysql-manager-0.58]# cd samples/

[root@noded samples]# cd conf

[root@noded conf]# cp masterha_default.cnf /etc/mha/app1.cnf

[root@noded conf]# cd /etc/mha/

[root@noded mha]# vim app1.cnf

[root@noded mha]# ssh-keygen  做免密认证

[root@noded ~]# ssh-copy-id noded

[root@noded ~]# scp -r .ssh/ nodea:

[root@noded ~]# scp -r .ssh/ nodeb:

[root@noded ~]# scp -r .ssh/ nodec:

[root@noded mha]# masterha_check_ssh --conf=/etc/mha/app1.cnf

LAMP架构_第66张图片

[root@noded ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

LAMP架构_第67张图片 

手动切换:

[root@noded mha]# masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=192.168.0.8 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

 

[root@nodea ~]# mysql -p

LAMP架构_第68张图片 

[root@nodeb ~]# mysql -p

mysql> insert into user_tb values ('user3','123');

[root@nodec ~]# mysql -p

mysql> select * from test.user_tb;

假设b主机宕机了[root@nodeb ~]# /etc/init.d/mysqld stop:

[root@noded app1]# masterha_master_switch --master_state=dead --conf=/etc/mha/app1.cnf --dead_master_host=192.168.0.8 --dead_master_port=3306 --new_master_host=192.168.0.7 --new_master_port=3306 --ignore_last_failover

 

在b主机上

[root@nodeb ~]# /etc/init.d/mysqld start

[root@nodeb ~]# mysql -p

mysql> change master to master_host='192.168.0.7', master_user='repl', master_password='lee', master_auto_position=1;

mysql> start slave;

mysql> show slave status\G;

LAMP架构_第69张图片

自动切换:此时还是nodea 是 master ;nodebc 是slave;

[root@noded app1]# masterha_manager --conf=/etc/mha/app1.cnf &

[root@noded app1]# ps ax

 

然后让nodea宕机/etc/init.d/mysqld stop ,由于文件在后台运行,每隔3s检测一下,当检测不到时,会根据文件的信息,让备选的 nodeb 上线。上线之后,此时会再次生成文件app.failover.complete 。

在让 nodea上线,手工恢复 slave 状态。

 

[root@nodea ~]# /etc/init.d/mysqld start

[root@nodea ~]# mysql -p

mysql> change master to master_host='192.168.0.8', master_user='repl', master_password='lee', master_auto_position=1;

mysql> start slave;

mysql> show slave status\G;

脚本切换:

[root@noded app1]# vim /etc/mha/app1.cnf

LAMP架构_第70张图片

[root@noded ~]# mv master_ip_* /usr/local/bin

[root@noded ~]# cd /usr/local/bin

[root@noded bin]# chmod +x *

[root@noded bin]# vim master_ip_failover

LAMP架构_第71张图片

[root@noded bin]# vim master_ip_online_change

LAMP架构_第72张图片 

测试:在b主机上添加一个vip,看是否会被摘除

[root@nodeb ~]# ip addr add 192.168.0.11/24 dev ens33

[root@noded bin]# masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=192.168.0.7 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

[root@nodeb ~]# ip addr

LAMP架构_第73张图片

你可能感兴趣的:(php,开发语言)