关于haproxy:HAProxy-190-移植指南openEuler-2003-LTS-SP1

HAProxy 1.9.0 移植指南(openEuler 20.03 LTS SP1)介绍简要介绍HAProxy是一个应用C语言编写的自在及凋谢源代码软件,其提供高可用性、负载平衡,以及基于TCP和HTTP的应用程序代理,反对虚拟主机,它是收费、疾速并且牢靠的一种解决方案。开发语言:C 一句话形容:Web负载平衡 倡议的版本倡议应用版本为“HAProxy 1.9.0”。 阐明: 本文档实用于HAProxy 1.9.0,其余版本的HAProxy移植步骤也可参考本文档。 环境要求硬件要求我的项目阐明服务器TaiShan 200服务器(型号2280)CPU鲲鹏920 5250处理器磁盘分区对磁盘分区无要求操作系统要求我的项目版本openEuler20.03 LTS SP1 aarch64Kernel4.19查看以后零碎版本信息 cat /etc/os-release 装置openEuler操作系统,请参考https://openeuler.org/zh/docs... 阐明:装置形式倡议抉择“Server with GUI”装置形式。 镜像站RPM形式装置若您的服务器能够拜访网络,执行 wget https://mirrors.huaweicloud.c... 命令下载RPM包。否则,请拜访 https://mirrors.huaweicloud.c... 下载RPM包并复制到服务器“/home”目录。 阐明:镜像站中的RPM包都是通过开源代码编译打包而成,而后将其上传到镜像站。 以本地下载RPM包并上传到服务器为例阐明安装操作 装置HAProxy rpm -ivh haproxy-1.9.0-1.el7.aarch64.rpm 查看装置目录 ls /usr/local/haproxy 运行和验证配置参数 a. 关上option-http_proxy.cfg文件 vi /usr/local/haproxy/conf/option-http_proxy.cfgb. 批改option-http_proxy.cfg为如下内容后,保留并退出文件 globalmaxconn 20000log 127.0.0.1 local0 infouid 0gid 0chroot /usr/local/haproxynbproc 4daemondefaultsmode httpretries 3timeout connect 10stimeout client 20stimeout server 30stimeout check 2sfrontend test-proxybind *:80mode httplog globaldefault_backend test-proxy-srvbackend test-proxy-srvbalance roundrobinoption http-server-closeoption httpchk GET /index.htmlhttp-check expect status 200server web1 IP1:PORT1 weight 3server web2 IP2:PORT2 weight 3配置文件示例参数阐明见下表。 ...

November 7, 2022 · 1 min · jiezi

关于haproxy:haproxy

yum install haproxy -yvi /etc/haproxy/haproxy.cfg<code>globallog 127.0.0.1 local3log-send-hostname public-haproxy-primarychroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 512000user haproxygroup haproxydaemon#first configure# turn on stats unix socketstats socket /var/lib/haproxy/stats level admin#second configure# turn on stats unix socketnbproc 8cpu-map 1 0cpu-map 2 1cpu-map 3 2cpu-map 4 3cpu-map 5 4cpu-map 6 5cpu-map 7 6cpu-map 8 7# turn on stats unix socketstats socket /var/lib/haproxy/stats.1 level admin process 1stats socket /var/lib/haproxy/stats.2 level admin process 2stats socket /var/lib/haproxy/stats.3 level admin process 3stats socket /var/lib/haproxy/stats.4 level admin process 4stats socket /var/lib/haproxy/stats.5 level admin process 5stats socket /var/lib/haproxy/stats.6 level admin process 6stats socket /var/lib/haproxy/stats.7 level admin process 7stats socket /var/lib/haproxy/stats.8 level admin process 8defaultsmode httplog globaloption httplogoption forwardforoption dontlognulloption redispatchretries 3timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 100mtimeout server 100mtimeout http-keep-alive 30stimeout check 10smaxconn 512000#-------------------------------------------------------------------------#frontend#-------------------------------------------------------------------------frontend mainbind *:80bind *:443 ssl crt /etc/pki/tls/private/xxx.pem crt /etc/pki/tls/private/xxx.pemdefault_backend app#-------------------------------------------------------------------------#backend#-------------------------------------------------------------------------backend appbalance roundrobinoption httpchk OPTIONS * HTTP/1.1\r\nHost:\ wwwserver app-node1 ip:80 checkserver app-node2 ip:80 checkserver app-node3 ip:80 check</code>/etc/init.d/haproxy start其它配置listen game-proxy-serverbind :30001-39999,:50001-58999,:843mode tcpserver game-servers x.x.x.x故障判断和操作:1、首先查看端口是否能telnet通,查看虚构ip绑定在那台机器上,ip a2、查看keepalived,haproxy日志3、重启keepalived,haproxy

March 1, 2021 · 1 min · jiezi

为什么要用-HAProxy-而不是-Nginx-做负载均衡

负载均衡器是数据中心的入口点,处于访问一切资源的关键路径上。 这给了他们一些有趣的特征。首先,它们是在基础设施中需要监控的最重要的点。其次,他们处于一个独特的位置,不仅可以提供有关自己的特性,还可以提供他们所支持的后端的每项服务。 有两种流行的开源软件负载均衡器:HAProxy和nginx。让我们看看他们在这方面的异同。 启用负载均衡器上的监控如题。负载均衡器将生产环境的一切服务组织成为一个整体系统。 安装新的东西启用统计信息和监控内容启用日志启用nginx状态页面编辑 /etc/nginx/nginx.conf: server { listen 0.0.0.0:6644; access_log off; allow 127.0.0.0/8; allow 10.0.0.0/8; deny all; location / { stub_status on; } }启用HAProxy统计信息页面编辑/etc/haproxy/haproxy.cfg : listen stats 0.0.0.0:6427 mode http maxconn 10 no log acl network_allowed src 127.0.0.0/8 acl network_allowed src 10.0.0.0/8 tcp-request connection if if!network_allowed stats enable stats uri /从负载均衡器收集指标有标准的监控解决方案:datadog,signalfx,prometheus,graphite ... [2] 这些工具从应用程序,服务器和基础架构收集指标,它们允许检索指标,绘制图表并发送警报。 将负载平衡器集成到我们的监控系统中至关重要。我们需要了解客户端活动情况,请求数,错误率等... 毋庸置疑,监控能力将受限于负载均衡器测量到的信息。 可从nginx获得指标nginx只提供7种不同的指标。 Nginx仅在所有站点上给出总和。 单个站点或应用程序则没有任何数字对应。 活动连接:当前活动客户端连接数,包括等待连接。接受:接受的客户端连接总数。handling:已处理连接的总数。通常,参数值与accept 相同,除非已达到某些资源限制(例如,worker_connections限制)。请求:客户端请求的总数。读取:nginx正在读取请求头的当前连接数。写入:nginx将响应写回客户端的当前连接数。等待:等待请求的当前空闲客户端连接数。资料来源:https://nginx.org/en/docs/htt... HAProxy 提供的指标HAProxy提供83种不同的指标。 数字是全局,每个前端和每个后端(无论哪个有意义)。它们可在人类可读的网页上以原始CSV格式提供。 0. pxname [LFBS]:代理名称1. svname [LFBS]:服务名称(FRONTEND用于前端,BACKEND用于后端,任何名称用于服务器/侦听器)2. qcur [..BS]:当前排队的请求。对于后端,这将报告未分配服务器的队列号。3. qmax [..BS]:qcur的最大值4. scur [LFBS]:当前会话5. smax [LFBS]:最大会话6. slim [LFBS]:配置的会话限制7. stot [LFBS]:累计数连接8. bin [LFBS]:字节输入9. bout [LFBS]:字节输出[...] 32. 类型[LFBS] :( 0 =前端,1 =后端,2 =服务器,3 =套接字/监听器)33. rate [.FBS]:每秒的会话数超过最后一秒34. rate_lim [.F ..]:每秒新会话的配置限制35. rate_max [.FBS]:每秒新会话的最大数量36. check_status [... S]:上次健康检查的状态,其中一个:37. check_code [... S]:layer5-7代码,如果可用38. check_duration [... S]:以ms为单位完成上次健康检查所用的时间39. hrsp_1xx [.FBS]:带1xx代码的http响应40. hrsp_2xx [.FBS]:具有2xx代码的http响应41. hrsp_3xx [.FBS]:具有3xx代码42. http响应.hrsp_4xx [.FBS]:具有4xx代码的http响应43. hrsp_5xx [.FBS]:http响应5xx代码44. hrsp_other [.FBS]:与其他代码的http响应(协议错误)[...]资料来源:http://cbonte.github.io/hapro... ...

August 7, 2019 · 1 min · jiezi

各大API网关性能比较

用于实现API网关的技术有很多,大致分为这么几类:通用反向代理:Nginx、Haproxy、……网络编程框架:Netty、Servlet、……API网关框架:Spring Cloud Gateway、Zuul、Zuul2、……API网关最基本的功能就是反向代理,所以在对API网关做技术选型的时候需要着重考察其性能表现,本文对Nginx、Haproxy、Netty、Spring Cloud Gateway、Zuul2做了性能测试,测试代码可以在github获得。测试方法准备了三台2CPU 4G内存的服务器,分别运行Tomcat、API Gateway、Gatling(压测工具)先对Tomcat做压测,取Tomcat充分预热后的压测结果作为基准。压的是Tomcat自带的example:/examples/jsp/jsp2/simpletag/book.jsp在对Netty、Zuul2、Spring Cloud Gateway做压测时候也是先压个几轮做预热。被测的API网关都没有添加额外业务,只做反向代理吞吐量下图是吞吐量的情况,可以看到Netty、Nginx、Haproxy均比直压Tomcat低一点点,而Spring Cloud Gateway和Zuul2则要低得多。下面这张图可以更明显的看到吞吐量比较,Tomcat为100%因为它是基准值,Netty、Nginx、Haproxy的只比基准值低8%,而Spring Cloud Gateway和Zuul2则只是基准值的35%和34%(难兄难弟)。平均响应时间下图可以看到Netty、Nginx、Haproxy的平均响应时间与Tomcat差不多。但是Spring Cloud Gateway和Zuul2则是Tomcat的3倍多,不出所料。下图同样是以Tomcat作为基准值的比较:响应时间分布光看平均响应时间是不够的,我们还得看P50、P90、P99、P99.9以及Max响应时间(可惜Gatling只能设置4个百分位,否则我还想看看P99.99的响应时间)。为何要观察P99.9的响应时间?光看P90不够吗?理由有两个:1)观察P99、P99.9、P99.99的响应时间可以观察系统的在高压情况下的稳定性,如果这三个时间的增长比较平滑那么说明该系统在高压力情况下比较稳定,如果这个曲线非常陡峭则说明不稳定。2)观察P99、P99.9、P99.99的响应时间能够帮助你估算用户体验。假设你有一个页面会发出5次请求,那么这5次请求均落在P90以内概率是多少?90%^5=59%,至少会经历一次 > P90响应时间的概率是 100%-59%=41%,如果你的P90=10s,那么就意味着用户有41%的概率会在加载页面的时候超过10s,是不是很惊人?如果你的P99=10s,那么用户只有5%的概率会在访问页面的时候超过10s。如果P99.9=10s,则有0.4%的概率。关于如何正确测量系统可以看 “How NOT to Measure Latency” by Gil Tene下面同样是把结果与Tomcat基准值做对比:可以看到几个很有趣的现象:Haproxy、Nginx的P50、P90、P99、P99.9、Max都是逐渐递增的。Netty的P50、P90、P99、P99.9是很平坦的,Max则为基准值的207%。Spring Cloud Gateway和Zuul2则是相反的,它们的平面呈现下降趋势。Spring Cloud Gateway的Max甚至还比基准值低了一点点(94%),我相信这只是一个随机出现的数字,不要太在意。结论Nginx、Haproxy、Netty三者的表现均很不错,其对于吞吐量和响应时间的性能损耗很低,可以忽略不计。但是目前最为火热的Spring Cloud Gateway和Zuul2则表现得比较糟糕,因我没有写额外的业务逻辑这,可以推测这和它们的内置逻辑有关,那么大致有这么几种可能:内置逻辑比较多内置逻辑算法存在问题,占用了太多CPU时间内置逻辑存在阻塞内置逻辑没有用正确姿势使用Netty(两者皆基于Netty)不管是上面的哪一种都需要再后续分析。不过话说回来考虑选用那种作为API网关(的基础技术)不光要看性能,还要看:是否易于扩展自己的业务逻辑API使用的便利性代码的可维护性文档是否齐全…性能只是我们手里的一个筹码,当我们知道这个东西性能到底几何后,才可以与上面的这些做交换(trade-off)。比如Nginx和Haproxy的可扩展性很差,那么我们可以使用Netty。如果你觉得Netty的API太底层了太难用了,那么可以考虑Spring Cloud Gateway或Zuul2。前提是你知道你会失去多少性能。

