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

一、简介

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

先安装依赖
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

2、安装mysql5.7

先卸载centos7中自带的mariadb
rpm -qa|grep mariadb //查询出来已安装的mariadbrpm -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.rpmrpm -ivh mysql-community-libs-5.7.22-1.el7.x86_64.rpmrpm -ivh mysql-community-devel-5.7.22-1.el7.x86_64.rpmrpm -ivh mysql-community-embedded-5.7.22-1.el7.x86_64.rpmrpm -ivh mysql-community-client-5.7.22-1.el7.x86_64.rpmrpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm
初始化mysqlmysqld --initialize --user=mysql初始化完成后在mysqld.log文件末尾会有随机密码,一会登陆时候用cat /var/log/mysqld.log

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

启动mysqlsystemctl start mysqld.service首次登录mysqlmysql -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告一段落
3、安装php7.2.5

安装依赖
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

4、安装swoole

安装依赖
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 installvim /usr/local/lib/php.ini在尾部添加 extension=swoole.so保存后,运行php -m确保swoole出现在列表中,表示成功

5、安装phalcon

git下载实在太慢了

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

选择最新版,下载zip版安装sr和rzyum install lrzsz然后通过rz上传到服务器中unzip cphalcon-3.3.2.zipcd 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,表示成功

6、安装phpredis扩展
基于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.sophp -m 列表中有redis,表明安装成功

7、安装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密码也设置成一样的

8、安装redis并配置集群

安装依赖

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个节点:
复制代码

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/

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

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可以被集群管理器访问

复制代码
在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

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/274325

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午12:14
下一篇 2023年2月15日 上午12:15

相关推荐