• 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  编译成功

     

    [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

    [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

    [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

     【5】重启nginx后测试 

    [root@nodea conf]# nginx -s reload

     【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

    [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

    4).mysql初始化

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

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

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

     

     

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

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

    [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 支持动态扩展;加入之后会自动识别其内容。

    [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

     测试:

     

    五,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

     

    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

    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 .

     做压测:

     

     切换为高效模式:

    [root@nodea html]# cd ..

    [root@nodea nginx]# cd conf

    [root@nodea conf]# pwd

    /usr/local/openresty/nginx/conf

    [root@nodea conf]# vim nginx.conf

     

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

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

     速率很快且无失败请求 

    六,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运行

     开启之后,会开启一个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

    [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

    自动跳转到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

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

    [root@nodea logs]# yum install telnet

    测试:

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

     

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

     

    发现 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

    浏览时出现错误

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

    [root@nodea conf]# vim nginx.conf

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

    解决

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

    [root@nodea php]# cd etc

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

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

     解决:[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

    [root@nodeb ~]# source .bash_profile

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

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

    [root@nodeb ~]# mysql_secure_installation

     [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

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

    [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)

    验证:

     

    同步westos库:

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

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

    [root@nodeb ~]# cat test.sql

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

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

    [root@nodeb ~]# mysql -p

     [root@nodea mysql]# mysql -p

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

     

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

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

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

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

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

     

    [root@nodeb ~]# mysql -p

     

    测试:

    在a主机上插入表内容

     在b主机上看

     

    九,半同步复制 

    [root@nodea mysql]# mysql -p

    [root@nodeb mysql]# mysql -p

     [root@nodea mysql]# mysql -p

     测试:a主机:

    b主机:

     

    a主机中

     

    十,mysql异步复制 

     

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

     

    十一,并行复制

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

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

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

     十二,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;

     

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

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

    [root@nodeb mysql]# rm -rf *

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

    [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;

     

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

    [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

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

    [root@noded mysqlrouter]# netstat -anltp

    [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

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

      

     十四,延迟复制

     

    [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

    [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

    [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;

    [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主机里查看表

    [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主机立刻就好

    十五,慢查询

    [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

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

     

    手动切换:

    [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

     

    [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;

    自动切换:此时还是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

    [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

    [root@noded bin]# vim master_ip_online_change

     

    测试:在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

  • 相关阅读:
    说说React的事件机制?
    单调队列与应用
    第85步 时间序列建模实战:CNN回归建模
    程序员过中秋 | 如何用代码绘制月亮?
    Python基础知识详解:数据类型、对象结构、运算符完整分析
    ActiveMQ window安装、修改密码、启动一闪而过、设置8161端口仅本地访问
    “Sky Walker Home” 春节大促活动推广方案设计
    基于单片机的胎压监测系统的设计
    Vue3 简单实现虚拟Table,展示海量单词.利用WebAPI speechSynthesis,朗读英语单词
    一个看似Circular view path的问题, 其实不是这个问题的问题
  • 原文地址:https://blog.csdn.net/z17609273238/article/details/126351647