April 12, 2019 · 1 min · jiezi

LNMP+HAProxy+Keepalived负载均衡(五)- 通过rsyncd实现文件的相互同步

上接前文,前文提到web服务器附件不同步的问题,这里补上文件同步的配置。安装同步软件# 安装同步服务所需的软件yum -y install rsync配置密码本mkdir -p /etc/rsyncfg/# 注意:下面的两个SyncPwd必须一致echo ‘SyncName:SyncPwd’ > /etc/rsyncfg/server.pwdecho ‘SyncPwd’ > /etc/rsyncfg/client.pwd# 密码文件配置权限chmod 600 /etc/rsyncfg/server.pwdchmod 600 /etc/rsyncfg/client.pwd配置防火墙端口# 开启防火墙端口firewall-cmd –zone=public –add-port=873/tcp –permanentfirewall-cmd –reload配置同步软件# 编辑配置文件vim /etc/rsyncd.conf# 配置文件内容uid = rootgid = rootuse chroot = yesmax connections = 4exclude = lost+found/transfer logging = yestimeout = 900ignore nonreadable = yesdont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2[uploads]path = /home/wwwroot/PublishPath/uploadscomment = Host:192.168.6.100 uploads filesignore errorsread only = yeswrite only = nolist = noauth users = syncersecrets file = /etc/rsyncfg/server.pwdhosts allow = 192.168.6.110重启服务service rsyncd restart && service rsyncd status执行同步操作echo ’’ > /etc/rsyncfg/sync.logecho ‘rsync -auv –password-file=/etc/rsyncfg/client.pwd SyncName@192.168.6.100::uploads /home/wwwroot/PublishPath/uploads/’ > /etc/rsyncfg/sync.shchmod +x /etc/rsyncfg/sync.shcp /etc/rsyncfg/sync.sh /usr/sbin/配置计划任务crontab -e# 添加任务# * * * * * /etc/rsyncfg/sync.sh # 取消前面的注释即可# 重启定时任务服务service crond restart && service crond status问题汇总ERROR: auth failed on module XXX@ERROR: auth failed on module XXXrsync error: error starting client-server protocol (code 5) at main.c(xxx) [Receiver=x.x.x]1、密码输入错误:请再次确认你登录用户的密码无误2、secrets file格式错误:secrets file的文件格式是 upload:123456表示upload用户的rsync密码是1234563、配置文件写错:最坑爹的一个,看看自己模块配置下面的auth users、secrets file有没写错4、secrets file权限问题服务端的secrets file权限必须是600,可以使用chmod 600 /home/user/test/rsync/etc/test.pass5、secrets file文件拥有者与rsync运行者服务端rsync服务是以什么用户运行,则必须保证secrets file文件拥有者必须是同一个假设root运行rsync –daemon,则secrets file的owner也必须是root6、如果是以–password-file=file的方式附带密码确保客户端密码文件格式无误,与服务端的密码文件不同,客户端的不用加上用户名,即直接是 123456rsync: failed to connect to X.X.X.X Connection timed out (110)rsync: failed to connect to 192.168.6.100 (192.168.6.100): Connection timed out (110)rsync error: error in socket IO (code 10) at clientserver.c(125) [Receiver=3.1.2]端口不通,开启防火墙的873端口:firewall-cmd –zone=public –add-port=873/tcp –permanentfirewall-cmd –reloadERROR: password file must not be other-accessibleERROR: password file must not be other-accessiblersync error: syntax or usage error (code 1) at authenticate.c(196) [Receiver=3.1.2]密码本权限不对:chmod 600 /etc/rsyncfg/server.pwdchmod 600 /etc/rsyncfg/client.pwd ...

January 14, 2019 · 1 min · jiezi

LNMP+HAProxy+Keepalived负载均衡(四)- MySQL双机互备及自动备份

