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)}'

 

 








posted @ 2022-12-14 22:33  pearlcity  阅读(137)  评论(0编辑  收藏  举报