searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Centos PXC8.0集群部署方案(续)

2023-06-19 05:51:11
17
0

准备

如前文所述,在A、B和C主机上已经成功安装了PXC8.0。现拟定使用两台主机A和B安装haproxy用于代理A和B上的PXC服务,主机C上的PXC仅用于备份;另安装keepalived实现高可用,将虚拟IP(VIP)绑定在可用的主机上。

Haproxy安装

在主机A和B上(可在任意可连通的两台主机上),执行以下步骤:

  • 安装Haproxy:sudo yum install haproxy。

  • 修改haproxy配置文件:sudo vim /etc/haproxy/haproxy.cfg,内容如下:
global
    log 127.0.0.1 local5 info
    daemon
defaults
    log     global
    mode    tcp
    option  tcplog
    option  dontlognull
    retries 10
    timeout connect         5000
    timeout client          50000
    timeout server          50000
listen  mysql
    bind 0.0.0.0:13306
    balance roundrobin #使用轮询的方式
    #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测,mysql8.0存在问题,禁用
    # option mysql-check user haproxy
    # 填入IP地址和暴露的外部端口
    server node1 {{A.IP}}:3306 check weight 1 maxconn 2000
    server node2 {{B.IP}}:3306 check weight 1 maxconn 2000
    #使用keepalive检测死链
    option  tcpka
  • 配置haproxy日志文件:开启UDP日志接收,并且将local5的所有级别的日志信息都保存至/var/log/haproxy.log,重启rsyslog。
sudo sed -i 's/\#$ModLoad imudp/$ModLoad imudp/' /etc/rsyslog.conf && sudo sed -i 's/\#$UDPServerRun 514/$UDPServerRun 514/' /etc/rsyslog.conf
sudo vi /etc/rsyslog.conf #在最后一行加入 local5.*   /var/log/haproxy.log
sudo systemctl restart rsyslog
  • 启动haproxy服务:systemctl start haproxy,并通过status查看日志启动信息。如已开启防火墙,则需要将13306/tcp端口开放,将服务用于外部访问。

  • 连接测试:mysql -h {{A.IP}} -P 13306 -u root -p 多次连接断开,通过cat /var/log/haproxy.log查看haproxy服务访问的日志信息,在2次连接断开的情况下可以看到,轮询地被分配至两个节点上。

  • 断开测试:先后在主机A和B上停止PXC服务,观察haproxy的日志信息,可以看到,haproxy检测到了两个服务的下线。注:在当前配置情况下,仅通过端口的可访问性来监测服务状态,更合理的方式是通过mysql-check登录用户进行心跳健康检查,然而当前haproxy不支持mysql8.0配置该选项。

Keepalived安装

在主机A和B上(必须跟随Haproxy),执行以下步骤:

  • yum源安装:sudo yum install keepalived
  • 修改keepalived配置文件:sudo vi /etc/keepalived/keepalived.conf,修改原则如下:
    • route_id:全局唯一
    • interface:网卡地址,通常为eth0或ens33,通过ip addr查看网卡信息
    • priority:建议A为100,B为99
    • unicast:单播,A和B设置的源和目的地址相反
    • virtual_router_id:全局唯一
    • authpass:通信认证密码
    • VIP:同一网段内未被占用的IP地址(避免冲突),通常在200-254之间寻找一个。
global_defs {
    route_id {{A.IP}}
    script_user root
    enable_script_security
}
vrrp_script check_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 1
    weight -5
}

vrrp_instance  VI_1 {
    state  BACKUP
    interface  eth0
    virtual_router_id  89
    priority  100
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  123456
    }
    unicast_src_ip {{A.IP}}
    unicast_peer {
        {{B.IP}}
    }
    virtual_ipaddress {
        {{VIP}} dev eth0
    }
    track_script {
        check_haproxy
    }
    notify_backup "/bin/bash /etc/keepalived/start_haproxy_mysql.sh"
}
  • 设置定时检查脚本:sudo vi /etc/keepalived/check_haproxy.sh,每间隔1s执行,如果执行失败,其权重变为priority+weight,VIP自动漂移至权重更大的主机。
#!/bin/sh
systemctl status haproxy | grep 'running'
  • 设置当主机的VIP漂走后执行的操作(变为backup):sudo vi /etc/keepalived/start_haproxy_mysql.sh,当主机的VIP漂走,通常意味着定时检查脚本执行失败,即haproxy终止。通过脚本尝试重启,如果重启成功,权重恢复,VIP将漂回。
#!/bin/sh
systemctl restart haproxy
  • 为脚本添加执行权限:sudo chmod +x /etc/keepalived/*.sh。
  • 启动keepalived服务: sudo systemctl start keepalived,通过status查看状态。
  • 在主机A或B可通过hostname -I或ip addr查看VIP信息,另一方面,可通过tcpdump -i eth0 vrrp -n捕获发生的vrrp协议。

Haproxy和Keepalived保活

  • 开启开机自启动和定时尝试重启。
    sudo systemctl enable keepalived&& sudo systemctl enable haproxy
    sudo crontab -e # 加入*/1 * * * * sudo systemctl start keepalived和*/1 * * * * sudo systemctl start haproxy
    sudo systemctl restart crond
    sudo crontab -l #查看定时计划
0条评论
0 / 1000
l****n
14文章数
0粉丝数
l****n
14 文章 | 0 粉丝
原创