前三篇已实现了最基本的负载均衡,但是还存在问题,如两个数据库不同步,上传的附件不同步,数据库没有制定备份计划,负载均衡参数还有待优化等问题。这里先把双机互备和自动备份的内容补齐。配置MySQL数据库的账户密码(以下命令仅用参考,这里的目的是要有一个可供内网其他服务器访问本机数据库的账户);# 停止数据库服务service mysql stop# 免验证启动数据库服务mysqld –user=mysql –skip-grant-tables –skip-networking# 登录mysqlmysql -u root mysql# 修改用户密码的几种方式mysql> UPDATE user SET authentication_string=PASSWORD(‘dbpwd’) where USER=‘dbadmin’;mysql> UPDATE user SET authentication_string=PASSWORD(‘dbpwd’) where USER=‘dbbaker’;mysql> UPDATE user SET Password=PASSWORD(‘dbpwd’) where USER=‘dbadmin’;mysql> alter user user() identified by “dbpwd”;# 使配置生效mysql> FLUSH PRIVILEGES;mysql> quit;# 重启mysql服务,注意,这里的mysql如果找不到服务,可以尝试mysqld,再不行就通过ps -ef | grep mysql找到进程ID(pid),然后通过kill -9 pid停止服务;service mysql restartmysql -udbadmin -p# Enter password: <输入新密码newpassword># 创建用户并配置权限:mysql> GRANT ALL ON . TO ‘dbadmin’@’%’ IDENTIFIED BY ‘dbpwd’ WITH GRANT OPTION;# 移除权限# REVOKE ALL ON . TO ‘dbadmin’@’%’;FLUSH PRIVILEGES;# 全局层级:.# 数据库层级:db_name.# 表层级:db_name.tbl_name# ALL是指分配所有权限,具体权限可以通过下面的查询语句查看# 查询用户权限select * from mysql.user \G;# 删除用户# delete from mysql.user where Host <> ‘%’;# 至此,数据库可以通过以上账户进行远程连接了。配置MySQL的双机互备 - 主数据库服务器(192.168.6.200 /etc/my.cnf的配置请参考LNMP+HAProxy+Keepalived负载均衡(三)- 配置文件汇总);# 在主数据库服务器上执行配置:vim /etc/my.cnf# 修改配置内容:server-id=6 # 数据库集群中唯一lower_case_table_names=1 # 新增行,数据表不区分大小写replicate_wild_do_table=sync_db_name.% # 只同步“sync_db_name”库下的表log-slave-updates=YES # 从服务器同步后记录日志# 保存配置后重启MySQL服务:service mysql restart# 进入MySQL命令行,查看主数据库状态信息,其中的“File”和“Position”值后面会用到:mysql> use sync_db_name;mysql> show master status;配置MySQL的双机互备 - 备数据库服务器(192.168.6.210);# 停止slave:mysql> stop slave;# 进入MySQL命令行,配置要同步的主库来源:mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.6.200’,MASTER_PORT=10002,MASTER_USER=‘dbadmin’,MASTER_PASSWORD=‘dbpwd’,MASTER_LOG_FILE=‘mysql-bin.000016’,MASTER_LOG_POS=1285;# MASTER_HOST:主数据库的IP;# MASTER_PORT:主数据库的端口(int),默认3306;# MASTER_USER,MASTER_PASSWORD:主数据库账户、密码;# MASTER_LOG_FILE:主数据库中查询到的“File”值;# MASTER_LOG_POS:主数据库中查询到的“Position”值;# 启动slave:mysql> start slave;# 检查slave:mysql> show slave status \G;# 命令行汇总:show master status;stop slave;Slave_IO_Running、Slave_SQL_Running 均显示为 Yes 说明主备同步服务正常运行,如下图:同步数据库的初始状态; 在启动同步服务前,还需要手动同步下数据库的初始状态,之后可以通过修改其中主数据库中的表来查看从数据库是否同步变更;# 锁定要同步的数据库(192.168.6.200):msyql> use sync_db_name;msyql> flush tables with read lock;# 将要同步的数据库导出脚本:mysqldump -udbadmin -pdbpwd sync_db_name >/home/backup/sync_db_name.sql# 解锁前面锁定的数据库:msyql> unlock tables;# 将上方备份的sql拷贝到从数据库服务器(192.168.6.210),然后创建同名数据库,恢复数据:msyql> create database sync_db_name;msyql> use sync_db_name;msyql> source /home/backup/sync_db_name.sql;做双机互备或多机循环互备; 然后将主从数据库服务器反转(即将192.168.6.200和192.168.6.210的主备身份调换),然后再配置一次同步即可。即192.168.6.200变更会同步到192.168.6.210,反之亦然。简单讲就是: 双机互备:A主B从 + A从B主; 多机循环互备:A主B从 + B主C从 + C主N从 + N主A从(建议不要过多,尤其是数据库数据量大,且变更频繁的情况下,同步毕竟也是有延迟的);数据库的自动备份(前三步前面的文章都有提到);安装计划工具;yum -y install crontabs编辑MySQL的配置文件;vim /etc/my.cnf# 添加配置文件内容:[mysqldump]# 用于备份数据库user=dbbakerpassword=dbpwd重启数据库服务;service mysql restart & service mysql status准备备份脚本;mkdir -p /home/bakup/lgd_system# 编辑bakdb.sh的内容:echo ‘mysqldump sync_db_name | gzip > /home/backup/lgd_system/sync_db_name_$(date +%Y%m%d_%H%M%S).sql.gz’ > /home/bakup/bakdb.shchmod +x /home/bakcup/bakdb.sh# 解压缩指定的备份文件:gunzip sync_db_name_.gz添加备份计划;# 方式一:crontab -e# 方式二:vim /etc/crontab # 编辑计划:# Example of job definition:# .—————- minute (0 - 59) *表示每分钟# | .————- hour (0 - 23) *表示每小时# | | .———- day of month (1 - 31) *表示每天# | | | .——- month (1 - 12) OR jan,feb,mar,apr … *表示每月# | | | | .—- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat *表示每天# | | | | |# * * * * * user-name(用户名) command to be executed(脚本路径)# 30 10 * * * /home/backup/bakdb.sh # 表示每天10:30执行一次备份脚本(前方的注释去掉即可)计划任务常用操作命令;service crond start # 启动服务service crond stop # 关闭服务service crond restart # 重启服务service crond reload # 重新载入配置service crond status # 查看服务状态tail -f /var/log/cron # 查看执行日志备份文件解压缩gzip命令:选项参数:-c:将压缩后的数据显示到屏幕上,可以用于重定向;-d:解压缩的参数;-t:检验压缩的一致性,看是否有错误;-v:显示 源文件大小/压缩文件大小 的压缩比;-#:# 为数字的意思,代表压缩等級,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6gzip -v => 压缩文件,-v查看压缩比gzip -d gunzip file.gz ...

January 14, 2019 · 2 min · jiezi

LNMP+HAProxy+Keepalived负载均衡(三)- 配置文件汇总

