首页 > 其他分享 >lnmp集群拆分

lnmp集群拆分

时间:2024-03-25 20:12:04浏览次数:21  
标签:web db 数据库 51 lnmp 集群 拆分 wordpress root

集群拆分

数据库拆分+php远程访问


实践1,拆分数据库

1.拆分背景,单机的各个组件,容易抢夺资源,导致服务器压力较大,拆的第一步,吧数据库拆出去
测试ab命令,对网站的整体压力

具体的拆分步骤

1. 基于以有数据的web-7开始操作
导出当前数据库的数据(还得数据库锁表,防止数据写入,备份时候,出现错误。专门的学mysql时候再去细聊)

先导出所有的数据
# -A 备份所有的数据库,数据表
# --single-transaction 保证数据完整性的参数

# 这里是把当前机器的所有数据库,以及数据表发给目标机器。
#会携带着当前数据库的mysql.user 也就是用户信息

mysqldump -uroot -p'linux0224' -A --single-transaction > /opt/alldb.sql

# 这里导出的SQL文件,就是完全的 SQL语句,恢复操作,也就其实是db-51的数据库
把这些SQL重新执行一遍
其实就是在重新的创建数据库
创建数据表
插入表数据。


2.把备份的数据,发给db-51机器
前提是db-51机器,安装好了mariadb。

web-7数据发给db-51
[root@web-7 ~]#scp /opt/alldb.sql [email protected]:/opt/


3.db-51机器,导入数据了
导入了该备份的数据,也同时会导入用户的信息
【你准备一个新机器,从零去安装mysql,默认是没密码,】

db-51上登录mysql,用web-7那会指定的用户名,密码也就行行了。
先开启51机器的数据库 systemctl start mariadb
没密码的
[root@db-51 ~]#mysql -uroot -p  < /opt/alldb.sql
有密码的
[root@db-51 ~]#mysql -uroot -pwww.yuchaoit.cn  < /opt/alldb.sql 

导入之后,重启数据库
[root@db-51 ~]#systemctl restart mariadb

重启之后,当前数据库的用户信息,就会以你恢复的数据为准了。
登录测试
[root@db-51 ~]#mysql -uroot -plinux0224

# 查看,是否能select查询到你昨天写的博客数据
# 这里就是让你执行如下的SQL语句,去查询mysql里面的数据,也就是你在wordpress里面的数据
# 大家先临时记一记这些基本的SQL语句,
# 还有专门的学习mysql所有内容。

# 你就记忆这5条就够了。。

MariaDB [wordpress]> show databases;

MariaDB [wordpress]> use wordpress;

MariaDB [wordpress]> show tables;

MariaDB [wordpress]> 
MariaDB [wordpress]> desc wp_posts;

MariaDB [wordpress]> 
MariaDB [wordpress]> select post_content  from wp_posts;




4.你还得设置SQL语句,创建一个可以用于远程连接的账号。
web-7 去远程连接它。
# grant all privileges 授予所有权限
#  on *.*  对所有的数据库.里面的数据表 操作
# to 'linux0224'@'%' identified by 'linux666';
# 上述语句,表示创建一个用户名linux0224,允许在任何远程的主机上 %
# 去登录当前这个db-51,且设置该用户的密码是  linux666

MariaDB [wordpress]> grant all privileges on *.* to 'linux0224'@'%' identified by 'linux666';



Query OK, 0 rows affected (0.00 sec)


# 立即刷新mysql的权限

MariaDB [wordpress]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

这个SQL授权语句



5.测试在web-7机器可以远程登录吗?

[root@web-7 ~]#mysql -ulinux0224 -plinux666 -h172.16.1.51


Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server

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

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

MariaDB [(none)]> 

测试web-7的php网站是否可以远程连接该数据库

你只需要修改wordpress的php源码即可
源码代码在
 vim /code/wordpress/wp-config.php
 
 
 修改如下
 // ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** Database username */
define( 'DB_USER', 'linux0224' );

/** Database password */
define( 'DB_PASSWORD', 'linux666' );

