欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

程序员文章站 2022-03-09 08:05:18
...

一、简介

  php一直诟病于性能,可对开发者如此友好的语言为什么不能登上大雅之堂? 于是php一线开发者站了出来。

先有鸟哥优化php引擎,又有rango大神开源swoole。至此,基于php7+swoole的php代码的性能已经超过了静态编译的go语言。

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

  注: 1、图片截取自 https://wiki.swoole.com/wiki/page/508.html 

  

  框架作为协同开发规范和开发效率的保证,不得不被引入到日常开发中,可一旦加上了框架这层封装,势必影响php接口的整体性能。

  当下流行的php框架laravel,确实解决了很多规范和开发效率问题;但是臃肿的架构和用php去实现的封装,让他的性能表现不佳。

  针对这种情况,本架构选择c扩展框架phalcon作为开发框架,让框架带来的性能损耗,降到最小。

  本博文系列旨在介绍该架构的配置实现、性能优化、扩展性探讨、稳定性保障、安全性保证,后续会逐篇推出【性能优化篇】【扩展性探讨】【稳定性保障】【安全性保证】。

 二、配置细节

服务器:2台阿里云centos服务器(内存2G以上,mysql5.7最低支持2G内存)

web服务器: nginx(用权重做反向代理,因为服务器性能有可能不对等,为方便调整,故而用这种方式)

      swoole(代替php-fpm做php解析服务。由于swoole做php解析服务是异步非阻塞的,所以性能得到很大提升)

数据存储:   mysql5.7

        atlas(mysql读写分离传输中间件)

        redis

        pika(redis集群传输中间件)

php框架: phalcon

三、开始构建

1、安装nginx

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

先安装依赖
yum -y install pcre-devel openssl openssl-devel

开始安装
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar -xvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure
make && make install

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

2、安装mysql5.7

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

先卸载centos7中自带的mariadb
rpm -qa|grep mariadb //查询出来已安装的mariadb
rpm -qa | grep -i mysql // 查询已安装的mysql
rpm -e --nodeps 文件名 //卸载mariadb和mysql,文件名为上述命令查询出来的文件

安装依赖
yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6
yum -y update libstdc++-4.4.7-4.el6.x86_64
yum -y search libaio # 检索相关信息
yum -y install libaio # 安装依赖包
yum -y install net-tools

开始安装
mkdir mysql_bundle
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar -C mysql_bundle 
cd mysql_bundle/ 
rpm -ivh mysql-community-common-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm
初始化mysql
mysqld --initialize --user=mysql

初始化完成后在mysqld.log文件末尾会有随机密码,一会登陆时候用
cat /var/log/mysqld.log

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

启动mysql
systemctl start mysqld.service

首次登录mysql
mysql -uroot -pVjhOm8FJqs=2

  修改root密码

  msql>alter user 'root'@'localhost' identified by 'root';

  mysql>use mysql;

  msyql>update user set user.Host='%' where user.User='root';

 

  mysql>flush privileges;

  mysql>quit

 至此,mysql告一段落

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

 3、安装php7.2.5

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

安装依赖
yum -y install openssl install openssl-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel pcre pcre-devel libxslt libxslt-devel bzip2 bzip2-devel

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar -zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/libiconv
make
make install

开始安装
wget http://cn2.php.net/distributions/php-7.2.5.tar.gz
tar -xvf php-7.2.5.tar.gz
cd php-7.2.5
./configure --with-iconv=/usr/local/libiconv --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm
make && make install

安装成功后:
php --ini
找到php.ini.development的位置:

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

 
将php.ini.development cp到对应位置:
cp /home/install/php-7.2.5/php.ini-development /usr/local/lib/php.ini
由于我们不使用php-fpm做php解析服务,所以就不安装php-fpm了

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

 4、安装swoole

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

安装依赖
yum -y install m4 autoconf

开始安装
wget https://codeload.github.com/swoole/swoole-src/tar.gz/v2.1.3
tar -xvf v2.1.3
cd swoole-src-2.1.3/
phpize
./configure
make && make install

vim /usr/local/lib/php.ini
在尾部添加 extension=swoole.so

保存后,运行
php -m

确保swoole出现在列表中,表示成功

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

5、安装phalcon

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

git下载实在太慢了

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

选择最新版,下载zip版

安装sr和rz
yum install lrzsz

然后通过rz上传到服务器中

unzip cphalcon-3.3.2.zip
cd cphalcon-3.3.2/build/

安装依赖
yum -y install re2c

开始安装
./install

安装成功后
vim /usr/local/lib/php.ini
在尾部添加 extension=phalcon.so

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

php -m
的列表中有phalcon,表示成功

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

6、安装phpredis扩展

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

https://github.com/phpredis/phpredis/tree/4.0.2

从tag选择最新稳定版

下载,并上传到服务器解压

unzip phpredis-4.0.2.zip

cd phpredis-4.0.2

phpize
./configure
make && make install
vim /usr/local/lib/php.ini
在最后一行添加 extension=redis.so
php -m 列表中有redis,表明安装成功

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

 7、安装atlas

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

访问:https://github.com/Qihoo360/Atlas/releases
下载atlas

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

上传到服务器后
rpm -ivh Atlas-sharding_1.0.1-el6.x86_64.rpm
通过:/usr/local/mysql-proxy/bin/encrypt root

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

获得加密串:DAJnl8cVzy8=

vim /usr/local/mysql-proxy/conf/test.cnf
将mysql帐号 和 加密串写入test.cnf

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

开启atlas
/usr/local/mysql-proxy/bin/mysql-proxyd test start

尝试是否正常
mysql -uroot -proot -P1234

  基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

mysql -h127.0.0.1 -uuser -p12345678 -P2345

 基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

在另外一台主机上安装同样版本的mysql,且root密码也设置成一样的

 

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

 8、安装redis并配置集群

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

安装依赖

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  

tar -xvf tcl8.6.1-src.tar.gz

cd  tcl8.6.1/unix

./configure  

make && make install

  开始安装

tar -xvf redis-4.0.9.tar.gz
cd redis-4.0.9
make
make install

至此redis安装完毕,下面安装redis集群

安装依赖
yum -y install ruby ruby-devel rubygems rpm-build 

  yum install centos-release-scl-rh    //会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源

  yum install rh-ruby23  -y    //直接yum安装即可  

  scl  enable  rh-ruby23 bash    //必要一步

  ruby -v    //查看安装版本 如果版本>=2.2表示成功

gem install redis

 设置redis.conf

  参照:https://www.cnblogs.com/yuanermen/p/5717885.html

  创建redis节点

     测试我们选择2台服务器,分别为:192.168.1.237,192.168.1.238.每分服务器有3个节点。

  我先在192.168.1.237创建3个节点:

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

  cd /usr/local/
  mkdir redis_cluster  //创建集群目录
  mkdir 7000 7001 7002  //分别代表三个节点    其对应端口 7000 7001 7002
 //创建7000节点为例,拷贝到7000目录
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7000/   
 //拷贝到7001目录
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7001/   
 //拷贝到7002目录
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7002/   

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

   分别对7001,7002、7003文件夹中的3个文件修改对应的配置

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

daemonize    on                          //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7002,7003
port  7000                                //端口7000,7002,7003
cluster-enabled  yes                      //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf      //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  5000                //请求超时  设置5秒够了
bind 0.0.0.0                  // 让redis可以被集群管理器访问

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

基于nginx+swoole+phalcon+atlas实现的高性能负载均衡集群系列之【构建篇】

   在192.168.1.238创建3个节点:对应的端口改为7003,7004,7005.配置对应的改一下就可以了。

/usr/local/bin/redis-server /usr/local/redis_cluster/7000/redis.conf &
/usr/local/bin/redis-server /usr/local/redis_cluster/7001/redis.conf &
/usr/local/bin/redis-server /usr/local/redis_cluster/7002/redis.conf &

/usr/local/bin/redis-server /usr/local/redis_cluster/7003/redis.conf &
/usr/local/bin/redis-server /usr/local/redis_cluster/7004/redis.conf &
/usr/local/bin/redis-server /usr/local/redis_cluster/7005/redis.conf &

/home/install/redis-4.0.9/src/redis-trib.rb create --replicas 1 47.106.151.23:7000 47.106.151.23:7001 47.106.151.23:7002 119.23.234.210:7003 119.23.234.210:7004 119.23.234.210:7005

ok!

原文:https://www.cnblogs.com/chrnote/p/8965910.html

相关标签: 分布式集群