Nginx的操作命令vim /usr/local/nginx/conf/nginx.conf# 将端口由80修改为10001,修改内容如下:listen 10001 default_server;# 具体配置可参考下面的nginx配置文件# 重启Nginx,并查看其状态;service nginx restart & service nginx statusNginx的配置文件(Web服务器需要修改的配置,仅用参考)user www www;worker_processes auto;error_log /home/wwwlogs/nginx_error.log crit;pid /usr/local/nginx/logs/nginx.pid;#Specifies the value for maximum file descriptors that can be opened by this process.worker_rlimit_nofile 51200;events{ use epoll; worker_connections 51200; multi_accept on;}http{ include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable “MSIE [1-6].”; #limit_conn_zone $binary_remote_addr zone=perip:10m; ##If enable limit_conn_zone,add “limit_conn perip 10;” to server section. server_tokens off; access_log off; server { # 端口根据自己的情况修改 listen 10001 default_server; server_name _; index index.html index.htm index.php default.html default.htm default.php; # 站点根目录 root /home/wwwroot/publishPath; include rewrite/laravel.conf; #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/..php$ { deny all; } include enable-php.conf; location ~ ..(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ ..(js|css)?$ { expires 12h; } location ~ /.well-known { allow all; } location ~ /. { deny all; } access_log off; } # 可以加载自己的配置文件,这里我把配置文件中的内容直接替换了原本的server节点配置; # include vhost/.conf;}MySQL的操作命令vim /etc/my.cnfservice mysql restart & service mysql statuslnmp restartMySQL的配置文件(DB服务器需要修改的配置,仅用参考)[client]port = 10002socket = /tmp/mysql.sock[mysqld]port = 10002socket = /tmp/mysql.sock# 数据库文件存放位置datadir = /home/lnmp/mysql/dataskip-external-lockingkey_buffer_size = 128Mmax_allowed_packet = 1Mtable_open_cache = 512sort_buffer_size = 2Mnet_buffer_length = 8Kread_buffer_size = 2Mread_rnd_buffer_size = 512Kmyisam_sort_buffer_size = 32Mthread_cache_size = 64query_cache_size = 64Mtmp_table_size = 64Mperformance_schema_max_table_instances = 4000explicit_defaults_for_timestamp = true#skip-networkingmax_connections = 500max_connect_errors = 100open_files_limit = 65535log-bin=mysql-binbinlog_format=mixedserver-id = 51lower_case_table_names = 1expire_logs_days = 10replicate_wild_do_table=lgd_system.%# relay_log=mysqld-relay-binlog-slave-updates=YESdefault_storage_engine = InnoDBinnodb_file_per_table = 1innodb_data_home_dir = /home/lnmp/mysql/datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /home/lnmp/mysql/datainnodb_buffer_pool_size = 512Minnodb_log_file_size = 128Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50[mysqldump]# 数据库备份账户,自行创建并分配相应的权限user=bakuserpassword=ZXdfty^&quickmax_allowed_packet = 16M[mysql]no-auto-rehash[myisamchk]key_buffer_size = 128Msort_buffer_size = 2Mread_buffer = 2Mwrite_buffer = 2M[mysqlhotcopy]interactive-timeoutHAProxy的操作命令# 负载状态监测:# Web服务器HAProxy - http://192.168.6.111:8080/web# DB服务器HAProxy - http://192.168.6.211:8080/db# 如果需要通过外网访问,需要把8080端口映射到外网端口即可。# 常用命令:vim /etc/haproxy/haproxy.cfgservice haproxy restart & service haproxy statusHAProxy的配置文件(Web服务器)#———————————————————————# Global settings#———————————————————————global # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志 log 127.0.0.1 local3 # 软件工作目录 chroot /var/lib/haproxy # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 pidfile /usr/local/haproxy/haproxy.pid # 最大连接数,默认4000 maxconn 30000 # 所属用户 user haproxy # 所属组 group haproxy # 以守护进程方式运行haproxy daemon # turn on stats unix socket # stats socket /var/lib/haproxy/stats # socket路径#———————————————————————# common defaults that all the ’listen’ and ‘backend’ sections will# use if not designated in their block#———————————————————————defaults mode http # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK log global # 采用全局定义的日志 option httplog # 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志 option dontlognull # 不记录健康检查的日志信息 option http-server-close # 每次请求完毕后主动关闭http通道 # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option forwardfor except 127.0.0.0/8 option redispatch # serverId对应的服务器挂掉后,强制定向到其他健康的服务器 retries 3 # 3次连接失败就认为服务不可用,也可以通过后面设置 timeout http-request 10s # http请求超时时间 timeout queue 1m # 一个请求在队列里的超时时间 timeout connect 10s # 连接超时 timeout client 1m # 客户端连接超时 timeout server 1m # 服务器连接超时 timeout http-keep-alive 10s # 设置http-keep-alive的超时时间 timeout check 10s # 检测超时 maxconn 3000 # 最大连接数#———————————————————————# main frontend which proxys to the backends#———————————————————————# 前端配置frontend main *:80 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js use_backend static if url_static default_backend servers#———————————————————————# static backend for serving up images, stylesheets and such#———————————————————————# 后台静态文件服务配置backend static balance roundrobin server static1 192.168.6.100:10001 check inter 2000 fall 3 weight 50 server static2 192.168.6.110:10001 check inter 2000 fall 3 weight 50#———————————————————————# round robin balancing between the various backends#———————————————————————# 后台服务配置backend servers balance roundrobin # 添加cookie配置,将某客户端引导到之前为其服务过的后端服务器上,即和后端某服务器保持联系,防止登录验证失效 cookie app_cook insert nocache server app1 192.168.6.100:10001 check inter 2000 fall 3 weight 50 cookie server1 server app2 192.168.6.110:10001 check inter 2000 fall 3 weight 50 cookie server2# HAProxy状态监控服务配置listen stats # 绑定端口 bind *:8080 mode http # stats enable # 访问地址:192.168.6.100:8080/web 和 192.168.6.110:8080/web stats uri /web stats realm Global\ statistics # 管理员账户 stats auth hapadmin:1qazse$#2HAProxy的配置文件(DB服务器)#———————————————————————# Global settings#———————————————————————global pidfile /var/run/haproxy.pid maxconn 30000 user haproxy group haproxy daemon nbproc 1#———————————————————————# common defaults that all the ’listen’ and ‘backend’ sections will# use if not designated in their block#———————————————————————defaults mode tcp option redispatch retries 3 timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s maxconn 4096 option abortonclosefrontend main bind :3306 default_backend serversbackend servers server mysql1 192.168.6.200:10002 check inter 3000 fall 3 weight 50 server mysql2 192.168.6.210:10002 check inter 3000 fall 3 weight 50# 监控访问地址:192.168.6.210:8080/db 和 192.168.6.200:8080/dblisten stats mode http bind 0.0.0.0:8080 stats enable stats uri /db stats realm Global\ statistics stats auth dbadmin:1qazse$#2Keeplived的操作命令# 查看已安装的Keepalived的版本:keepalived -v# 查看配置:cat /etc/keepalived/keepalived.conf# 编辑配置文件:vim /etc/keepalived/keepalived.conf# 测试高可用的远程访问:mysql -h 远程数据库ip地址 -P 端口 -u 用户名 -pmysql -h 192.168.6.200 -P 3306 -u dbuser -p# 开通服务器间的 vrrp 协议通信,用于Keepalived通信:firewall-cmd –direct –permanent –add-rule ipv4 filter INPUT 0 –in-interface 网卡名称 –destination 224.0.0.18 –protocol vrrp -j ACCEPT;firewall-cmd –reload;# 服务器的网卡名称请根据自己的情况修改,# INPUT代表接收224.0.0.18的报文。# 在VIP服务器上测试VIP漂移:ip addr | grep 网卡名称# 停止VIP所在服务器的keepalived服务,并查看VIP是否移除,并查看备用服务器是否获取到VIP:service keepalived stop && service keepalived statusip addr | grep 网卡名称# 在之前停止keepalived服务的服务器上开启keepalived服务,查看VIP是否已取回:service keepalived start && service keepalived statusip addr | grep 网卡名称Keeplived的配置(Web服务器)Web主服务器的配置:# Master的配置内容:! Configuration File for keepalivedglobal_defs { notification_email { example@domain.com # 收邮件人,可以定义多个 } notification_email_from HaproxyMaster@web.haproxy # 发件人,可伪装 smtp_server 127.0.0.1 # 发送邮件的服务器地址 smtp_connect_timeout 30 # 连接超时时间 no_email_faults router_id WebMaster vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}vrrp_script chk_haproxy { # HAProxy服务监测脚本 script ‘/etc/keepalived/check_haproxy.sh’ interval 2 weight 2}vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器 state MASTER # 由初始状态状态转换为master状态 interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改 virtual_router_id 100 # 虚拟路由的id号,一般不能大于255的 priority 100 # 优先级,数字越大,优先级越高,主比次大 advert_int 1 # 初始化通告 authentication { # 认证机制 auth_type PASS auth_pass 666 # 密码,自行更改,主备一致即可 } track_script { chk_haproxy } virtual_ipaddress { # Web服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。 #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL> #192.168.200.18/24 dev eth2 label eth2:1 192.168.6.111 } notify_master ‘/etc/keepalived/clean_arp.sh 192.168.6.111’}Web备服务器的配置:# Backup的配置内容:! Configuration File for keepalivedglobal_defs { notification_email { example@domain.com # 收邮件人,可以定义多个 } notification_email_from HaproxyBackup@web.haproxy # 发件人,可伪装 smtp_server 127.0.0.1 # 发送邮件的服务器地址 smtp_connect_timeout 30 # 连接超时时间 no_email_faults router_id WebBackup vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}vrrp_script chk_haproxy { # HAProxy服务监测脚本 script ‘/etc/keepalived/check_haproxy.sh’ interval 2 weight 2}vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器 state BACKUP # 由初始状态状态转换为backup状态 interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改 virtual_router_id 100 # 虚拟路由的id号,一般不能大于255的 priority 90 # 优先级,数字越大,优先级越高,主比次大 advert_int 1 # 初始化通告 authentication { # 认证机制 auth_type PASS auth_pass 666 # 密码,自行更改,主备一致即可 } track_script { chk_haproxy } virtual_ipaddress { # Web服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。 #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL> #192.168.200.18/24 dev eth2 label eth2:1 192.168.6.111 } notify_master ‘/etc/keepalived/clean_arp.sh 192.168.6.111’}Keeplived的配置(DB服务器)DB主服务器的配置:# Master的配置内容:! Configuration File for keepalivedglobal_defs { notification_email { example@domain.com # 收邮件人,可以定义多个 } notification_email_from HaproxyMaster@db.haproxy # 发件人,可伪装 smtp_server 127.0.0.1 # 发送邮件的服务器地址 smtp_connect_timeout 30 # 连接超时时间 no_email_faults router_id DBMaster vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}vrrp_script chk_haproxy { # HAProxy服务监测脚本 script ‘/etc/keepalived/check_haproxy.sh’ interval 2 weight 2}vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器 state MASTER # 由初始状态状态转换为master状态 interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改 virtual_router_id 99 # 虚拟路由的id号,一般不能大于255的 priority 100 # 优先级,数字越大,优先级越高,主比次大 advert_int 1 # 初始化通告 authentication { # 认证机制 auth_type PASS auth_pass 666 # 密码,自行更改,主备一致即可 } track_script { chk_haproxy } virtual_ipaddress { # DB服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。 #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL> #192.168.200.18/24 dev eth2 label eth2:1 192.168.6.211 } notify_master ‘/etc/keepalived/clean_arp.sh 192.168.6.211’}DB备服务器的配置:# Backup的配置内容:! Configuration File for keepalivedglobal_defs { notification_email { example@domain.com # 收邮件人,可以定义多个 } notification_email_from HaproxyBackup@db.haproxy # 发件人,可伪装 smtp_server 127.0.0.1 # 发送邮件的服务器地址 smtp_connect_timeout 30 # 连接超时时间 no_email_faults router_id DBBackup vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}vrrp_script chk_haproxy { # HAProxy服务监测脚本 script ‘/etc/keepalived/check_haproxy.sh’ interval 2 weight 2}vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器 state BACKUP # 由初始状态状态转换为master状态 interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改 virtual_router_id 99 # 虚拟路由的id号,一般不能大于255的 priority 90 # 优先级,数字越大,优先级越高,主比次大 advert_int 1 # 初始化通告 authentication { # 认证机制 auth_type PASS auth_pass 666 # 密码,自行更改,主备一致即可 } track_script { chk_haproxy } virtual_ipaddress { # DB服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。 #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL> #192.168.200.18/24 dev eth2 label eth2:1 192.168.6.211 } notify_master ‘/etc/keepalived/clean_arp.sh 192.168.6.211’}创建Keepalived调用的脚本操作命令mkdir /etc/keepalived/echo ’’ > /etc/keepalived/check_haproxy.shecho ’’ > /etc/keepalived/clean_arp.shchmod +x /etc/keepalived/.sh# 然后编辑两个脚本的内容,如下/etc/keepalived/check_haproxy.sh#!/bin/bash# 判断haproxy是否已经启动if [ $(ps -C haproxy –no-header | wc -l) -eq 0 ]; then # 如果没有启动,则启动haproxy程序 haproxy -f /etc/haproxy/haproxy.cfgfi# 睡眠两秒钟,等待haproxy完全启动sleep 2# 判断haproxy是否已经启动if [ $(ps -C haproxy –no-header | wc -l) -eq 0 ]; then # 如果haproxy没有启动起来,则将keepalived停掉,则VIP自动漂移到另外一台haproxy机器,实现了对haproxy的高可用 service keepalived stop/etc/keepalived/clean_arp.sh#!/bin/shVIP=$1GATEWAY=192.168.6.255 # 本机的网卡网关地址/sbin/arping -I ens160 -c 5 -s $VIP $GATEWAY &>/dev/null发布文件的配置# 站点根目录赋权chmod -R 777 /home/wwwroot/publishPath# PHP环境配置vim /home/wwwroot/publishPath/.env# 编辑配置内容:APP_DEBUG=false# Web的内网VIP,如需外网访问,则需要将192.168.6.111映射到外网,然后将该处的IP改成外网IPAPP_URL=http://192.168.6.111DB_CONNECTION=mysql# DB的内网VIPDB_HOST=192.168.6.211# DB的内网端口DB_PORT=3306# 数据库名称DB_DATABASE=dbName# 数据库用户名DB_USERNAME=dbuser# 数据库密码DB_PASSWORD=dbpwd# 其他配置选项使用默认设置,这里省略。# 配置保存退出后重启php服务:service php-fpm restart关于IP的说明 以上说到的IP都是内网IP,所有的配置都使用内网IP即可。如需外网访问,只需要把两个虚拟IP和端口映射到外网即可(注意修改php配置的APP_URL)。 ...