Centos PXC8.0集群部署方案(续)

2023-06-19 05:51:11
17
0

准备

如前文所述,在A、B和C主机上已经成功安装了PXC8.0。现拟定使用两台主机A和B安装haproxy用于代理A和B上的PXC服务,主机C上的PXC仅用于备份;另安装keepalived实现高可用,将虚拟IP(VIP)绑定在可用的主机上。

Haproxy安装

在主机A和B上(可在任意可连通的两台主机上),执行以下步骤:

  • 安装Haproxy:sudo yum install haproxy。

  • 修改haproxy配置文件:sudo vim /etc/haproxy/haproxy.cfg,内容如下:
global
    log 127.0.0.1 local5 info
    daemon
defaults
    log     global
    mode    tcp
    option  tcplog
    option  dontlognull
    retries 10
    timeout connect         5000
    timeout client          50000
    timeout server          50000
listen  mysql
    bind 0.0.0.0:13306
    balance roundrobin #使用轮询的方式
    #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测,mysql8.0存在问题,禁用
    # option mysql-check user haproxy
    # 填入IP地址和暴露的外部端口
    server node1 {{A.IP}}:3306 check weight 1 maxconn 2000
    server node2 {{B.IP}}:3306 check weight 1 maxconn 2000
    #使用keepalive检测死链
    option  tcpka
  • 配置haproxy日志文件:开启UDP日志接收,并且将local5的所有级别的日志信息都保存至/var/log/haproxy.log,重启rsyslog。
sudo sed -i 's/\#$ModLoad imudp/$ModLoad imudp/' /etc/rsyslog.conf && sudo sed -i 's/\#$UDPServerRun 514/$UDPServerRun 514/' /etc/rsyslog.conf
sudo vi /etc/rsyslog.conf #在最后一行加入 local5.*   /var/log/haproxy.log
sudo systemctl restart rsyslog
  • 启动haproxy服务:systemctl start haproxy,并通过status查看日志启动信息。如已开启防火墙,则需要将13306/tcp端口开放,将服务用于外部访问。

  • 连接测试:mysql -h {{A.IP}} -P 13306 -u root -p 多次连接断开,通过cat /var/log/haproxy.log查看haproxy服务访问的日志信息,在2次连接断开的情况下可以看到,轮询地被分配至两个节点上。

  • 断开测试:先后在主机A和B上停止PXC服务,观察haproxy的日志信息,可以看到,haproxy检测到了两个服务的下线。注:在当前配置情况下,仅通过端口的可访问性来监测服务状态,更合理的方式是通过mysql-check登录用户进行心跳健康检查,然而当前haproxy不支持mysql8.0配置该选项。

Keepalived安装

在主机A和B上(必须跟随Haproxy),执行以下步骤:

  • yum源安装:sudo yum install keepalived
  • 修改keepalived配置文件:sudo vi /etc/keepalived/keepalived.conf,修改原则如下:
    • route_id:全局唯一
    • interface:网卡地址,通常为eth0或ens33,通过ip addr查看网卡信息
    • priority:建议A为100,B为99
    • unicast:单播,A和B设置的源和目的地址相反
    • virtual_router_id:全局唯一
    • authpass:通信认证密码
    • VIP:同一网段内未被占用的IP地址(避免冲突),通常在200-254之间寻找一个。
global_defs {
    route_id {{A.IP}}
    script_user root
    enable_script_security
}
vrrp_script check_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 1
    weight -5
}

vrrp_instance  VI_1 {
    state  BACKUP
    interface  eth0
    virtual_router_id  89
    priority  100
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  123456
    }
    unicast_src_ip {{A.IP}}
    unicast_peer {
        {{B.IP}}
    }
    virtual_ipaddress {
        {{VIP}} dev eth0
    }
    track_script {
        check_haproxy
    }
    notify_backup "/bin/bash /etc/keepalived/start_haproxy_mysql.sh"
}
  • 设置定时检查脚本:sudo vi /etc/keepalived/check_haproxy.sh,每间隔1s执行,如果执行失败,其权重变为priority+weight,VIP自动漂移至权重更大的主机。
#!/bin/sh
systemctl status haproxy | grep 'running'
  • 设置当主机的VIP漂走后执行的操作(变为backup):sudo vi /etc/keepalived/start_haproxy_mysql.sh,当主机的VIP漂走,通常意味着定时检查脚本执行失败,即haproxy终止。通过脚本尝试重启,如果重启成功,权重恢复,VIP将漂回。
#!/bin/sh
systemctl restart haproxy
  • 为脚本添加执行权限:sudo chmod +x /etc/keepalived/*.sh。
  • 启动keepalived服务: sudo systemctl start keepalived,通过status查看状态。
  • 在主机A或B可通过hostname -I或ip addr查看VIP信息,另一方面,可通过tcpdump -i eth0 vrrp -n捕获发生的vrrp协议。

Haproxy和Keepalived保活

  • 开启开机自启动和定时尝试重启。
    sudo systemctl enable keepalived&& sudo systemctl enable haproxy
    sudo crontab -e # 加入*/1 * * * * sudo systemctl start keepalived和*/1 * * * * sudo systemctl start haproxy
    sudo systemctl restart crond
    sudo crontab -l #查看定时计划
文章来自个人专栏
高可用集群部署
11 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0