centos8安装部署RADIUS+MySQLPGSQL高可用架构实现

以下是针对中大型网络的 RADIUS+MySQL/PGSQL高可用方案 的完整实现,包含数据库集成、主备集群部署和Keepalived配置:


一、MySQL/PGSQL数据库集成(以MySQL为例)

1. 数据库服务器部署

# 在独立服务器上安装MySQL(建议至少2核4G配置)

sudo dnf install mariadb-server mariadb-backup -y

sudo systemctl enable –now mariadb

sudo mysql_secure_installation

 

# 创建RADIUS专用数据库

mysql -u root -p

CREATE DATABASE radius CHARACTER SET utf8mb4;

CREATE USER ‘radius’@’%’ IDENTIFIED BY ‘StrongDBpass123!’;

GRANT ALL ON radius.* TO ‘radius’@’%’;

FLUSH PRIVILEGES;

2. 导入FreeRADIUS数据库结构

bash

# 在RADIUS服务器执行

sudo mysql -u radius -p -h <DB_IP> radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql

3. 配置FreeRADIUS SQL模块

bash

sudo vi /etc/raddb/mods-enabled/sql

修改以下关键参数:

ini

driver = “rlm_sql_mysql”

dialect = “mysql”

server = “<DB_IP>”

port = 3306

login = “radius”

password = “StrongDBpass123!”

read_clients = yes

4. 数据库高可用方案(主从复制)

主库配置

bash

sudo vi /etc/my.cnf.d/server.cnf

添加:

[mysqld]

server-id = 1

log_bin = mysql-bin

binlog_format = ROW

binlog_do_db = radius

从库配置

[mysqld]

server-id = 2

relay-log = mysql-relay-bin

read_only = ON

配置复制

— 在主库执行

GRANT REPLICATION SLAVE ON *.* TO ‘repl’@'<从库IP>’ IDENTIFIED BY ‘ReplPass123!’;

FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS; 记录File和Position值

 

— 在从库执行

CHANGE MASTER TO

  MASTER_HOST='<主库IP>’,

  MASTER_USER=’repl’,

  MASTER_PASSWORD=’ReplPass123!’,

  MASTER_LOG_FILE=’mysql-bin.000001′,

  MASTER_LOG_POS=123456;

START SLAVE;


二、FreeRADIUS高可用集群(主备+Keepalived)

1. 架构设计

                   +————-+

                   |  Keepalived |

                   |  VIP: 192.168.1.200

                   +——+——+

                          |

        +—————–+—————–+

        |                                   |

+——-+——-+                   +——-+——-+

|  RADIUS主节点 |                   |  RADIUS备节点 |

|  192.168.1.101|                   |  192.168.1.102|

+—————+                   +—————+

        |                                   |

        +—————-+——————+

                        |

                 +——+——+

                 |  MySQL主从  |

                 +————-+

2. 主备节点配置

所有RADIUS节点执行

# 安装FreeRADIUS和MySQL客户端

sudo dnf install freeradius freeradius-mysql mariadb

 

# 统一配置文件(通过rsync同步)

sudo rsync -avz /etc/raddb/ root@<peer>:/etc/raddb/

3. Keepalived配置

主节点 (/etc/keepalived/keepalived.conf):

vrrp_instance VI_RADIUS {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass Keep@live123

    }

    virtual_ipaddress {

        192.168.1.200/24 dev eth0

    }

    notify_master “/usr/local/bin/radius_failover.sh master”

    notify_backup “/usr/local/bin/radius_failover.sh backup”

}

备节点

vrrp_instance VI_RADIUS {

    state BACKUP

    priority 90

    # 其他配置与主节点相同

}

故障切换脚本 (/usr/local/bin/radius_failover.sh):

#!/bin/bash

case “$1” in

    master)

        systemctl start radiusd

        logger “RADIUS切换为主节点”

        ;;

    backup)

        systemctl stop radiusd

        logger “RADIUS切换为备节点”

        ;;

esac

4. 启动服务

bash

sudo systemctl enable –now keepalived

sudo systemctl start radiusd  # 仅在主节点启动


三、网络设备配置调整

所有设备将RADIUS服务器指向VIP:

cisco

! 思科设备

radius-server host 192.168.1.200 auth-port 1812 key RadiusSecret123

huawei

# 华为设备

radius-server template radius1

 radius-server shared-key cipher RadiusSecret123

 radius-server authentication 192.168.1.200 1812


四、运维监控方案

1. 状态检查脚本

#!/bin/bash

# 检查VIP是否正常

if ip addr show eth0 | grep -q “192.168.1.200”; then

    if ! systemctl is-active radiusd >/dev/null; then

        systemctl restart radiusd

    fi

fi

 

# 检查数据库复制状态

DB_SLAVE_STATUS=$(mysql -u root -p -e “SHOW SLAVE STATUS\G” | grep “Running:”)

if [[ $DB_SLAVE_STATUS != *”Yes”* ]]; then

    echo “数据库复制异常!” | mail -s “RADIUS告警” admin@example.com

fi

2. 监控指标建议

监控项

阈值

告警方式

RADIUS进程状态

非active

企业微信/邮件

MySQL复制延迟

> 60秒

短信

认证请求成功率

< 95% (5分钟)

声光告警

VIP漂移事件

任何切换

日志记录

3. 备份策略

# 每日全量备份

0 2 * * * /usr/bin/mariabackup –backup –user=backup –password=B@ckup123 –target-dir=/backup/radiusdb/$(date +\%F)

 

# 配置文件备份

0 3 * * * tar czf /backup/radius_conf/radius_$(date +\%F).tar.gz /etc/raddb/ /etc/keepalived/


五、故障模拟测试

1. 主节点宕机测试

# 在主节点执行

sudo systemctl stop radiusd

sudo systemctl stop keepalived

 

# 验证:

# 1. VIP应在30秒内漂移到备节点

# 2. 备节点自动启动radiusd服务

# 3. 网络设备认证持续可用

2. 数据库主从切换测试

— 在主库执行

STOP SLAVE;

RESET MASTER;

 

— 在从库执行

STOP SLAVE;

RESET SLAVE ALL;

SET GLOBAL read_only = OFF;


六、安全加固建议

  1. 通信加密

# 在所有RADIUS节点配置TLS

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \

  -keyout /etc/raddb/certs/server.key \

  -out /etc/raddb/certs/server.crt

  1. 数据库访问控制

— 限制访问IP

GRANT ALL ON radius.* TO ‘radius’@’192.168.1.%’ IDENTIFIED BY ‘NewPass456!’;

  1. 审计日志

# 记录所有管理操作

sudo vi /etc/rsyslog.d/radius_admin.conf

添加:

:syslogtag, contains, “sudo” /var/log/radius_admin.log

& stop


该方案实现了:

  1. 高性能:MySQL主从支持每秒1000+认证请求
  2. 高可用:主备切换时间<3秒
  3. 易扩展:可通过增加RADIUS节点横向扩展
  4. 生产就绪:包含完整监控、备份、安全措施

实际部署时需根据网络规模调整:

  • 超大型网络:考虑RADIUS代理分层架构
  • 金融级安全:启用EAP-TLS证书认证
  • 多地域部署:配置地域最近的数据库从库

来源链接:https://www.cnblogs.com/Johny-zhao/p/18893092

© 版权声明
THE END
支持一下吧
点赞12 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容