January 14, 2019 · 6 min · jiezi

LNMP+HAProxy+Keepalived负载均衡 - 基础服务准备

日志服务修改日志服务配置并重启日志服务;vim /etc/rsyslog.conf编辑系统日志配置,指定包含的配置文件路径和规则:$IncludeConfig /etc/rsyslog.d/.conf为haproxy创建一个独立的配置文件;vim /etc/rsyslog.d/haproxy.conf编辑配置文件的内容如下:$ModLoad imudp # 取消注释$UDPServerRun 514 # 取消注释# 与“/etc/haproxy/haproxy.cfg”中的配置“log 127.0.0.1 local3”对应local3. /var/log/haproxy.log# 如果不加 “&~”,则除了在/var/log/haproxy.log中写入日志外,也会写入message文件&~配置“rsyslog”的主配置文件,开启远程日志;vim /etc/sysconfig/rsyslog修改配置内容如下:SYSLOGD_OPTIONS="-c 2 -r -m 0"# -c 2 使用兼容模式,默认是 -c 5# -r 开启远程日志# -m 0 标记时间戳,单位是分钟,为0表示禁用该功能重启HAProxy和日志服务并查看各自服务状态:service haproxy restart & service haproxy statusservice rsyslog restart & service rsyslog status# 查看PHP的错误日志配置cat /usr/local/php/etc/php.ini | grep error_log防火墙服务开通端口(根据自身需求配置):firewall-cmd –zone=public –add-port=3306/tcp –permanentfirewall-cmd –zone=public –add-port=873/tcp –permanentfirewall-cmd –zone=public –add-port=10002/tcp –permanentfirewall-cmd –zone=public –add-port=10001/tcp –permanentfirewall-cmd –zone=public –add-port=80/tcp –permanentfirewall-cmd –zone=public –add-port=8080/tcp –permanent重启/重新加载防火墙服务并查看其状态:systemctl restart firewalld.serviceservice firewalld restart && service firewalld statusfirewall-cmd –reload测试端口:telnet ip port第三方防火墙 这里推荐semanage,优点自行百度,安装配置:# 安装端口管理工具semanage;yum -y install policycoreutils-python# 查看已开通端口;semanage port -l|grep http# 开通端口;semanage port -a -t http_port_t -p tcp port_number # 开放端口port_number,要开通的端口号semanage port -d -t http_port_t -p tcp port_number # 关闭端口port_number,http_port_t为端口组名其他命令# 查看服务的pid:ps -ef | grep ServiceName# 停止服务:kill -9 service_pid# 查看端口占用情况:lsof -i tcp:80# 列出所有端口:netstat -ntlp# 分区及挂载操作# 查看当前空间df -h# 查看可用磁盘fdisk -lfdisk /dev/sdb# 创建分区,多数操作可以默认Command (m for help): m# 根据提示进行操作:# 分区后格式化mkfs -t ext4 /dev/sdb1mkfs -t ext4 /dev/sdb2# 挂载到已有目录mount -w /dev/sdb1 /mnt/lnmpmount -w /dev/sdb2 /mnt/backupmount -o remount -w /dev/sdb2 /mnt/backup ...