/** Database hostname */
define( 'DB_HOST', '172.16.1.51' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

测试再次访问web-7可以读取到远程的db-51数据吗

1. 停止web-7的数据库
[root@web-7 ~]#systemctl stop mariadb

[root@web-7 ~]#netstat -tunlp|grep 3306

如何判断,这里的数据库,是读取的db-51呢?

1. 再写一篇博客,试试db-51里面有数据吗
http://wordpress.linux0224.cn/wp-login.php
访问后台,写入数据

你在后台的操作,也等于去修改数据库内容
你学完数据库mysql的语句后,可以直接修改msyql的内容,让网站的内容更新(最底层了,一般不建议直接修改数据库,但是也最暴力的办法


2. 删除数据,把这个蔡旭困照片给删了,学习下删除数据的sql语句



3. 查看当前web-7机器的 tcp连接情况,是否连接了db-51机器。
[root@web-7 ~]#ss -an |grep 3306
tcp    TIME-WAIT  0      0      172.16.1.7:38320              172.16.1.51:3306               
tcp    TIME-WAIT  0      0      172.16.1.7:38308              172.16.1.51:3306               
tcp    TIME-WAIT  0      0      172.16.1.7:38312              172.16.1.51:3306               
tcp    TIME-WAIT  0      0      172.16.1.7:38316              172.16.1.51:3306 

这里通过ss命令,就是看到tcp/ip的 三次握手,四次挥手情况。
以及可以看到当前服务器,建立了多少TCP连接


4. 停止db-51数据库
[root@db-51 ~]#systemctl stop mariadb

发现在前端的php告诉你,它连接数据库出错了。(找db-51的问题)


至此数据库拆分完毕
实现了把web-7的数据,备份,发给了db-51
db-51导入了该数据
配置了远程访问的权限
修改web-7的产品代码,远程连接数据库
测试数据库读写正常。

 修改wecenter连接数据库的配置文件
vim /code/wecenter/system/config/database.php 


$config['charset'] = 'utf8mb4';^M
$config['prefix'] = 'aws_';^M
$config['driver'] = 'MySQLi';^M
$config['master'] = array (
  'charset' => 'utf8mb4',
  'host' => '172.16.1.51',
  'username' => 'linux0224',
  'password' => 'linux666',
  'dbname' => 'wecenter',
  'port' => '3306',
);^M
$config['slave'] = false;^M
$config['port'] = '3306';^M


# 因为你修改的不是php-fpm进程的配置文件
# 你修改的只是php源代码的静态程序文件,因此无须重启php-fpm进程


问题解答

1.如何查看linux的网络连接情况

ss -an 命令查看系统的所有的网络连接
ss -an |grep 具体的端口号 # 用于故障排查,基于tcp/ip很细节的角度

ss,netstat,ps命令。
tcupdump,根据底层的网络连接数据库,去排查故障疑难杂症。。
性能分析的高级操作。。
tcp/ip数据包

查看当前机器,和数据库db-51机器的连接情况
ss -an |grep 172.16.1.51



这里访问不是一个index.php吗,为什么会去读取数据呢?

可是刚才访问的是10.0.0.7/index.php,并不是wordpress.linux0224.cn



关于nginx虚拟主机理解的疑问

增加web节点(web-8)基本的引入负载均衡理念

配置nginx源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF

下载nginx
yum install -y nginx
修改nginx配置文件
vim /etc/nginx/nginx.conf 
user  www;

groupadd www -g 666
useradd www -s /sbin/nologin -M -u 666 -g 666

拷贝web7的所有配置文件 ,都是nginx+php功能的

拷贝nginx配置文件
[root@web-8 /etc/yum.repos.d]#scp [email protected]:/etc/nginx/conf.d/* /etc/nginx/conf.d/
[email protected]'s password: 

安装php,基于自建rpm仓库的安装,
yum install -y php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml  php71w-fpm  php71w-mysqlnd  php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb php71w-json php71w-pecl-apcu php71w-pecl-apcu-devel

拷贝php配置文件
[root@web-8 /etc/yum.repos.d]#scp -rp [email protected]:/etc/php-fpm.d  /etc/
[email protected]'s password: 
www.conf                                                                                                            100%   18KB  12.7MB/s   00:00  

获取web-7机器的所有产品源代码
拷贝命令如下

[root@web-8 /etc/yum.repos.d]#scp -rp [email protected]:/code/  /code/

此时,web-8机器就有了 web-7的所有内容

修改权限
[root@web-8 /code]#chown -R www.www /code/

web-8机器,可以启动nginx,php-fpm,查看是否可以访问wordpress。wecenterl
[root@web-8 /code]#systemctl start nginx
[root@web-8 /code]#
[root@web-8 /code]#
[root@web-8 /code]#systemctl start php-fpm

必须限制nginx和php-fpm都统一为www用户。
[root@web-8 /code]#ps -ef|grep php-fpm
root      11455      1  0 12:05 ?        00:00:00 php-fpm: master process (/etc/php-fpm.conf)
www       11456  11455  0 12:05 ?        00:00:00 php-fpm: pool www
www       11457  11455  0 12:05 ?        00:00:00 php-fpm: pool www
www       11458  11455  0 12:05 ?        00:00:00 php-fpm: pool www
www       11459  11455  0 12:05 ?        00:00:00 php-fpm: pool www
www       11460  11455  0 12:05 ?        00:00:00 php-fpm: pool www
root      11484  11159  0 12:07 pts/0    00:00:00 grep --color=auto php-fpm

测试访问(修改dns设置)

修改dns设置

10.0.0.7  wecenter.linux0224.cn wordpress.linux0224.cn

# 10.0.0.8  wecenter.linux0224.cn wordpress.linux0224.cn

测试整个lnmp所有环节


测试web-8

1. 修改dns之后,查看web8的网站,能否读取到这些数据,就足以证明,

web读取到了mysql数据,配置是OK
web-7 web-8公用一个mysql,因此数据一样

2.修改dns
C:\Users\yu>ping wordpress.linux0224.cn

正在 Ping wecenter.linux0224.cn [10.0.0.8] 具有 32 字节的数据:
来自 10.0.0.8 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.8 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.8 的回复: 字节=32 时间<1ms TTL=64

3.访问测试


故障测试

nginx挂了

systemctl stop nginx 

访问http://wordpress.linux0224.cn/ 会出现什么情况

php挂了


502 Bad Gateway 错误的网关(php-fpm 127.0.0.1:9000)
以后看到502就知道,nginx的代理转发出了问题,后端节点出了问题

数据库挂了

[root@db-51 ~]#systemctl stop mariadb
http://wordpress.linux0224.cn/

NFS网站静态数据共享

1.具体的网站源码,静态文件放哪,那是开发决定好的,这是属于网站开发中的URL设计。
通过f12,抓取网站的http数据包,查看每一个请求具体的url格式。

针对具体的静态文件目录,
root /code/wordpress/static/; # 设置为挂载点,挂载到NFS

运维需要根据开发提供的文档,或者要求,设置对应的location来处理静态请求,以及设置对应的目录挂载(NFS)


给wordpress设置静态目录

wordpress支持让用户自定义上传图片,图片上传的越来越多,导致服务器存储资源太大。
解决这个问题,单独的设置共享存储。降低web-7的存储压力。
2, 当你引入多个后端节后段,web-7 上传图片,在本地
web-8读取这个数据,能读到吗?

当你在单机web-8上传数据, 看web-7有吗?如何解决这个问题
F12抓HTTP请求

http://wordpress.linux0224.cn/wp-content/uploads/2022/05/cai.jpg

2.找到web-8的这个图片

3.修改dns,你访问web-7试试,看得到这个数据吗?
肯定没有,看下图

配置NFS如下

1.部署nfs-31
[root@nfs-31 ~]#yum install nfs-utils rpcbind -y


2.设置共享目录
创建目录,且设置为 www用户

[root@nfs-31 ~]#mkdir /wordpress-uploads
groupadd www -g 666
useradd www -s /sbin/nologin -M -u 666 -g 666


检查目录权限
[root@nfs-31 ~]#id www
uid=666(www) gid=666(www) groups=666(www)

[root@nfs-31 ~]#chown -R www.www /wordpress-uploads/


[root@nfs-31 ~]#cat /etc/exports
/wordpress-uploads  172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

确保你的nfs是正常共享
[root@nfs-31 ~]#exportfs -r
[root@nfs-31 ~]#systemctl start  rpcbind
[root@nfs-31 ~]#systemctl start nfs-utils
[root@nfs-31 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/wordpress-uploads 172.16.1.0/24

设置web服务器的共享(web-7,web-8)

给web-7 web-8的 uploads目录上传目录挂载给NFS即可

yum install nfs-utils rpcbind -y

挂载NFS
mount -t nfs  172.16.1.31:/wordpress-uploads   /code/wordpress/wp-content/uploads

df -h

做好自动挂载,方式重启机器后,导致未挂载没数据

tail -1 /etc/fstab
172.16.1.31:/wordpress-uploads   /code/wordpress/wp-content/uploads  nfs defaults 0 0

测试数据的写入

查看图片服务器挂了的情况(故障1,服务端挂了)

nfs-31故障
systemctl stop nfs

刷新会出现什么?
如果你图片服务器挂了,nginx去 挂载点找数据,发现NFS卡死,会导致网站卡死。

修复nfs31服务器,最好高可用性。。

,立即停止这个挂载动作。
systemctl start nfs

故障2,客户端挂了,未挂载)

[root@web-7 /code/wordpress/wp-content/uploads/2022/05]#cd
[root@web-7 ~]#
[root@web-7 ~]#
[root@web-7 ~]#umount /code/wordpress/wp-content/uploads

猜猜刷新,会出现什么报错。

404 。。

404 图片没了,就裂了

去服务器上看看图片数据又吗

如果你发现错误的结果是404,那可能是你客户端的问题,定位到时未挂载,而不是NFS服务端的问题

修复这个问题,挂载上就好了。

标签:web,db,数据库,51,lnmp,集群,拆分,wordpress,root
From: https://www.cnblogs.com/btcm409181423/p/18095216

相关文章

  • 部署ES集群
    首先,ES集群的运行需要大量内存映射,所有我们需要修改linux的配置修改/etc/sysctl.conf文件vi/etc/sysctl.conf添加内容,该配置能修改linux对单个进程内存映射的限制vm.max_map_count=262144sysctl-p为从指定的文件加载系统参数,不指定的话默认为/etc/sysctl.conf文件sysctl......
  • 【lnmp一键安装】--php环境
    1.官网:lnmp.org 一、一键安装wgethttps://soft.lnmp.com/lnmp/lnmp2.0.tar.gz-Olnmp2.0.tar.gz&&tarzxflnmp2.0.tar.gz&&cdlnmp2.0&&./install.sh lnmp 二、若是已经安装过,如何新增PHP版本呢?1.执行命令:wgethttps://soft.lnmp.com/lnmp/lnmp2.0.tar.gz-Ol......
  • redis哨兵 ,redis集群 缓存 以及某些问题: 最左前缀原则,,celery架构
    Redis哨兵#主从复制存在的问题:#1主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master-哨兵解决#2主从复制,只能主写数据,所以写能力和存储能力有限-集群来解决#搭建哨兵的目的一旦一主多从的架构,主库发生故障,能够自动转移一......
  • 【进阶五】Python实现SDVRP(需求拆分)常见求解算法——自适应大邻域算法(ALNS)
    基于python语言,采用经典自适应大邻域算法(ALNS)对需求拆分车辆路径规划问题(SDVRP)进行求解。目录往期优质资源1.适用场景2.代码调整3.求解结果4.代码片段参考往期优质资源经过一年多的创作,目前已经成熟的代码列举如下,如有需求可私信联系,表明需要的问题与算法......
  • Python+openpyxl 拆分Excel合并的单元格
    图片数据是举例子。在实际使用中,从需求网页上下载的生产资料是带有合并单元格的,但在处理的时候需要拆分开,不然不好操作。使用openpyxl可以实现操作如果没有安装openpyxl库,首先安装openpyxl在命令行执行pipinstallopenpyxl点击查看代码importopenpyxlpath=r"test.......
  • lnmp单机部署
    lnmp的协同工作流程,与动静态处理的解释图nginx和php协同工作的原理1.用户发起http请求,请求到达LNMP中的nginx2.nginx根据用户请求的url进行判断,通过location进行匹配3.locaiton判断出url是静态请求,nginx直接查找静态资源,返回响应。4.location判断出是动态请求,nginx反向......
  • Redis—集群哨兵
    原理主从复用是高并发的基石,哨兵模式提供了主从架构中宕机后自动恢复能力,Gossip协议和一致性哈希协议提供了集群中新增或退出节点是数据自动重分配问题。主从复制一主多从,从节点可再有从节点,从节点拷贝主节点数据。用户操作时实现读写分离,从节点提供读功能,主节点提供写功能。......
  • 【OceanBase】v4.2.1 集群命令汇总
    查看集群信息#查看所有集群obdclusterlist#启动集群ob3clusterobdclusterstartob3cluster#停止集群obdclusterstopob3cluster登录数据库#root用户的sys租户登录数据库obclient-hxxx.xxx.xxx.xxx-uxxx:sys:root-P2883-pxxxxxx-c-A-DOceanbas......
  • liunx环境下部署分布式压测集群
    一、java环境安装与配置官网下载jdk-15.0.1_linux-x64_bin.tar.gz,上传到liunx服务器(官网跳转)解压文件:tar-xzfjdk-15.0.1_linux-x64_bin.tar.gz,生成文件夹jdk-15.0.1在/usr/目录下创建java文件夹,将jdk-15.0.1移动到java文件夹下注意:移动文件夹需要处于文件存在位置执......
  • Redis系列之高可用集群模式介绍
    Redis系列之高可用集群模式介绍1.Redis主从模式1.1什么是主从模式?主从模式,是redis集群最基本的模式,主库负责读写,从库负责读。主库的数据会同步到从库,但是从库写的数据不会自动同步到主库,除非用写脚本等方式手动同步。这种模式应急能力比较差,假如出现宕机的情况,需要手动......