用 Keepalived 实现 Proxysql Cluster 高可用

本文是使用《ProxySQL 代理 MariaDB 实现读写分离和负载均衡》的补充,主要记录 proxysql 集群和 keepalived 的配置。配置中的参数参考:https://www.cnblogs.com/kevingrace/p/10411457.html

实验环境:

  • proxysql-node-1(192.168.0.6)
  • proxysql-node-2(192.168.0.9)

proxysql cluster 配置

编辑/etc/proxysql.cnf配置文件,添加修改以下信息:

admin_variables=
{
    admin_credentials="admin:admin;cluster:123456"
#   mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
    mysql_ifaces="0.0.0.0:6032"
#   refresh_interval=2000
#   debug=true
    cluster_username="cluster"
    cluster_password="123456"
    cluster_check_interval_ms=200
    cluster_check_status_frequency=100
    cluster_mysql_query_rules_save_to_disk=true
    cluster_mysql_servers_save_to_disk=true
    cluster_mysql_users_save_to_disk=true
    cluster_proxysql_servers_save_to_disk=true
    cluster_mysql_query_rules_diffs_before_sync=3
    cluster_mysql_servers_diffs_before_sync=3
    cluster_mysql_users_diffs_before_sync=3
    cluster_proxysql_servers_diffs_before_sync=3
}
proxysql_servers=
(
    {
        hostname="192.168.0.6"
        port=6032
        weight=1
        comment="ProxySQL-node-1"
    },
    {
        hostname="192.168.0.9"
        port=6032
        weight=1
        comment="ProxySQL-node-2"
    }
)

查看配置:

mysql> select * from proxysql_servers;
+-------------+------+--------+-----------------+
| hostname    | port | weight | comment         |
+-------------+------+--------+-----------------+
| 192.168.0.6 | 6032 | 1      | ProxySQL-node-1 |
| 192.168.0.9 | 6032 | 1      | ProxySQL-node-2 |
+-------------+------+--------+-----------------+
select * from stats_proxysql_servers_checksums;
mysql> select * from stats_proxysql_servers_metrics;
+-------------+------+--------+-----------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| hostname    | port | weight | comment         | response_time_ms | Uptime_s | last_check_ms | Queries | Client_Connections_connected | Client_Connections_created |
+-------------+------+--------+-----------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| 192.168.0.9 | 6032 | 1      | ProxySQL-node-2 | 4                | 161      | 9861          | 0       | 0                            | 0                          |
| 192.168.0.6 | 6032 | 1      | ProxySQL-node-1 | 3                | 161      | 14986         | 0       | 0                            | 0                          |
+-------------+------+--------+-----------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
2 rows in set (0.00 sec)

配置 keepalived

安装keepalived

yum -y install curl gcc openssl-devel libnl3-devel net-snmp-devel
cd /usr/local/src/
wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz
tar zxvf keepalived-2.0.18.tar.gz
cd keepalived-2.0.18/
./configure --prefix=/usr/local/keepalived
make && make install
#复制启动和配置文件到相应的目录
cp keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/

创建一个检测proxysql的检测脚本:

vim /etc/keepalived/check_proxysql.sh
#!/bin/bash
/usr/bin/netstat -na | grep -e '0.0.0.0:6033' -e '0.0.0.0:6032' &>/dev/null

proxysql-node-1(192.168.0.6)配置

vim /etc/keepalived/keepalived.conf
# Keepalive Config for ProxySQL Master
global_defs {
    # 运行Keepalived机器的一个标识
    router_id PROXYSQL_HA
    script_user root
    enable_script_security
}
vrrp_script chk_proxysql_port {
    # 检测MySQL是否存活的脚本
    script "/etc/keepalived/check_proxysql.sh"

    # 脚本执行间隔,每1s检测一次
    interval 1

    # 脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级减50
    weight -50

    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
    fall 2

    #检测2次成功就算成功。但不修改优先级
    rise 2
}
vrrp_instance VI_1 {

    # 设置一个节点标识,并无实际作用。
    state MASTER

    # 指定虚拟ip的网卡接口
    interface ens33

    # 发送多播包的地址,设为本机网卡地址
    mcast_src_ip 192.168.0.6

    # VRRP组名,两个节点必须一致,以指明各节点同属一VRRP组
    virtual_router_id 50

    # 数字越大,优先级越高,在同一个vrrp_instance下,MASTER优先级必须大于BACKUP优先级。
    # 这样MASTER故障恢复后,就可以将VIP资源再次抢回来。
    priority 100

    # 播信息发送间隔,两个节点需一致
    advert_int 1

    # 认证方式和密码
    authentication {
        auth_type PASS
        auth_pass 1qaz2wsx
    }

    # 设置虚拟IP,两个节点需设置一样
    virtual_ipaddress {
        192.168.0.20
    }
    track_script {
        chk_proxysql_port
    }
}

proxysql-node-2(192.168.0.9)配置

vim /etc/keepalived/keepalived.conf
# Keepalive Config for ProxySQL Backup
global_defs {
    router_id PROXYSQL_HA
    script_user root
    enable_script_security
}
vrrp_script chk_proxysql_port {
    script "/etc/keepalived/check_proxysql.sh"
    interval 1
    weight -50
    fall 2
    rise 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    mcast_src_ip 192.168.0.9
    virtual_router_id 50
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1qaz2wsx
    }
    virtual_ipaddress {
        192.168.0.20
    }
    track_script {
        chk_proxysql_port
    }
}

启动:

/etc/init.d/keepalived start
免责声明:
1.本站所有内容只做学习和交流使用。 版权归原作者所有。
2.保证站内提供的所有可下载源码资源(软件等)都是按“原样”提供,本站未做过任何改动;但本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。
3.本站部分内容均收集于网络!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。请联系站长邮箱:admin#ibian.online(#换成@)处理!

给TA打赏
共{{data.count}}人
人已打赏
中间件数据库

MySQL 高性能中间件 ProxySQL 初步了解和安装

2025-2-25 9:29:36

综合项

1Panel站点前后端分离并用WAF做防护的一个示例(An-example-of-1Panel-site-frontend-backend-separation-with-WAF-protection)

2025-2-20 15:01:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索