January 12, 2019 · 1 min · jiezi

LNMP+HAProxy+Keepalived负载均衡 - LNMP基础环境准备

环境版本说明:服务器系统:CentOS 7.5:cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core) # 输出结果服务器IP地址: 服务器A:192.168.6.100 服务器B:192.168.6.200LNMP版本: lnmp1.5 下载地址:http://soft.vpser.net/lnmp/ln…准备安装环境(两台服务器都需要执行):# 关闭selinux(如果是centos系统,默认会开启selinux,会引发很多权限问题)vim /etc/selinux/config# 把SELINUX=enforcing改为SELINUX=disabled# 保存退出,并执行下面的命令使配置立即生效:setenforce 0# 升级所有包,改变软件设置和系统设置,系统版本内核都升级# yum -y update# 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变yum -y upgrade# 安装后面用到的软件yum -y install haproxy keepalived vim crontabs mlocate && updatedb# 创建文件夹,并将lnmp安装包下载到当前新创建的文件夹mkdir -p /home/soft && cd /home/soft && wget http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz# 解压安装包tar -xvf lnmp1.5-full.tar.gz安装lnmp:cd /home/soft/lnmp1.5-full./install.sh根据自己的需要选择MySQL、PHP等软件的版本,按提示操作,然后等待安装完成。我这里都选择最新版本。记好设置的相关密码,后面会用到。其他命令集合(仅用参考,无需执行):# 添加用户组和用户,并为其分配相关文件夹的最高权限:groupadd -r GroupName useradd -g UserName -M -s /sbin/nologin GroupNamechown -R GroupName:UserName /usr/local/haproxy# 工具版本查看mysql -uroot -pPwdStr # 登录后就可以看到mysql的版本nginx -v # nginx versionhaproxy -v # HA-Proxy versionkeepalived -v # keepalived 版本# 编辑配置文件集合:vim /etc/keepalived/keepalived.confvim /etc/rsyslog.conf # 编辑系统日志配置vim /etc/rsyslog.d/haproxy.conf # HAProxy的日志vim /etc/sysconfig/rsyslog # rsyslog的主配置vim /usr/local/nginx/conf/nginx.conf # Nginx的配置vim /etc/haproxy/haproxy.cfg # HAProxy的配置vim /etc/my.cnf # MySQL的配置# 将相关服务设置为开机启动:chkconfig nginx on # Web服务chkconfig mysql on # 数据库服务chkconfig haproxy on # 反向代理服务chkconfig keepalived on # 服务状态监测chkconfig crond on # 计划任务服务chkconfig rsyslog on # 日志服务# 重启各服务集合:service haproxy restart & service haproxy statusservice rsyslog restart & service rsyslog statusservice nginx restart & service nginx statusservice mysql restart & service mysql statusservice keepalived restart & service keepalived statusservice crond restart & service crond statuslnmp restart离线安装 如果要安装的服务器无法连接外网,安装就要麻烦很多,无法使用lnmp的一键安装包了。只能通过PC下载,然后远程上传到服务器,然后再编译安装。这里就不列举所有软件的安装。下载MySQL 点击官方下载 mysql-8.0.13-1.el7.x86_64.rpm-bundle.tar;安装MySQL# 卸载系统自带数据库:rpm -qa | grep MySQL-rpm -ev xxxrpm -e –nodeps mysqlyum -y remove mari*# 将下载的文件通过Xftp上传到服务器# 解压文件到当前目录:tar -xvf mysql-8.0.13-1.el7.x86_64.rpm-bundle.tar# 安装 MySQL:rpm -ivh MySQL_# 创建用户组和用户:groupadd -r mysqluseradd -g mysql mysql# 为MySQL的数据库文件夹授权:chown -R mysql:mysql /home/lnmp/mysql/data/# 相应的依赖 # 1. libaio # 2. net-tools # 3. perl# 安装perl./Configure -des -Dprefix=/usr/bin/perlmake && make testmake installperl -v# 只需要安装一下四个组件就可以了:# 因为具有依赖关系,所以需要按顺序执行:rpm -ivh mysql-community-common-.rpmrpm -ivh mysql-community-libs-.rpmrpm -ivh mysql-community-client-.rpmrpm -ivh mysql-community-server-*.rpm# 查看mysql是否启动service mysqld status# 启动mysqlservice mysqld start# 停止mysqlservice mysqld stop# 重启mysqlservice mysqld restart配置MySQL# 安装完成后,打印出的安装日志里面有一些有用的提示信息,如:# 查看临时密码:cat /root/.mysql_secret# /usr/bin/mysql_secure_installation# New default config file was created as /usr/my.cnf and# will be used by default by the server when you start it.# WARNING: Default config file /etc/my.cnf exists on the system# This file will be read by default by the MySQL server# If you do not want to use this, either remove it, or use the# –defaults-file argument to mysqld_safe when starting the server# 登录后修改密码:mysql> SET PASSWORD = PASSWORD(‘DBPwdStr’);# 为数据库创建访问账户,修改账户的限制IP,查询用户表:mysql> GRANT ALL ON . TO ‘username’@’%’ IDENTIFIED BY ‘DBPwdStr’ WITH GRANT OPTION;mysql> update mysql.user set host=’%’ where host=’::1’;mysql> delete from mysql.user where host<>’%’;mysql> select * from mysql.user \G;# 编辑MySQL的配置文件:vim /etc/my.cnf# 启动MySQL服务:service mysql restart && service mysql status# 启动错误# The server quit without updating PID file (/home/lnmp/mysql/data/localhost.localdomain.pid).# 1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限# 解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!# 2.可能进程里已经存在mysql进程# 解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!# 3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。# 解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,将它删除。# 4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,查看该文件的[mysqld]下有没有指定的数据目录(datadir)。# 解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data安装计划任务管理工具 - crontabs 点击链接下载 crontabs-1.11-6.20121102git.el7.noarch.rpm,如需下载其他版本,请访问官网; 安装:rpm -ivh crontabs-1.11-6.20121102git.el7.noarch.rpm 添加自动备份任务,具体操作请参考MySQL的自动备份。下载(需要连接VPN)并安装HAProxy 点击链接下载 haproxy-1.5.19.tar.gz,如需下载其他版本请访问官网; 安装HAProxy:# 添加用户组和用户:groupadd -r haproxy useradd -g haproxy -M -s /sbin/nologin haproxy# 为安装文件夹授权:chown -R haproxy:haproxy /usr/local/haproxy# 查看内核:uname -r# 解压安装包tar -xvf haproxy-1.5.19.tar.gzcd haproxy-1.5.19# 根据内核版本进行编译(这里的版本对应的目标是linux310):make TARGET=linux310 ARCH=x86_64 PREFIX=/usr/local/haproxymake install PREFIX=/usr/local/# 将可执行文件拷贝到全局目录下:cp /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy配置HAProxy# 配置HAProxy;cat /etc/haproxy/haproxy.cfgvim /etc/haproxy/haproxy.cfg# 编辑配置文件内容,请参考HAProxy的负载均衡# 重启HAProxy服务;haproxy -f /etc/haproxy/haproxy.cfg# 测试HAProxy;ps -ef | grep haproxy# 访问HAProxy代理的地址和端口,分别停掉备服务器的Nginx服务后,继续访问正常则说明基本配置没问题;下载并安装Keepalived 点击链接下载Keepalived 1.4.5,下载其他版本请访问官网; 安装Keeplived;tar -xvf keepalived-1.4.5.tar.gzcd keepalived-1.4.5./configure –prefix=/usr/local/keepalivedmake && make installmkdir /etc/keepalivedcp /usr/local/keepalived/sbin/keepalived /usr/bin/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confcp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived# 设置开机启动chkconfig keepalived on# 服务操作命令service keepalived startservice keepalived stopservice keepalived restartservice keepalived statusservice keepalived restart & service keepalived status配置Keepalived;# 编辑配置文件:vim /etc/keepalived/keepalived.conf# 主从服务器的配置略有差别,具体配置请参照Keepalived的配置; ...

January 10, 2019 · 3 min · jiezi