[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
【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
[root@nodea conf]# nginx -s reload
[root@nodea ~]# vim .bash_profile
[root@nodea ~]# source .bash_profile
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
【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
测试:
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的安装:
安装前需要搭建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 ~]# 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
[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
测试:a主机:
b主机:
a主机中
更快一些,matser 发送二进制日志给 slave,master只负责发送,不确保slave是否收到。
开启 sql 线程并行复制,在 slave 端开启16线程进行 sql 回放,可以提高80%的性能。原先是一线程,如果启用并行复制,值不要设置为1 ;启用并行复制,原先的线程会退化为协调线程,后端是一个work,中间做了调度,性能会有损耗,不如之前。
把半同步的参数写到主配置文件里,让它重启后自动生效;
[root@nodeb ~]# vim /etc/my.cnf
配置过程:
为保证实验环境纯净,将所有的数据库停掉,然后将 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 ;nodeb和c 是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