[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