keepalived和haproxy安装经验
1、脚本文件运行出错:syntax error: unexpected end of file
1、查看脚本文件格式 vim check_pg_ha.sh打开文件,执行 :set ff,回车,左下角有 fileformat=dos,则为dos格式,必须转换为unix格式才能使用。 2、解决方法 vim check_pg_ha.sh打开文件,执行:set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式 。
3、运行shell脚本 增加脚本的可执行权限:chmod +x test.sh 运行脚本文件:./test.sh 4、以调试模式运行 bash -x test.sh
2、check_pg_ha.sh
#! /bin/bash 检测数据库pg-0状态 currTime=`date +"%Y-%m-%d %H:%M:%S"` exist=`docker inspect --format '{{.State.Running}}' pg-0` if [ "${exist}" != "true" ]; then service keepalived stop # docker start pg-0 echo "***${currTime},检测到容器pg-0运行不正常,keepalived主备切换***" >> /root/ha/ha.log exit 1 fi #! /bin/bash 检测haproxy状态 A=`ps -C haproxy --no-header |wc -l` if [ $A -eq 0 ]; then service keepalived stop docker stop pg-0 echo "***${currTime},检测到haproxy运行不正常,keepalived和pg主备切换***" >> /root/ha/ha.log exit 1 fi exit 0
3、haproxy安装
1. 安装 yum install -y haproxy rsyslog 2. 编辑配置文件 vim /etc/haproxy/haproxy.cfg 3.日志配置 A、在 /etc/rsyslog.conf 文件追加以下内容: local2.* /var/log/haproxy.log B、并将以下配置项的注释去掉: $ModLoad imudp $UDPServerRun 514 C、新建 /etc/rsyslog.d/haproxy.conf 文件,输入以下内容: local2.* /var/log/haproxy.log 4.启动 service rsyslog start service haproxy start 5.查看服务状态启动结果 查看启动过程和结果:systemctl status haproxy.service -l 查看全部服务状态:systemctl
6.启动不成功原因
ssl没提供证书
80端口被nginx占用
4、keepalived的抢占与非抢占
实际生产中是,当 原先的master恢复后,状态变为backup,不接管服务,这是非抢占模式。 接下来分4种情况说明 1)俩台都为master时,比如server1的优先级大于server2,keepalived启动后server1获得master,server2自动降级为backup。此时server1宕机的话,server2接替 服务,当server1恢复后,server1又变为master,重新接管服务,server2变为backup。属于抢占式。 2)server1为master,server2位backup,且master优先级大于backup。keepalived启动后server1获得master,server2为backup。当server1宕机后, server2接管服务。当server1恢复后,server1重新接管服务变为master,而server2变为backup。属于抢占式 3)server1为master,server2位backup,且master优先级低于backup。keepalived启动后server2获得master,server1为backup。当server2宕机后, server1接管服务。此时server2恢复后抢占服务,获得master,server1降级将为backup。属于抢占式 以上3种,只要级别高就会获取master,与state状态是无关的 4)server1和server2都为backup。我们要注意启动server服务的启动顺序,先启动的升级为master,与优先级无关。。且配置nopreempt项 比如server1获得master权限,server2为backup。此时server1宕机后,server2接管服务升级为master。当server1恢复后权限将为backup,不会争抢 server2的master权限,server2将会继续master权限。属于非抢占式 重点:第4种非抢占式俩节点state必须为bakcup,且必须配置nopreempt 注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了 总结:抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
在抢占模式中,在Keepalived集群中,其实并没有严格意义上的主、备节点,虽然可以在Keepalived配置文件中设置“state”选项为“MASTER”状态,但是这并不意味着此节点一直就是Master角色。控制节点角色的是Keepalived配置文件中的“priority”值,但并它并不控制所有节点的角色,另一个能改变节点角色的是在vrrp_script模块中设置的“weight”值,这两个选项对应的都是一个整数值,其中“weight”值可以是个负整数,一个节点在集群中的角色就是通过这两个值的大小决定的。
1.“weight”值为正数时
在vrrp_script中指定的脚本如果检测成功,那么Master节点的权值将是“weight值与”priority“值之和,如果脚本检测失败,那么Master节点的权值保持为“priority”值,因此切换策略为:
Master节点“vrrp_script”脚本检测失败时,如果Master节点“priority”值小于Backup节点“weight值与”priority“值之和,将发生主、备切换。
Master节点“vrrp_script”脚本检测成功时,如果Master节点“weight”值与“priority”值之和大于Backup节点“weight”值与“priority”值之和,主节点依然为主节点,不发生切换。
5、centos只安装postgresql客户端psql
A、找到官网链接后安装 yum install https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7.12-x86_64/postgresql12-libs-12.3-5PGDG.rhel7.x86_64.rpm B、复制代码二直接安装 先安装yum源 #Install the repository RPM: yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm #再安装客户端 yum install postgresql12 C、复制代码安装后: #psql -V psql (PostgreSQL) 12.3
6、设置pg密码环境变量,在使用脚本pgql访问pg数据库时需要输入密码,设置后自动输入
#linux系统 例如centos7
[root@pg-1 pg]# vim /etc/profile
[root@pg-1 pg]# export PGPASSWORD=Emxxxxxxx
[root@pg-1 pg]# source /etc/profile
临时性生效,bash关闭失效 export PGPASSWORD=Emxxxxxxx #windows系统 set PGPASSWORD=Emxxxxxxx
bash调试命令:bash -x test.sh
7、Keepalived 的配置部署
1.安装 yum install -y ipvsadm keepalived rsyslog 2.修改配置文件 /etc/keepalived/keepalived.conf 3.Haproxy 进程状态检查脚本 chk_haproxy.sh,需要把检查脚本 chk_haproxy.sh 上传到每台机器的 /etc/keepalived 目录下。 4. 启动 service keepalived start 5. 查看服务状态 systemctl status keepalived.service -l
8、check.sh文件
Check_Nginx_Server() { http_status_code=$(curl -m 5 -s -i -w %{http_code} -o/index.html localhost) if [ $http_status_code -ne 200 ];then echo "***${currTime},检测到容器pg-0不运行,keepalived主备切换***" fi } Check_Nginx_Server Check_pg_Server() { currTime=`date +"%Y-%m-%d %H:%M:%S"` result=`psql -X -A -U postgres -h 127.0.0.1 -d ttlock -p 5432 -t -c 'UPDATE public.check SET timestr=1 WHERE id=1'` if [ "${result}" != "UPDATE 1" ]; then echo "***${currTime},检测到容器pg-0不运行,keepalived主备切换***" >> keepalived.log fi } Check_pg_Server ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix