[GTER] Freeradius - MySQL replication

Antonio Modesto modesto at isimples.com.br
Wed Dec 17 11:01:00 -02 2014


 

On 2014-12-12 10:05 am, Daniel Vasconcelos wrote: 

> E aí galera!
>
Seguinte, to montando uma máquina para "espelhar" o meu servidor radius,

> porém, estou tendo um problema com o MySQL. As configurações do 
>
freeradius em si estão todas corretas (fiz testes de autenticação e 
>
funcionou perfeitamente). Porém, o meu problema começa quando eu estou

> replicando o banco de dados.
> 
> Tenho o servidor MASTER e o SLAVE,
sendo que:
> Master: rodando o serviço freeradius e consequentemente o
banco de dados;
> Slave: rodando o serviço freeradius e consequentemente
o banco de dados;
> 
> A configuração do arquivo "/etc/mysql/my.cnf" em
ambas as máquinas está 
> assim:
> 
> ## MASTER
> server-id = 1
>
log_bin = /var/log/mysql/mysql-bin.log
> expire_logs_days =10
>
max_binlog_size = 100M
> binlog_do_db = radius
> 
> ## SLAVE
> server-id
= 2
> log_bin = /var/log/mysql/mysql-bin.log
> relay-log =
/var/log/mysql/mysql-relay-bin.log
> log-slave-updates = 1
>
expire_logs_days = 10
> max_binlog_size = 100M
> binlog_do_db = radius
>

> A partir disso, para que a replicação acontecesse, efetuei os
seguintes 
> procedimentos (partindo do princípio de que a questão de
usuários já 
> estejam configurados):
> 
> No servidor MASTER:
> Travei
as tabelas como somente leitura;
> Peguei a posição do arquivo bin (show
master status;);
> Fiz a exportação da base para o servidor slave;
> 
>
No servidor SLAVE:
> Fiz a importação da base;
> Executei o comando no
mysql: CHANGE MASTER TO 
>
MASTER_HOST='meuhost',MASTER_USER='replication', 
>
MASTER_PASSWORD='senha', MASTER_LOG_FILE='mysql-bin.000006', 
>
MASTER_LOG_POS= 74949498;
> Em seguida: slave start;
> 
> A partir dai,
tudo estava correndo bem, até que na manhã seguinte, 
> cheguei no
trabalho e fui verificar como estava a replicação.
> No MySQL do
servidor slave digitei o comando: show slave statusG;
> Para minha
felicidade estava tudo certo até então. Porém, mais tarde, 
> fui
verificar novamente o status, e me deparei com um erro:
> 
> mysql> show
slave statusG;
> *************************** 1. row
***************************
> Slave_IO_State: Waiting for master to send
event
> Master_Host: meuhost
> Master_User: replicator
> Master_Port:
3306
> Connect_Retry: 60
> Master_Log_File: mysql-bin.000009
>
Read_Master_Log_Pos: 50811963
> Relay_Log_File: mysql-relay-bin.000003
>
Relay_Log_Pos: 244
> Relay_Master_Log_File: mysql-bin.000001
>
Slave_IO_Running: Yes
> Slave_SQL_Running: No
> Replicate_Do_DB:
>
Replicate_Ignore_DB:
> Replicate_Do_Table:
> Replicate_Ignore_Table:
>
Replicate_Wild_Do_Table:
> Replicate_Wild_Ignore_Table:
> Last_Errno:
1194
> Last_Error: Error 'Table 'radacct' is marked as 
> crashed and
should be repaired' on query. Default database: 'radius'. 
> Query:
'UPDATE radacct SET framedipaddress = 
> '10.10.4.5', acctsessiontime =
'53400', 
> acctinputoctets = '0' << 32 | 
> '40914351',
acctoutputoctets = '0' << 32 
> | '362241158' WHERE 
> acctsessionid =
'810033f5' AND username = 
> 'jaguar' AND nasipaddress = '10.54.2.5''
>
Skip_Counter: 0
> Exec_Master_Log_Pos: 98
> Relay_Log_Space: 725792285
>
Until_Condition: None
> Until_Log_File:
> Until_Log_Pos: 0
>
Master_SSL_Allowed: No
> Master_SSL_CA_File:
> Master_SSL_CA_Path:
>
Master_SSL_Cert:
> Master_SSL_Cipher:
> Master_SSL_Key:
>
Seconds_Behind_Master: NULL
> Master_SSL_Verify_Server_Cert: No
>
Last_IO_Errno: 0
> Last_IO_Error:
> Last_SQL_Errno: 1194
>
Last_SQL_Error: Error 'Table 'radacct' is marked as 
> crashed and
should be repaired' on query. Default database: 'radius'. 
> Query:
'UPDATE radacct SET framedipaddress = 
> '10.10.4.5', acctsessiontime =
'53400', 
> acctinputoctets = '0' << 32 | 
> '40914351',
acctoutputoctets = '0' << 32 
> | '362241158' WHERE 
> acctsessionid =
'810033f5' AND username = 
> 'jaguar' AND nasipaddress = '10.54.2.5''
>
Replicate_Ignore_Server_Ids:
> Master_Server_Id: 1
> 1 row in set (0.00
sec)
> 
> ERROR:
> No query specified
> 
> Bom, estou preocupado, pois
não tenho experiência com replicação do 
> MySQL, mas li bastante sobre
e fui surpreendido com esta inconsistência 
> de informação. Alguém
saberia explicar um possível motivo de isso ter 
> acontecido? E a
partir disso, como posso revidar? Devo fazer o processo 
> de
exportação/importação novamente?
> 
> Daniel, Bom dia,
> 
> Você não
pode manter um servidor freeradius rodando sobre o banco de dados slave,
caso contrário seu banco de dados vai ficar inconsistente uma vez que a
replicação é unilateral (master to slave) e ambos os servidores radius
estariam atualizando uma cópia da tabela de accounting. Para esse
cenário você deve tentar subir uma replicação master-to-master (Nunca
usei, não sei se serial estável para esse cenário). Uma solução mais
profissional seria a utilização de um cluster, como o mysql-cluster ou
percona xtradb cluster (fork do mysql).
> 
> Atenciosamente

-- 

 



More information about the gter mailing list